здравствуйте!
Моя проблема: когда я нажимаю свою кнопку m_1 (переключение режимов), светодиод из предыдущей задачи не выключается (здесь я сделал это, но я думаю, что это не очень хорошая идея, потому что я принудительно отключаю светодиод из предыдущей задачи…) может быть, есть более правильный программный подход?
для примера проблемы, с которой я столкнулся: Нажимаю вторую кнопку task_0 (r_1), - включаю ledPin_4, затем меняю задачу. ledPin_4 не выключается (я хочу, чтобы task_0 был полностью остановлен.). Я могу отключить его только тогда, когда вернусь к задаче 0.
#define MODE_AM 3 // количество режимов
const int ledPin_1 = 12; // номер выхода светодиода
const int ledPin_2 = 11;
const int ledPin_3 = 10;
const int ledPin_4 = 5;
#include <EncButton.h>
// моя библиотека для более удобной работы с кнопкой
// скачать мождно здесь https://github.com/GyverLibs/EncButton
Button m_1(3);
Button r_1(2);
byte mode = 0; // переменная режима
void setup() {
Serial.begin(19200);
}
void loop() {
m_1.tick();
if (m_1.click()) {
if (++mode >= MODE_AM) mode = 0;
}
// свитч крутится в цикле loop и задачи постоянно вызываются
switch (mode) {
case 0: task_0();
break;
case 1: task_1();
break;
case 2: task_2();
break;
}
}
// наши задачи
void task_0() {
Serial.println("Task 0");
digitalWrite(ledPin_3, LOW);
digitalWrite(ledPin_1, HIGH);
r_1.tick();
if (r_1.click()) digitalWrite(ledPin_4, !digitalRead(ledPin_4));
}
void task_1() {
Serial.println("Task 1");
digitalWrite(ledPin_1, LOW);
digitalWrite(ledPin_2, HIGH);
}
void task_2() {
Serial.println("Task 2");
digitalWrite(ledPin_3, HIGH);
digitalWrite(ledPin_2, LOW);
}