uuu000

button_mypractic_ru

Apr 7th, 2023
903
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.02 KB | None | 0 0
  1. #define LED_PIN 5     // номер вывода светодиода равен 13
  2. #define BUTTON_PIN 4  // номер вывода кнопки равен 12
  3.  
  4. // переменные и константы для обработки сигнала кнопки
  5. boolean flagPress= false;    // признак кнопка в нажатом состоянии
  6. boolean flagClick= false;    // признак нажатия кнопки (фронт)
  7. byte  buttonCount= 0;        // счетчик подтверждений состояния кнопки  
  8. #define TIME_BUTTON 12       // время устойчивого состояния кнопки (* 2 мс)
  9.  
  10. boolean ledState;            // переменная состояния светодиода
  11.  
  12. void setup() {
  13.   pinMode(LED_PIN, OUTPUT);        // определяем вывод 13 (светодиод) как выход
  14.   pinMode(BUTTON_PIN, INPUT_PULLUP);  // определяем вывод 12 (кнопка) как вход
  15. }
  16.  
  17. // бесконечный цикл с периодом 2 мс
  18. // бесконечный цикл с периодом 2 мс
  19. void loop() {
  20.  
  21. /* блок обработки сигнала кнопки
  22.  * при нажатой кнопке flagPress= true
  23.  * при отжатой кнопке flagPress= false
  24.  * при нажатии на кнопку flagClick= true */
  25.  
  26.   if ( flagPress == (! digitalRead(BUTTON_PIN)) ) {
  27.      // признак flagPress = текущему состоянию кнопки
  28.      // (инверсия т.к. активное состояние кнопки LOW)
  29.      // т.е. состояние кнопки осталось прежним
  30.      buttonCount= 0;  // сброс счетчика подтверждений состояния кнопки
  31.   }
  32.   else {
  33.      // признак flagPress не = текущему состоянию кнопки
  34.      // состояние кнопки изменилось
  35.      buttonCount++;   // +1 к счетчику состояния кнопки
  36.  
  37.      if ( buttonCount >= TIME_BUTTON ) {
  38.       // состояние кнопки не мянялось в течение заданного времени
  39.       // состояние кнопки стало устойчивым
  40.       flagPress= ! flagPress; // инверсия признака состояния
  41. buttonCount= 0;  // сброс счетчика подтверждений состояния кнопки
  42.  
  43.       if ( flagPress == true ) flagClick= true; // признак фронта кнопки на нажатие    
  44.      }  
  45.   }
  46.  
  47.  
  48.   // блок управления светодиодом
  49.   if ( flagClick == true ) {
  50.     // было нажатие кнопки
  51.     flagClick= false;       // сброс признака фронта кнопки
  52.     ledState= ! ledState;   // инверсия состояние светодиода
  53.     digitalWrite(LED_PIN, ledState);  // вывод состояния светодиода  
  54.   }
  55.  
  56.   delay(2);  // задержка на 2 мс
  57. }
Advertisement
Add Comment
Please, Sign In to add comment