#include <GyverStepper.h>
#include <EEPROM.h>
//#include "button.h"
#include <GyverButton.h>
//void setRunMode(FOLLOW_POS );
#define BTN_UP_PIN 3 // пин кнопки вверх
#define BTN_DOWN_PIN 4 // пин кнопки вниз
#define BTN_MEDIANA_PIN 6 // пин кнопки вниз
#define LED_PIN 8 // пин светодиода
GButton btnUP(BTN_UP_PIN); // кнопка "яркость вверх"
GButton btnDOWN(BTN_DOWN_PIN); // кнопка "яркость вниз"
GButton btnMEDIANA(BTN_MEDIANA_PIN); // кнопка "яркость вниз"
int LEDbright = 0;
int start = 0;
// глобальный экземпляр для личного использования
//GStepper<STEPPER4WIRE> stepper(4078, 8, 9, 10, 11);
//GStepper<STEPPER4WIRE> stepper(4078, 9, 8, 10, 11);
//GStepper<STEPPER4WIRE> stepper(4078, 9, 10, 9, 11);
//GStepper<STEPPER4WIRE> stepper(4078, 9, 8, 10, 8);
//GStepper<STEPPER4WIRE> stepper(4078, 8, 10, 9, 11);
//GStepper<STEPPER4WIRE> stepper(4078, 8, 9, 10, 10);
//GStepper<STEPPER4WIRE> stepper(4078, 8, 9, 11, 10);
//GStepper<STEPPER4WIRE> stepper(4078, 8, 11, 9, 10);
//GStepper<STEPPER4WIRE> stepper(4078, 8, 11, 10, 9);
//GStepper<STEPPER4WIRE> stepper(4078, 10, 9, 8, 11);
//GStepper<STEPPER4WIRE> stepper(4078, 10, 9, 11, 8);
//GStepper<STEPPER4WIRE> stepper(4078, 10, 8, 9, 11);
GStepper<STEPPER4WIRE> stepper(4078, 10, 8, 11, 9); //робит1
//GStepper<STEPPER4WIRE> stepper(4078, 10, 8, 9, 11); тожерорбит
//GStepper<STEPPER4WIRE> stepper(4078, 10, 11, 9, 8);
//GStepper<STEPPER4WIRE> stepper(4078, 11, 8, 10, 9);
//GStepper<STEPPER4WIRE> stepper(4078, 11, 9, 8, 10); слегка помощнее
//GStepper<STEPPER4WIRE> stepper(4078, 11, 8, 9, 10);
//GStepper<STEPPER4WIRE> stepper(4078, 11, 10, 9, 8);
//GStepper<STEPPER4WIRE> stepper(4078, 11, 9, 10, 8); тоже крутит
// мотор с драйвером ULN2003 подключается по порядку пинов, но крайние нужно поменять местами
// то есть у меня подключено D2-IN1, D3-IN2, D4-IN3, D5-IN4, но в программе поменял 5 и 2
void setup() {
Serial.begin(115200);
//Serial.begin(9600);
// режим следования к целевй позиции
//stepper.setRunMode(FOLLOW_POS);
// установка макс. скорости в шагах/сек
stepper.setMaxSpeed(100);
// установка ускорения в шагах/сек/сек
stepper.setAcceleration(500);
pinMode(LED_PIN, OUTPUT); // пин светодиода как выход
EEPROM.get(0, LEDbright); // прочитали яркость из адреса 0
//analogWrite(LED_PIN, LEDbright); // включили
if(LEDbright == 0) start = 0;
if(LEDbright == 120) start = 1450;
if(LEDbright == 240) start = 2900;
// отключать мотор при достижении цели
// можно установить позицию
// в шагах
stepper.autoPower(true);
}
void loop() {
//Serial.println(data);
// stepper.getCurrent() = data.counter;
//Serial.println(data);
// просто крутим туды-сюды
if (!stepper.tick()) {
static bool dir;
dir = !dir;
// stepper.setTarget( 2900, ABSOLUTE );
//reset();
}
// void setTarget(long pos);
// stepper.setTarget( -2900, ABSOLUTE );
// опрос кнопок
btnUP.tick();
btnDOWN.tick();
btnMEDIANA.tick();
if (btnUP.isClick()) {
// увеличение по клику
LEDbright = 240;
stepper.setTarget( start+-2900, ABSOLUTE );
setBright();
}
if (btnDOWN.isClick()) {
// уменьшение по клику
LEDbright = 0;
stepper.setTarget( start+0, ABSOLUTE );
setBright();
}
if (btnMEDIANA.isClick()) {
// уменьшение по клику
LEDbright = 120;
stepper.setTarget( start+-1450, ABSOLUTE );
setBright();
}
//if (data > 0{})
// stepper.setTarget(dir ? -3200 : 3200);
//}
// записываем
// EEPROM.put(STR_ADDR, str);
//Serial.print("Save text: ");
// Serial.println(stepper.getCurrent());
// график положения
static uint32_t tmr2;
if (millis() - tmr2 > 20) {
tmr2 = millis();
Serial.println(stepper.getCurrent());
}
}
void setBright() {
LEDbright = constrain(LEDbright, 0, 240); // ограничили
EEPROM.put(0, LEDbright); // записали по адресу 0
analogWrite(LED_PIN, LEDbright); // изменили яркость
Serial.println(LEDbright);
}