uuu000

KA ARDUINO 001

Apr 8th, 2023
1,003
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.09 KB | None | 0 0
  1.  
  2. // переменные и константы для обработки сигнала кнопки
  3. boolean flagPress= false;    // признак кнопка в нажатом состоянии
  4. boolean flagClick= false;    // признак нажатия кнопки (фронт)
  5. byte  buttonCount= 0;        // счетчик подтверждений состояния кнопки  
  6. uint8_t timeDrebezg;      // время устойчивого состояния кнопки (* 2 мс)
  7. boolean ledState;            // переменная состояния светодиода
  8. boolean ledState1;            // переменная состояния светодиода
  9. boolean flagPress1= false;    // признак кнопка в нажатом состоянии
  10. boolean flagClick1= false;    // признак нажатия кнопки (фронт)
  11. byte  buttonCount1= 0;        // счетчик подтверждений состояния кнопки  
  12.  
  13.  
  14.  
  15.  
  16. void setup() {
  17.   pinMode(5, OUTPUT);        // определяем вывод 5(светодиод) как выход
  18.   pinMode(6, OUTPUT);        // определяем вывод 6 (светодиод) как выход
  19.   pinMode(7, OUTPUT);        // определяем вывод 7 (светодиод) как выход
  20.    pinMode(8, OUTPUT);        // определяем вывод 8 (светодиод) как выход
  21.   pinMode(4, INPUT_PULLUP);  // определяем вывод 4 (кнопка) как вход
  22.    pinMode(3, INPUT_PULLUP);  // определяем вывод 3 (кнопка) как вход
  23. }
  24.  
  25. // бесконечный цикл с периодом 2 мс
  26. void loop() {
  27.  
  28. button_click_KA();
  29. blink_click_KA();
  30. blink_click_KA1();
  31. button_click_KA1();
  32.  
  33. }
  34.  
  35.  
  36. void button_click_KA()
  37. {
  38. /* блок обработки сигнала кнопки
  39.  * при нажатой кнопке flagPress= true
  40.  * при отжатой кнопке flagPress= false
  41.  * при нажатии на кнопку flagClick= true */
  42.  timeDrebezg=15;
  43.   if ( flagPress == (! digitalRead(4)) ) {
  44.      // признак flagPress = текущему состоянию кнопки
  45.      // (инверсия т.к. активное состояние кнопки LOW)
  46.      // т.е. состояние кнопки осталось прежним
  47.      buttonCount= 0;  // сброс счетчика подтверждений состояния кнопки
  48.   }
  49.   else {
  50.      // признак flagPress не = текущему состоянию кнопки
  51.      // состояние кнопки изменилось
  52.      buttonCount++;   // +1 к счетчику состояния кнопки
  53.  
  54.      if ( buttonCount >= timeDrebezg ) {
  55.       // состояние кнопки не мянялось в течение заданного времени
  56.       // состояние кнопки стало устойчивым
  57.       flagPress= ! flagPress; // инверсия признака состояния
  58. buttonCount= 0;  // сброс счетчика подтверждений состояния кнопки
  59.  
  60.       if ( flagPress == true ) flagClick= true; // признак фронта кнопки на нажатие    
  61.      }  
  62.   }
  63.  delay(2);  // задержка на 2 мс
  64. }
  65. // void bbbb()
  66. // { // блок управления светодиодом
  67. //   if ( flagClick == true ) {
  68. //     // было нажатие кнопки
  69. //     flagClick= false;       // сброс признака фронта кнопки
  70. //     ledState= ! ledState;   // инверсия состояние светодиода
  71. //     digitalWrite(5, ledState);  // вывод состояния светодиода  
  72. //   }
  73. // }
  74.  
  75.  
  76.  
  77.  
  78. void button_click_KA1()
  79. {
  80. /* блок обработки сигнала кнопки
  81.  * при нажатой кнопке flagPress1= true
  82.  * при отжатой кнопке flagPress1= false
  83.  * при нажатии на кнопку flagClick1= true */
  84.  timeDrebezg=15;
  85.   if ( flagPress1 == (! digitalRead(3)) ) {
  86.      // признак flagPress1 = текущему состоянию кнопки
  87.      // (инверсия т.к. активное состояние кнопки LOW)
  88.      // т.е. состояние кнопки осталось прежним
  89.      buttonCount1= 0;  // сброс счетчика подтверждений состояния кнопки
  90.   }
  91.   else {
  92.      // признак flagPress1 не = текущему состоянию кнопки
  93.      // состояние кнопки изменилось
  94.      buttonCount1++;   // +1 к счетчику состояния кнопки
  95.  
  96.      if ( buttonCount1 >= timeDrebezg ) {
  97.       // состояние кнопки не мянялось в течение заданного времени
  98.       // состояние кнопки стало устойчивым
  99.       flagPress1= ! flagPress1; // инверсия признака состояния
  100. buttonCount1= 0;  // сброс счетчика подтверждений состояния кнопки
  101.  
  102.       if ( flagPress1 == true ) flagClick1= true; // признак фронта кнопки на нажатие    
  103.      }  
  104.   }
  105.  delay(2);  // задержка на 2 мс
  106. }
  107. void blink_click_KA1()
  108. { // блок управления светодиодом
  109.   if ( flagClick1 == true ) {
  110.     // было нажатие кнопки
  111.     flagClick1= false;       // сброс признака фронта кнопки
  112.     ledState1= ! ledState1;   // инверсия состояние светодиода
  113.     digitalWrite(8, ledState1);  // вывод состояния светодиода  
  114.   }
  115. }
  116.  
  117. void blink_click_KA(void)
  118. {
  119.     static uint8_t status=1;
  120.    
  121.     switch (status)
  122.     {
  123.  
  124.     case 0:
  125.    if ( flagClick == true ) {
  126.     // было нажатие кнопки
  127.     flagClick= false;       // сброс признака фронта кнопки
  128.    
  129.     digitalWrite(5, LOW);  // вывод состояния светодиода  
  130.     digitalWrite(6, LOW);  // вывод состояния светодиода  
  131.     digitalWrite(7, LOW);  // вывод состояния светодиода    
  132.         status=1;
  133.   }
  134.         break;
  135.        
  136.        
  137.         case 1:
  138.    if ( flagClick == true ) {
  139.     // было нажатие кнопки
  140.     flagClick= false;       // сброс признака фронта кнопки
  141.    
  142.     digitalWrite(5, HIGH);  // вывод состояния светодиода  
  143.     digitalWrite(6, LOW);  // вывод состояния светодиода  
  144.     digitalWrite(7, LOW);  // вывод состояния светодиода    
  145.         status=2;
  146.   }
  147.         break;
  148.        
  149.        
  150.         case 2:
  151.   if ( flagClick == true ) {
  152.     // было нажатие кнопки
  153.     flagClick= false;       // сброс признака фронта кнопки
  154.    
  155.     digitalWrite(5, LOW);  // вывод состояния светодиода  
  156.     digitalWrite(6, HIGH);  // вывод состояния светодиода  
  157.     digitalWrite(7, LOW);  // вывод состояния светодиода    
  158.         status=3;
  159.   }
  160.         break;
  161.        
  162.         case 3:
  163.     if ( flagClick == true ) {
  164.     // было нажатие кнопки
  165.     flagClick= false;       // сброс признака фронта кнопки
  166.    
  167.     digitalWrite(5, LOW);  // вывод состояния светодиода  
  168.     digitalWrite(6, LOW);  // вывод состояния светодиода  
  169.     digitalWrite(7, HIGH);  // вывод состояния светодиода    
  170.         status=0;
  171.   }
  172.         break;
  173.        
  174.         case 4:
  175.    if ( flagClick == true ) {
  176.     // было нажатие кнопки
  177.     flagClick= false;       // сброс признака фронта кнопки
  178.    
  179.     digitalWrite(5, LOW);  // вывод состояния светодиода  
  180.     digitalWrite(6, LOW);  // вывод состояния светодиода  
  181.     digitalWrite(7, LOW);  // вывод состояния светодиода    
  182.         status=0;
  183.   }
  184.        
  185.         break;
  186.     }
  187. }
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
Advertisement
Comments
Add Comment
Please, Sign In to add comment