// Отключить поддержку pressFor/holdFor/stepFor и счётчик степов (экономит 2 байта оперативки)
#define EB_NO_FOR
// Отключить обработчик событий attach (экономит 2 байта оперативки)
#define EB_NO_CALLBACK
// Отключить счётчик энкодера [VirtEncoder, Encoder, EncButton] (экономит 4 байта оперативки)
#define EB_NO_COUNTER
// Отключить буферизацию энкодера (экономит 2 байта оперативки)
#define EB_NO_BUFFER
//Раздефайнить или задефайнить для использования
#define DEBUG_ENABLE
#ifdef DEBUG_ENABLE
#define INIT_DEBUG(x) Serial.begin(x)
#define DEBUG(x) Serial.println(F(x))
#define DEBUG_VAR(x) Serial.println(x)
#define DEBUG_SL(x) Serial.print(F(x))
#define DEBUG_VAR_SL(x) Serial.print(x)
#else
#define INIT_DEBUG(x)
#define DEBUG(x)
#define DEBUG_VAR(x)
#define DEBUG_SL(x)
#define DEBUG_VAR_SL(x)
#endif
#define MENU_PARAMS_LEFT_OFFSET 82 // Смещение вправо для рендеринга значений
#define MENU_SELECTED_H 10 // Высота элемента меню
#define MENU_PAGE_ITEMS_COUNT 6 // Количество элементов меню на одной странице
#include <GyverNTC.h>
#include <EncButton.h>
#include <GyverOLED.h>
//#include <charMap.h>
//#include <icons_7x7.h>
//#include <icons_8x8.h>
//#include <FIFO.h>
//#include <GStypes.h>
#include <GyverStepper2.h>
//#include <StepperCore.h>
#include <GyverOLEDMenu.h>
// Определение пинов для кнопок
#define LEFT_BTN_PIN 6 // Пин для левой кнопки
#define RGHT_BTN_PIN 7 // Пин для правой кнопки
#define TEMP_SENSOR 10 // Пин для датчика температуры
byte temp_set = 0;
float temp;
int32_t speed = 200;
// Создание объектов кнопок
Button left_btn(LEFT_BTN_PIN); // Объект для левой кнопки
Button rght_btn(RGHT_BTN_PIN); // Объект для правой кнопки
// Создание объекта дисплея без буфера
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled; // Объект OLED дисплея
OledMenu<7, GyverOLED<SSD1306_128x64, OLED_BUFFER>> menu(&oled); // Объект меню для OLED дисплея
GStepper2< STEPPER2WIRE> stepper(200, 4, 5);
GyverNTC therm(A1, 10000, 3950);
void setup() {
// Инициализация дисплея OLED
oled.init();
oled.setScale(1); // Установка масштаба 1 (нормальный размер текста)
oled.clear();
oled.update();
prepareDisplay();
stepper.enable();
stepper.setMaxSpeed(200); // скорость движения к цели
stepper.setAcceleration(200); // ускорение
stepper.setSpeed(speed);
}
void loop() {
stepper.tick();
temp = therm.getTempAverage(10);
updateDisplay();
}
void prepareDisplay() {
oled.clear();
oled.setCursorXY(0, 0);
oled.print(F("Мотор"));
oled.setCursorXY(0, 14);
oled.print(F("Скорость"));
oled.setCursorXY(0, 28);
oled.print(F("Уставка"));
oled.setCursorXY(0, 42);
oled.print(F("Темп-ра"));
oled.setCursorXY(0, 56);
oled.print(F("Нагрев"));
oled.update();
}
void updateDisplay() {
oled.setCursorXY(64, 0);
oled.print(F(" "));
oled.setCursorXY(64, 0);
printMotorState();
oled.setCursorXY(64, 14);
oled.print(F(" "));
oled.setCursorXY(64, 14);
oled.print(speed);
oled.setCursorXY(64, 28);
oled.print(F(" "));
oled.setCursorXY(64, 28);
oled.print(temp_set);
oled.setCursorXY(64, 42);
oled.print(F(" "));
oled.setCursorXY(64, 42);
oled.print(temp);
oled.setCursorXY(64, 56);
oled.print(F(" "));
oled.setCursorXY(64, 56);
printHeatState();
oled.update();
}
void printMotorState() {
switch (stepper.getStatus()) {
case 0:
oled.print("Стоит");
break;
case 1:
oled.print("Едет");
break;
case 2:
oled.print("Едет к точке");
break;
case 3:
if (stepper.dir) {
oled.print("Вперёд");
} else {
oled.print("Назад");
}
break;
case 4:
oled.print("Тормозит");
break;
default:
oled.print("ОШИБКА");
break;
}
}
void printHeatState() {
}