Нужно переключать режимы (3 шт) Поочерёдное включение 3 светодиодов, энкодером.
ESP8266 . Набросал скетч из примеров Алекса. Но есть одна проблемка.
Режимы переключается при правом вращении по кругу циклично. То есть 1 - 2 - 3.
А вот при вращение в лево энкодером нет цикличности . Подскажите что не так в коде?
ESP8266 . Набросал скетч из примеров Алекса. Но есть одна проблемка.
Режимы переключается при правом вращении по кругу циклично. То есть 1 - 2 - 3.
А вот при вращение в лево энкодером нет цикличности . Подскажите что не так в коде?
C++:
#define CLK 13 // D7 пин
#define DT 12 // D6 пин
#define SW 14 // D5 пин
#include "GyverEncoder.h"
#define MODE_AM 3 //Количество присетов
Encoder enc1(CLK, DT, SW);
byte mode = 0;
void setup() {
Serial.begin(9600);
pinMode(16, OUTPUT); // Красный светоиод D0 пин
pinMode(5, OUTPUT); // D1 пин
pinMode(4, OUTPUT); // D2 пин
//digitalWrite(16, LOW);
//digitalWrite(5, LOW);
//digitalWrite(4, LOW);
enc1.setType(TYPE2); // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
}
void loop() {
// обязательная функция отработки. Должна постоянно опрашиваться
enc1.tick();
if (enc1.isRight()){
if (++mode >= MODE_AM) mode = 0;
}
switch (mode) {
case 0: task_0();
break;
case 1: task_1();
break;
case 2: task_2();
break;
}
if (enc1.isLeft()){
if (--mode >= MODE_AM) mode = 0;
}
switch (mode) {
case 0: task_0();
break;
case 1: task_1();
break;
case 2: task_2();
break;
}
}
// наши задачи, внутри функций понятное дело может быть всё что угодно
void task_0() {
digitalWrite(16, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
}
void task_1() {
digitalWrite(16, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
}
void task_2() {
digitalWrite(16, LOW);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
}