Главная > Arduino > Баловство с кнопками на Arduino

Баловство с кнопками на Arduino


24 апреля 2013. Разместил: dimon
Этот пример не несет никакого особого смысла кроме способа понять, как избавиться от дребезга при нажатии кнопок. Для этого мы подключим к Arduino UNO дисплей 1602 и пару кнопок. Нажатие на одну кнопку будет увеличивать цифру выводимую на экран, нажатие на вторую – уменьшать.

От дребезга кнопок будем избавляться запоминая предыдущее состояние кнопок и вводя задержку 50 мс - за это время состояние кнопки должно установиться.
Так же кнопки подключим к земле через подтягивающие резисторы 10 кОм для того чтобы избавиться от случайных значений на входах микроконтроллера когда кнопка не нажата.

Скетч:
/*

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

дисплей 1602, два подтягивающих резистора на 1 кОм, две кнопки, 
потенциометр для подсветки дисплея

Подключение дисплея 1602:
Контакт дисплея  	Контакт Arduino	             Значение
  1	                       GND                   Vss
  2                            5V                    Vdd
  3                            GND	             Vo (контрастность)
  4	                       digital 12	     RS
  5	                       digital 11            R/W
  6	                       digital 10            ENABLE
  11	                       digital 5	     DB4
  12	                       digital 4	     DB5
  13	                       digital 3	     DB6
  14                           digital 2	     DB7
  15	                       5V	             LED+
  16                           GND	             LED-

 */
 
 // подключаем библиотеку для работы с LCD
 #include <LiquidCrystal.h>
 // инициализируем LCD, указывая контакты данных
 LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);


// задаем переменные
 int upPin = 8;                  // пин up counter
 int downPin = 7;                // пин down counter
 int Count = 0;                  // счетчик нажатий

 int upPinCurentState = LOW;       // текущее состояние кнопки up
 int upPinLastState = LOW;         // предыдущее состояние кнопки up
 int downPinCurentState = LOW;     // текущее состояние кнопки down
 int downPinLastState = LOW;       // предыдущее состояние кнопки down
 
 void setup() {
   
   
   // красивая "загрузка" программы при старте :)
    lcd.begin(16, 2);
    lcd.print("Loading");
    delay(500);                // ждем 0.5 секунды
    lcd.print(".");
    delay(500);                // ждем 0.5 секунды
    lcd.print(".");
    delay(1000);               // ждем 1 секунду
    lcd.clear();               //очистка экрана
  
  
    // Задаем режим работы портов  
     pinMode(upPin, INPUT);      // Инициализация входа кнопки up
     pinMode(downPin, INPUT);    // Инициализация входа кнопки down
 }
 
 void loop() {
   
   // считываем состояние кнопок
   upPinCurentState = digitalRead(upPin);
   downPinCurentState = digitalRead(downPin);
   
   // избавляемся от дребезга если нажата кнопка up
   if (upPinCurentState == HIGH && (upPinLastState == LOW))    {
     if (upPinCurentState =! upPinLastState) delay (50);
     upPinCurentState = HIGH;
     upPinLastState = HIGH;
     Count++;
   }else {
      if (upPinCurentState == LOW) upPinLastState = LOW;
   }
   
   // избавляемся от дребезга если нажата кнопка down   
   if (downPinCurentState == HIGH && (downPinLastState == LOW))    {
     if (downPinCurentState =! downPinLastState) delay (50);
     downPinCurentState = HIGH;
     downPinLastState = HIGH;
     Count--;
   }else {
      if (downPinCurentState == LOW) downPinLastState = LOW;
   }
   
     


     lcd.setCursor(0, 0);    // устанавливаем курсор в 0-ом столбце, 1 строке
     lcd.print("Count="); 
     lcd.print(Count); 
     lcd.print("    ");      // затрем цифры в конце от прошлого значения, если 
                             //предыдущее значение имело больше символов

 }


Схема подключенияСхема подключения


Собранная схема на макеткеСобранная схема на макетке

Вернуться назад