// Подключаем библиотеку для работы с OLED дисплеем
#include <Adafruit_SSD1306.h>
// Создаем объект дисплея
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
// Определяем константы для центра дисплея и радиуса окружности
#define CX 64
#define CY 32
#define R 7
// Определяем константы для параметров циклоиды
#define T1 0 // Начальное значение параметра t
#define T2 2*PI // Конечное значение параметра t
#define DT 0.01 // Шаг изменения параметра t
// Функция для рисования графика циклоиды
void drawCycloid() {
// Очищаем дисплей
display.clearDisplay();
// Устанавливаем цвет белый
display.setTextColor(SSD1306_WHITE);
// Рисуем оси координат
display.drawLine(0, CY, 128, CY, SSD1306_WHITE); // Горизонтальная ось
display.drawLine(CX, 0, CX, 64, SSD1306_WHITE); // Вертикальная ось
// Рисуем график циклоиды
float t = -4*PI; // Задаем начальное значение параметра t
while (t <= 2*T2) { // Пока t не превысит конечное значение
// Вычисляем координаты точки на циклоиде по формулам
float x = CX + R * (t - sin(t));
float y = CY - R * (1 - cos(t));
// Рисуем точку на дисплее
display.drawPixel(x, y, SSD1306_WHITE);
// Увеличиваем t на шаг
t += DT;
}
// Выводим на дисплей
display.display();
}
// Функция для вычисления длины дуги циклоиды
float arcLength() {
// Используем формулу L = 4R(cos(t1/2) - cos(t2/2))
float L = 4 * R * (cos(T1 / 2) - cos(T2 / 2));
// Возвращаем результат
return L;
}
void setup() {
// Инициализируем дисплей
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Рисуем график циклоиды
drawCycloid();
// Вычисляем длину дуги циклоиды
float L = arcLength();
// Выводим длину дуги на дисплее
display.setCursor(0, 0); // Устанавливаем курсор в левый верхний угол
display.print("L = "); // Печатаем текст
display.print(L); // Печатаем значение длины
display.println(" pixels"); // Печатаем единицу измерения
display.display(); // Выводим на дисплей
}
void loop() {
// Ничего не делаем
}