Этот пример не несет никакого особого смысла кроме способа понять, как избавиться от дребезга при нажатии кнопок. Для этого мы подключим к 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(" "); // затрем цифры в конце от прошлого значения, если
//предыдущее значение имело больше символов
}
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.