Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // переменные и константы для обработки сигнала кнопки
- boolean flagPress= false; // признак кнопка в нажатом состоянии
- boolean flagClick= false; // признак нажатия кнопки (фронт)
- byte buttonCount= 0; // счетчик подтверждений состояния кнопки
- uint8_t timeDrebezg; // время устойчивого состояния кнопки (* 2 мс)
- boolean ledState; // переменная состояния светодиода
- boolean ledState1; // переменная состояния светодиода
- boolean flagPress1= false; // признак кнопка в нажатом состоянии
- boolean flagClick1= false; // признак нажатия кнопки (фронт)
- byte buttonCount1= 0; // счетчик подтверждений состояния кнопки
- void setup() {
- pinMode(5, OUTPUT); // определяем вывод 5(светодиод) как выход
- pinMode(6, OUTPUT); // определяем вывод 6 (светодиод) как выход
- pinMode(7, OUTPUT); // определяем вывод 7 (светодиод) как выход
- pinMode(8, OUTPUT); // определяем вывод 8 (светодиод) как выход
- pinMode(4, INPUT_PULLUP); // определяем вывод 4 (кнопка) как вход
- pinMode(3, INPUT_PULLUP); // определяем вывод 3 (кнопка) как вход
- }
- // бесконечный цикл с периодом 2 мс
- void loop() {
- button_click_KA();
- blink_click_KA();
- blink_click_KA1();
- button_click_KA1();
- }
- void button_click_KA()
- {
- /* блок обработки сигнала кнопки
- * при нажатой кнопке flagPress= true
- * при отжатой кнопке flagPress= false
- * при нажатии на кнопку flagClick= true */
- timeDrebezg=15;
- if ( flagPress == (! digitalRead(4)) ) {
- // признак flagPress = текущему состоянию кнопки
- // (инверсия т.к. активное состояние кнопки LOW)
- // т.е. состояние кнопки осталось прежним
- buttonCount= 0; // сброс счетчика подтверждений состояния кнопки
- }
- else {
- // признак flagPress не = текущему состоянию кнопки
- // состояние кнопки изменилось
- buttonCount++; // +1 к счетчику состояния кнопки
- if ( buttonCount >= timeDrebezg ) {
- // состояние кнопки не мянялось в течение заданного времени
- // состояние кнопки стало устойчивым
- flagPress= ! flagPress; // инверсия признака состояния
- buttonCount= 0; // сброс счетчика подтверждений состояния кнопки
- if ( flagPress == true ) flagClick= true; // признак фронта кнопки на нажатие
- }
- }
- delay(2); // задержка на 2 мс
- }
- // void bbbb()
- // { // блок управления светодиодом
- // if ( flagClick == true ) {
- // // было нажатие кнопки
- // flagClick= false; // сброс признака фронта кнопки
- // ledState= ! ledState; // инверсия состояние светодиода
- // digitalWrite(5, ledState); // вывод состояния светодиода
- // }
- // }
- void button_click_KA1()
- {
- /* блок обработки сигнала кнопки
- * при нажатой кнопке flagPress1= true
- * при отжатой кнопке flagPress1= false
- * при нажатии на кнопку flagClick1= true */
- timeDrebezg=15;
- if ( flagPress1 == (! digitalRead(3)) ) {
- // признак flagPress1 = текущему состоянию кнопки
- // (инверсия т.к. активное состояние кнопки LOW)
- // т.е. состояние кнопки осталось прежним
- buttonCount1= 0; // сброс счетчика подтверждений состояния кнопки
- }
- else {
- // признак flagPress1 не = текущему состоянию кнопки
- // состояние кнопки изменилось
- buttonCount1++; // +1 к счетчику состояния кнопки
- if ( buttonCount1 >= timeDrebezg ) {
- // состояние кнопки не мянялось в течение заданного времени
- // состояние кнопки стало устойчивым
- flagPress1= ! flagPress1; // инверсия признака состояния
- buttonCount1= 0; // сброс счетчика подтверждений состояния кнопки
- if ( flagPress1 == true ) flagClick1= true; // признак фронта кнопки на нажатие
- }
- }
- delay(2); // задержка на 2 мс
- }
- void blink_click_KA1()
- { // блок управления светодиодом
- if ( flagClick1 == true ) {
- // было нажатие кнопки
- flagClick1= false; // сброс признака фронта кнопки
- ledState1= ! ledState1; // инверсия состояние светодиода
- digitalWrite(8, ledState1); // вывод состояния светодиода
- }
- }
- void blink_click_KA(void)
- {
- static uint8_t status=1;
- switch (status)
- {
- case 0:
- if ( flagClick == true ) {
- // было нажатие кнопки
- flagClick= false; // сброс признака фронта кнопки
- digitalWrite(5, LOW); // вывод состояния светодиода
- digitalWrite(6, LOW); // вывод состояния светодиода
- digitalWrite(7, LOW); // вывод состояния светодиода
- status=1;
- }
- break;
- case 1:
- if ( flagClick == true ) {
- // было нажатие кнопки
- flagClick= false; // сброс признака фронта кнопки
- digitalWrite(5, HIGH); // вывод состояния светодиода
- digitalWrite(6, LOW); // вывод состояния светодиода
- digitalWrite(7, LOW); // вывод состояния светодиода
- status=2;
- }
- break;
- case 2:
- if ( flagClick == true ) {
- // было нажатие кнопки
- flagClick= false; // сброс признака фронта кнопки
- digitalWrite(5, LOW); // вывод состояния светодиода
- digitalWrite(6, HIGH); // вывод состояния светодиода
- digitalWrite(7, LOW); // вывод состояния светодиода
- status=3;
- }
- break;
- case 3:
- if ( flagClick == true ) {
- // было нажатие кнопки
- flagClick= false; // сброс признака фронта кнопки
- digitalWrite(5, LOW); // вывод состояния светодиода
- digitalWrite(6, LOW); // вывод состояния светодиода
- digitalWrite(7, HIGH); // вывод состояния светодиода
- status=0;
- }
- break;
- case 4:
- if ( flagClick == true ) {
- // было нажатие кнопки
- flagClick= false; // сброс признака фронта кнопки
- digitalWrite(5, LOW); // вывод состояния светодиода
- digitalWrite(6, LOW); // вывод состояния светодиода
- digitalWrite(7, LOW); // вывод состояния светодиода
- status=0;
- }
- break;
- }
- }
Advertisement