Проблема при работе с кнопками

a1000
Offline
Зарегистрирован: 06.10.2015

Есть у меня один вялотекущий проект. При наличии настроения и свободного времени пробую сделать часы с синхронизацией по 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 в режиме корректировки работает через раз и то в лучшем случае. Менял кнопки, порты - не помогает. Кто подскажет в чём проблема.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

a1000 пишет:

Кто подскажет в чём проблема.

ну, дык... зови автора библиотеки сюда и пусть он тебе здесь нам всем расскажет, почему у тебя его библиотека не работает.

a1000
Offline
Зарегистрирован: 06.10.2015

Клапауций 112 пишет:

ну, дык... зови автора библиотеки сюда и пусть он тебе здесь нам всем расскажет, почему у тебя его библиотека не работает.

уже пробую найти через ВК

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

a1000 пишет:

уже пробую найти через ВК

Искать надо через другие органы.