Как сделать...

Тема в разделе "Arduino & Shields", создана пользователем Yaroduinoo, 5 май 2020.

  1. Yaroduinoo

    Yaroduinoo Нерд

    • 5.1. Не создавайте темы с малопонятным содержанием.
    Так что бы если ардуина не видела нажатие кнопок в течение 10 секунд то делала что то(в моем случае уходила на главный экран но это не важно). Или куда копать что бы так сделать? Извините если глупый вопрос.
     
  2. SergeiL

    SergeiL Оракул Модератор

    Вариантов много, можно так:
    Код (C++):
    #include <TimerOne.h>  

    // --------------------------------- Timers --------------------------
    #define TICKER_PERIOD      20   // ms   период таймера

    #define SEC_COUNT_TO       1*(1000/TICKER_PERIOD)       //  1 sec  в единицах тикера
    #define PB_TO                10                           //  10 sec  в секундах

    uint8_t  PB_TO_counter = 0;                              //  Sec
    uint8_t     PB_TO_Update_flag = 0;

    void Timer_Func(void)
    {
      static uint16_t Sec_Counter = SEC_COUNT_TO;  // для универсальности с запасом

      Sec_Counter--;

    // здесь обрабатываем интервалы в тиках таймера

      if (Sec_Counter == 0)         // 1 Sec counter  сюда попадаем 1 раз в секунду
      {
        Sec_Counter = SEC_COUNT_TO;  // перезапустим секундный счетчик
       
        if (PB_TO_counter)           // если счетчик в нуле - ничего не делаем, таймер - не взведен
        {
          PB_TO_counter--;           // если не в нуле - уменьшим на 1
          if (PB_TO_counter==0)     // если стал 0
            PB_TO_Update_flag = 1;   // взведем  флаг о необходимости действия в loop()
        }
      }
    }

    // там где обрабатываем нажатия - делаем запуск или перезапуск таймера:

    PB_TO_counter = PB_TO;


    setup()
    {
        // .................................
        // .................................

      Timer1.initialize(1000L*(long)TICKER_PERIOD);
      Timer1.attachInterrupt(Timer_Func);

        // .................................
        // .................................

    }


    // в loop:

    loop()
    {
        // .................................
        // .................................
       
        if (PB_TO_Update_flag)
        {
            // переведем меню на начальный экран.
           
            PB_TO_Update_flag=0;   // действие выполнили - скинем флаг
        }
        // .................................
        // .................................
    }
     
    Yaroduinoo нравится это.