Реакция на длительное нажатие кнопки для ардуино

Тема в разделе "Arduino & Shields", создана пользователем ArtemFBR, 28 мар 2023.

  1. ArtemFBR

    ArtemFBR Нуб

    Я делал детект на длительное нажатие кнопки чтоби войти в меню но по прохождению 5 секунд
    после запуска ардуино кнопка срабативала сразу же без длительного нажатия. Помогите решить данную проблему?
    (скетч находится на этапе написания)
    Код (C++):
    #define CLK 2
    #define DIO 3

    #define button14B 14 // пин кнопки button14

    #include "GyverTM1637.h"
    GyverTM1637 disp(CLK, DIO);

    int button1S = 0;
    char button1M = 0;
    int brightness1 = 7;
    boolean Flag1 = 0;  
    boolean button1H = 0;  
    boolean button1HO = 0;
    boolean button1D = 0;  
    boolean button1DP = 0;

    #define hold 5000
    #define hold_1 200    

    unsigned long button1_timer;
    uint32_t Now, clocktimer;
    byte Brightness[] = {_B,_r,0x40,_S,_empty};
    byte Setings[] = {_S,_E,_t,_t,_i,_n,_G,_S,_empty};

    void setup() {
      Serial.begin(9600);
      pinMode(button14B, INPUT);
      disp.clear();
      disp.brightness(7);
    }

    void loop() {
      buttons();
      //-------опрос кнопок--------
      button1S = analogRead(button14B);
    }

    void buttons() {   // флажки кнопок (F - Flag)
      if(button1S >= 730 && button1S <= 740 && button1M == 0 && millis() - button1_timer > hold) {
        Serial.println("Menu");
        disp.clear();
        disp.runningString(Setings, sizeof(Setings), 200);
        button1M = 1;
        button1_timer = millis();
      }
      switch (button1M) {
       case 1:
      if (Flag1 == 0) {
       Serial.println("Brightness");
       disp.clear();
       disp.runningString(Brightness, sizeof(Brightness), 200);
       Flag1 = 1;
      }
       if(Flag1 == 1){
        disp.displayInt(brightness1);
        Serial.println(brightness1);
        }
      if(button1S >= 640 && button1S <= 650 && brightness1 < 7 && Flag1 == 1 && millis() - button1_timer > hold_1) {
        brightness1 ++;
        disp.brightness(brightness1);
        button1_timer = millis();
      }
       if(button1S >= 850 && button1S <= 860 && Flag1 == 1 && brightness1 > 0 && millis() - button1_timer > hold_1) {
        brightness1 --;
        disp.brightness(brightness1);
        button1_timer = millis();
      }
       break;
      case 2: ; break;
      case 3: ; break;
      case 4: ; break;
      case 5: ; break;
      case 6: ; break;
    }
    }
     
     
  2. fogary

    fogary Гик

    Код (C++):
    millis() - button1_timer > hold
    Изначально переменная button1_timer не инициализирована, можно считать, что ее значение равно нулю.
    Указанная проверка, с большой вероятностью, сработает без задержки.