Всем привет.
Написал код, mode_display_time() - отображение времени, если подержать кнопку (isHold()) - тогда переходим в функцию setup_time() настройка времени. А после еще одного клика butt4.isClick() переходим в основное меню. и так это все работает.
Но если в функции setup_time() - isClick() меняю на isHold(), то не срабатывают прерывания или слишком быстро все срабатывает и получается я проскакиваю setup_time() - выходя в основное меню, а по логике подержал кнопку 1 раз, потом настроил часы и для сохранения подержать надо еще раз.
Пробовал добавлять setTimeout(1000); и в первой функции и второй - не помогает, проскакивает. Почему с 2 -я hold не работает как надо??? Спасибо
void mode_display_time(){
//Здесь отображение времени
...........................
butt4.setTimeout(1000);
if (butt4.isHold()){tone(SPEAKER, 1000, 200); delay(200); tone(SPEAKER, 1500, 200); setnumMenu = 1;} // переход в настройку часов удержание кнопки SET
}
// Настройка основных часов - прибавить 1 час, прибавить минуты.
void setup_time(){
//настройка времени
...........................
if (butt4.isHold()) {tone(SPEAKER, 1000, 400); numMenu = 1; setnumMenu = 0; }; // выход в основное меню
}
void loop(){
//Чтение из rtc
//Чтение кнопок
..........
switch(numMenu)
{
case 0: if ((numMenu == 0 ) && (setnumMenu == 0)) { display_digits_off(); } break; // выключить дисплей
case 1: if ((numMenu == 1 ) && (setnumMenu == 0)) { mode_display_time(); } break; // настройка времени
case 2: if ((numMenu == 2 ) && (setnumMenu == 0)) { onHourRelay(); } break; // настройка "часа" включения реле
case 3: if ((numMenu == 3 ) && (setnumMenu == 0)) { offHourRelay(); } break; // настройка "часа" выключения реле
}
if ((numMenu == 1 ) && (setnumMenu == 1)) { setup_time(); }
if ((numMenu == 2 ) && (setnumMenu == 2)) { editOnHourRelay(); }
if ((numMenu == 3 ) && (setnumMenu == 3)) { editOffHourRelay(); }
if (butt1.isClick()) {tone(SPEAKER, 1000, 10); numMenu = numMenu + 1; if (numMenu > 3) {numMenu = 0;}} // меню 1 показать время - Нажата кнопка MODE
}