Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Спасибо за статью, но хочу отметить, что ардуиновский компилятор совместим с C++11, так что смело можно использовать enum class вместо enum, значительно повышает читабельность кода и помогает избежать ошибок. И для констант стоит использовать const, а не препроцессор
struct {
byte flag : 1,
byte pin : 4
}void toDispToggle(enum state st, enum input in) {
Serial << «toDispToggle » << st << " " << in << endl;
if (dMode == 0 || dMode == 1) {
dMode ^= 1;
class toggleSmartButton: public SmartButton {
private:
byte myToggle=0;
public:
toggleSmartButton(int p) : SmartButton(p) {} // Надо вызвать родительский конструктор, увы.
virtual void onClick(); // Метод, который переопределяем. В базе он пустой.
};
// делаем объект. пин12.
toggleSmartButton bt(12);
// Этот метод переключает по клику
void modeSmartButton::onClick() {
if (myToggle) {
// Код для включения
Serial.println("ON");
} else {
// Код для выключения
Serial.println("OFF");
}
myToggle=!myToggle;
}
void loop() {
bt.run(); // Надо положить сюда этот вызов.
}Как упаковать её в класс и спрятать в отдельную папку — я напишу в следующей статье.
Я сделал ООПный интерфейс к кнопкам, можно наследовать базовый абстрактный класс и делать свои классы кнопок для меню, для управления, для двойного клика итп.
В асинхронном режиме же, писать в loop() что-то типа if (bt.pressed()) { код } не очень правильно. Лучше код вставлять в том месте, где собственно случается событие.
Функция delay() имеет удобство только для чайников или чего-то однопоточного и неспешного. Ну, нет многозадачности в ардуине, нет. delay() блокирует выполнение, чип тупо стоит и ждёт.
чтобы сделать как Serial
if (button.available()) {
bt=button.read();
}Как мне видится удобный обработчик клика в соответствии с концепцией Arduino.
В начале создаём объект типа smartbutton. Как-то типа «SmartButton mybutt».
А в loop мы получаем его состояние, и делаем нужные дела, типа «if (mybutt.pressed) {......}»
Самого главного нет: сколько ресурсов ушло на опрос одной кнопки. РОМ, РАМ, процессорное время.
А нас учили, что основой КА является граф переходов, а не табличка. Граф можно представить в виде таблички, это да, но это другой вопрос...
МКА (машина конечных автоматов) для чайников на примере класса «кнопка» в arduino