Длительное удержание кнопки

Тема в разделе "Arduino & Shields", создана пользователем Simon, 1 фев 2020.

  1. Simon

    Simon Нерд

    Здравствуйте, уважаемые форумчане. У меня появилась задача. Есть 3 режима: ожидание, режим охраны, тест. между ожиданием и режимом охраны должно быть 1 короткое нажатие, а чтобы зайти в тест, нужно подержать кнопку какое то время. Помогите пожалуйста реализовать данную затею. Вот код:
     

    Вложения:

  2. NikitOS

    NikitOS Король шутов Администратор

    Simon нравится это.
  3. alp69

    alp69 Форумчанин

    Ожидание, режим охраны, тест...
    Я, как человек, профессионально занимающийся системами охраны, не понимаю смысла формулировки режимов, кроме "режим охраны".
    Что должно происходить в режиме "ожидание"?
    Режим "тест" подразумевает имитацию сработки всех датчиков? Тогда как он реализован?
    Я понимаю, что вопрос не совсем по существу. Просто заинтересовался - вдруг для себя что-то новое открою?
    А может посоветую что-то более дельное по алгоритмам?
    P.S. Судя по содержимому файла и заданному вопросу - Вы плохо представляете структуру программы. Прошу Вас для начала ознакомиться с азами.
     
  4. parovoZZ

    parovoZZ Гуру

    Если вы не можете объехать болид, так купите его. У него и пожарка, и охранка, и технологические шлейфы до кучи с 5-ю состояниями!
     
  5. vvr

    vvr Инженерище

    а есть ссылки на либы, которые он тупо тырит ?))))
     
  6. liahim55

    liahim55 Нерд

    Вот выдержка из недавнего проекта. Может не оптимально, но работает.
    Код (C++):
    if(digitalRead(But_Sel) == LOW)
      {
        delay(10);
        if(digitalRead(But_Sel) == LOW)
         {
          t_sel=0;
          time_kn = millis();
          rk= 0;    
          while ( t_sel<3000&& rk==0)
            {                        
           if(digitalRead(But_Sel)==HIGH)
            {
             rk = 1;
             }                                                                                      
          t_sel= millis()-time_kn;
       
             }
          if(t_sel < 3000)
            {
              Sel_U();
            }
          else
           {
         
             ScrSelP();
           }
         }
    .