дребезг кнопки при нажатии.

Тема в разделе "Arduino & Shields", создана пользователем arduin, 12 мар 2017.

  1. arduin

    arduin Нерд

    Добрый день.

    Скажите пожалуйста на сколько правильно такое решение.

    При нажатии на кнопку меняется значение переменной.
    Повторное нажатие кнопки снова увеличивает значение
    при этом удержание кнопки не меняет значение после нажатия.


    Код (C++):

    //Функция обработки Меню, задача - при нажатии кнопки,  переменной  lines прибавить значение
    // каждое нажатие +1  по нарастающей  до  необходимого   сисла. пример от 1 до 5
       byte  bouncer;                // Инициируем bouncer  
    void menu()
    {      
               bouncer = digitalRead(12);     //Считываем  нажатие кнопки, 0 не нажата, 1 нажата
               if((bouncer) == 0){     //Проверяем нажата ли  кнопка, и  если нажата  обрабатываем условие
               if(digitalRead(12) == HIGH && bouncer==bouncer){   //Считываем  нажатие кнопки,и прибавляем 1 в   lines++;     если bouncer==bouncer   тогда истина
               lines++;
               if(lines == 5) lines = 1;      //Если   lines  == 5   сбрасываем   lines в 1. То есть обнуляем цикл  и начинаем с начала
               tft.setCursor(80, 110);
               tft.setTextColor(YELLOW,BLACK);
               tft.setTextSize(3);
               tft. print("MENU");       tft. print('\t');    tft. print(lines);
             tft.setCursor(80, 140);
             tft. print("BUTTON ");       tft. print('\t');    tft. print(bouncer);
           
        }
       }
    }
     
    Последнее редактирование: 12 мар 2017
  2. arduin

    arduin Нерд

    Обнаружил глюк tft. print(" "); // Без этой строки данные выводятся не постоянно, могут быть пропуски.

    Подскажите почему так.

    Код (C++):

    void menu()
    {
           vall= digitalRead(12);
          tft. print(" ");   // Без этой строки данные выводятся  не предсказуемо
          if((vall) == 0){
               if(digitalRead(12) == HIGH &&  vall==vall){
               lines++;
               if(lines == 6) lines = 1;
               tft.setCursor(80, 110);
               tft.setTextColor(YELLOW,BLACK);
               tft.setTextSize(3);
               tft. print("lines");       tft. print('\t');    tft. print(lines);
               vall + 1;
                 
        }
       }


    }
     
  3. rkit

    rkit Гуру

    Всё неправильно. Смотрите в вики в статье про кнопку должен быть код.
     
    arduin нравится это.
  4. ostrov

    ostrov Гуру

    В минипроектах во втором примере что ли.
     
  5. arduin

    arduin Нерд

    Спасибо переделал.