Проблема при работе с кнопками
- Войдите на сайт для отправки комментариев
Есть у меня один вялотекущий проект. При наличии настроения и свободного времени пробую сделать часы с синхронизацией по GPS. Всё уже как-бы получилось и работает в макетном варианте, но остался один незначительный вопрос - изменение GMT для перехода на зимнее-летнее время. Всё управлении необходимо реализовать двумя кнопками (больше не осталось свободных портов). Логика управления задумана такая:
Длинное нажатие кнопки 2 - переход в режим корректировки GMT.
В режиме корректировки короткое нажатие на кнопку 1 увеличивает GMT на одну единицу, соответственно короткое нажатие на кнопку 2 уменьшает GMT на одну единицу.
Длинное нажатие кнопки 2 в режиме корректировки - возврат часов в основной режим.
Что-бы не расписывать в скетче устранение дребезга контактов и разделение на длинное и короткое нажатие, воспользовался библиотекой из этой статьи http://samopal.pro/arduino-button-2/
При запуске тестового скетча из библиотеки всё работает на ура. Попробовал применить это в часах. Привожу ту часть, в которой реализована корректировка GMT
#include "sav_button.h" SButton button1(11,50,2000,0,0); SButton button2(12,50,2000,0,0); int timeoffset = 3; // Это и есть тот самый GMT void setup(void) { ........... ........... // Инициация кнопок button1.begin(); button2.begin(); ..............., .............. } void loop(void) { .................. .................. // Установка часового пояся if ( button2.Loop() == SB_LONG_CLICK ) //вход в режим корректировки по длинному нажатию кнопки 2 { int timeoffset_now = 100000; for (; button2.Loop() != SB_LONG_CLICK;) // пока нет длинного нажатия кнопки 2 { if (timeoffset_now != timeoffset) // вывод на экран текущего значения GMT при его изменении { tft.fillScreen(BLACK); if (timeoffset>0) GMT = "GMT +" + String(timeoffset); else GMT = "GMT " + String(timeoffset); tft.setCursor(45, 90); tft.setTextColor(RED); tft.setTextSize(6); tft.println(GMT); timeoffset_now = timeoffset; } if (button1.Loop() == SB_CLICK) //увеличение GMT на единицу по короткому нажатию кнопки 1 { if (timeoffset<12) timeoffset++; } if (button2.Loop() == SB_CLICK) //уменьшение GMT на единицу по короткому нажатию кнопки 2 { if (timeoffset>-12) timeoffset--; } minut = -1; } } } }
На практике всё работает не совсем так как задумано. В корректировку по длинному нажатии кнопки 2 входит. Кнопка 1 работает как задумано. Но кнопка 2 в режиме корректировки работает через раз и то в лучшем случае. Менял кнопки, порты - не помогает. Кто подскажет в чём проблема.
Кто подскажет в чём проблема.
ну, дык... зови автора библиотеки сюда и пусть он тебе здесь нам всем расскажет, почему у тебя его библиотека не работает.
ну, дык... зови автора библиотеки сюда и пусть он тебе здесь нам всем расскажет, почему у тебя его библиотека не работает.
уже пробую найти через ВК
уже пробую найти через ВК
Искать надо через другие органы.