uuu000

OLED_ADC_copy_millis_without_1/2OLED

May 22nd, 2023
908
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.62 KB | None | 0 0
  1. #include <GyverOLED.h>
  2. GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
  3.  
  4. // переменные и константы для обработки сигнала кнопки
  5. boolean flagPress = false;   // признак кнопка в нажатом состоянии
  6. boolean flagClick = false;   // признак нажатия кнопки (фронт)
  7. byte buttonCount = 0;        // счетчик подтверждений состояния кнопки
  8. uint8_t timeDrebezg;         // время устойчивого состояния кнопки (* 2 мс)
  9. boolean ledState;            // переменная состояния светодиода
  10. boolean ledState1;           // переменная состояния светодиода
  11. boolean flagPress1 = false;  // признак кнопка в нажатом состоянии
  12. boolean flagClick1 = false;  // признак нажатия кнопки (фронт)
  13. byte buttonCount1 = 0;       // счетчик подтверждений состояния кнопки
  14.  
  15.  
  16. void setup() {
  17.   pinMode(A0, OUTPUT);        // определяем вывод 5(светодиод) как выход
  18.   pinMode(A1, OUTPUT);        // определяем вывод 6 (светодиод) как выход
  19.   pinMode(A2, OUTPUT);        // определяем вывод 12 (светодиод) как выход
  20.   pinMode(9, OUTPUT);        // определяем вывод 8 (светодиод) как выход
  21.   pinMode(11, INPUT_PULLUP);  // определяем вывод 4 (кнопка) как вход
  22.   pinMode(8, INPUT_PULLUP);  // определяем вывод 3 (кнопка) как вход
  23.   pinMode(0, OUTPUT);       // определяем вывод 5(светодиод) как выход
  24.   pinMode(1, OUTPUT);       // определяем вывод 6 (светодиод) как выход
  25.  
  26.  
  27.  
  28.  
  29.   oled.init();       // инициализация
  30.   oled.clear();      // очистка
  31.   oled.setScale(3);  // масштаб текста (1..4)
  32.   oled.setContrast(14);
  33.   delay(1000);
  34.  
  35.           oled.home();        // курсор в 0,0
  36.          oled.print("  OFF  ");
  37.  
  38.          oled.setCursor(0, 5);
  39.         oled.print(" MINUS");
  40.  
  41. }
  42.  
  43. // бесконечный цикл с периодом 2 мс
  44. void loop() {
  45.   adc();
  46.   button_click_KA();
  47.   blink_click_KA();
  48.   button_click_KA1();
  49.   blink_click_KA1();
  50.  
  51. }
  52.  
  53.  
  54. void button_click_KA() {
  55.   /* блок обработки сигнала кнопки
  56.  * при нажатой кнопке flagPress= true
  57.  * при отжатой кнопке flagPress= false
  58.  * при нажатии на кнопку flagClick= true */
  59.   timeDrebezg = 15;
  60.   if (flagPress == (!digitalRead(11))) {
  61.     // признак flagPress = текущему состоянию кнопки
  62.     // (инверсия т.к. активное состояние кнопки LOW)
  63.     // т.е. состояние кнопки осталось прежним
  64.     buttonCount = 0;  // сброс счетчика подтверждений состояния кнопки
  65.   } else {
  66.     // признак flagPress не = текущему состоянию кнопки
  67.     // состояние кнопки изменилось
  68.     buttonCount++;  // +1 к счетчику состояния кнопки
  69.  
  70.     if (buttonCount >= timeDrebezg) {
  71.       // состояние кнопки не мянялось в течение заданного времени
  72.       // состояние кнопки стало устойчивым
  73.       flagPress = !flagPress;  // инверсия признака состояния
  74.       buttonCount = 0;         // сброс счетчика подтверждений состояния кнопки
  75.  
  76.       if (flagPress == true) flagClick = true;  // признак фронта кнопки на нажатие
  77.     }
  78.   }
  79.   delay(2);  // задержка на 2 мс
  80. }
  81.  
  82.  
  83.  
  84.  
  85.  
  86. void button_click_KA1() {
  87.   /* блок обработки сигнала кнопки
  88.  * при нажатой кнопке flagPress1= true
  89.  * при отжатой кнопке flagPress1= false
  90.  * при нажатии на кнопку flagClick1= true */
  91.   timeDrebezg = 15;
  92.   if (flagPress1 == (!digitalRead(8))) {
  93.     // признак flagPress1 = текущему состоянию кнопки
  94.     // (инверсия т.к. активное состояние кнопки LOW)
  95.     // т.е. состояние кнопки осталось прежним
  96.     buttonCount1 = 0;  // сброс счетчика подтверждений состояния кнопки
  97.   } else {
  98.     // признак flagPress1 не = текущему состоянию кнопки
  99.     // состояние кнопки изменилось
  100.     buttonCount1++;  // +1 к счетчику состояния кнопки
  101.  
  102.     if (buttonCount1 >= timeDrebezg) {
  103.       // состояние кнопки не мянялось в течение заданного времени
  104.       // состояние кнопки стало устойчивым
  105.       flagPress1 = !flagPress1;  // инверсия признака состояния
  106.       buttonCount1 = 0;          // сброс счетчика подтверждений состояния кнопки
  107.  
  108.       if (flagPress1 == true) flagClick1 = true;  // признак фронта кнопки на нажатие
  109.     }
  110.   }
  111.   delay(2);  // задержка на 2 мс
  112. }
  113.  
  114.  
  115. void blink_click_KA(void) {
  116.   static uint8_t status=1;
  117.  
  118.   switch (status) {
  119.  
  120.     case 0:
  121.       if (flagClick == true) {
  122.         // было нажатие кнопки
  123.         flagClick = false;  // сброс признака фронта кнопки
  124.         digitalWrite(A0, LOW);  // вывод состояния светодиода
  125.         digitalWrite(A1, LOW);  // вывод состояния светодиода
  126.         digitalWrite(A2, LOW);  // вывод состояния светодиода
  127.         status = 1;
  128.      
  129.   oled.home();        // курсор в 0,0
  130.          oled.print("  OFF  ");
  131.  
  132.       }
  133.  
  134.       break;
  135.  
  136.  
  137.     case 1:
  138.       if (flagClick == true) {
  139.         // было нажатие кнопки
  140.         flagClick = false;  // сброс признака фронта кнопки
  141.         oled.home();        // курсор в 0,0
  142.         oled.print("POWER 1");
  143.         digitalWrite(A0, HIGH);  // вывод состояния светодиода
  144.         digitalWrite(A1, LOW);   // вывод состояния светодиода
  145.         digitalWrite(A2, LOW);   // вывод состояния светодиода
  146.         status = 2;
  147.       }
  148.       break;
  149.  
  150.  
  151.     case 2:
  152.       if (flagClick == true) {
  153.         // было нажатие кнопки
  154.         flagClick = false;  // сброс признака фронта кнопки
  155.         oled.home();        // курсор в 0,0
  156.         oled.print("POWER 2");
  157.         digitalWrite(A0, LOW);   // вывод состояния светодиода
  158.         digitalWrite(A1, HIGH);  // вывод состояния светодиода
  159.         digitalWrite(A2, LOW);   // вывод состояния светодиода
  160.         status = 3;
  161.       }
  162.       break;
  163.  
  164.     case 3:
  165.       if (flagClick == true) {
  166.         // было нажатие кнопки
  167.         flagClick = false;  // сброс признака фронта кнопки
  168.         oled.home();        // курсор в 0,0
  169.         oled.print("POWER 3");
  170.         digitalWrite(A0, LOW);   // вывод состояния светодиода
  171.         digitalWrite(A1, LOW);   // вывод состояния светодиода
  172.         digitalWrite(A2, HIGH);  // вывод состояния светодиода
  173.         status = 0;
  174.       }
  175.       break;
  176.  
  177.   }
  178. }
  179.  
  180. void blink_click_KA1(void) {
  181.   static uint8_t state = 0;
  182.  
  183.  
  184.   switch (state) {
  185.     case 0:
  186.       digitalWrite(9, LOW);
  187.       state = 1;
  188.       break;
  189.  
  190.     case 1:
  191.       if (flagClick1 == true) {
  192.         flagClick1 = false;
  193.         state = 2;
  194.       }
  195.       break;
  196.  
  197.     case 2:
  198.       digitalWrite(9, HIGH);
  199.       if (flagClick1 == true) {
  200.         flagClick1 = false;
  201.         state = 3;
  202.       }
  203.       break;
  204.  
  205.     case 3:
  206.       digitalWrite(9, (millis() / 500) % 2);
  207.       if (flagClick1 == true) {
  208.         flagClick1 = false;
  209.         state = 4;
  210.       }
  211.       break;
  212.  
  213.     case 4:
  214.       digitalWrite(9, (millis() / 167) % 2);
  215.       if (flagClick1 == true) {
  216.         flagClick1 = false;
  217.  
  218.         state = 5;
  219.       }
  220.       break;
  221.  
  222.     case 5:
  223.       digitalWrite(9, (millis() / 34) % 2);
  224.       if (flagClick1 == true) {
  225.         flagClick1 = false;
  226.         state = 6;
  227.       }
  228.       break;
  229.  
  230.     case 6:
  231.       digitalWrite(9, (millis() / 20) % 2);
  232.       if (flagClick1 == true) {
  233.         flagClick1 = false;
  234.         state = 7;
  235.       }
  236.       break;
  237.     case 7:
  238.       digitalWrite(9, (millis() / 8) % 2);
  239.       if (flagClick1 == true) {
  240.         flagClick1 = false;
  241.         state = 8;
  242.       }
  243.       break;
  244.     case 8:
  245.       digitalWrite(9, (millis() / 4) % 2);
  246.       if (flagClick1 == true) {
  247.         flagClick1 = false;
  248.         state = 0;
  249.       }
  250.       break;
  251.   }
  252. }
  253.  
  254.  
  255. // void blink_click_KA1(void) {
  256. //   static uint8_t mode = 1;
  257. //   switch (mode) {
  258. //     case 0:
  259. //     //  oled.setCursor(0, 5);
  260. //     //     oled.print("  000");  
  261. //       if (flagClick1 == true) {
  262. //         // было нажатие кнопки
  263. //         flagClick1 = false;  // сброс признака фронта кнопки
  264. //         // TCCR1B &= ~((1 << CS12) | (1 << CS11) | (1 << CS10));
  265. //         // TCCR1A &= ~(1 << COM1A1);
  266. //         // TCCR1A &= ~(1 << COM1A0);
  267. //         TCCR1A = 0;
  268. //         TCCR1B = 0;
  269. //         digitalWrite(9, LOW);  //выключаем все светодиоды
  270. //          oled.setCursor(0, 5);
  271. //         oled.print(" MINUS");        
  272. //         mode = 1;
  273. //       }
  274. //       break;
  275.  
  276. //     case 1:
  277.  
  278. //       if (flagClick1 == true) {
  279. //         TCCR1A = 0;
  280. //         TCCR1B = 0;
  281.  
  282. //         // было нажатие кнопки
  283. //         flagClick1 = false;  // сброс признака фронта кнопки
  284. //         digitalWrite(9, HIGH);
  285.  
  286. //         oled.setCursor(0, 5);
  287. //         oled.print("  PLUS ");
  288. //         mode = 2;
  289. //       }
  290. //       break;
  291.  
  292.  
  293. //     case 2:
  294. //       if (flagClick1 == true) {
  295. //         // было нажатие кнопки
  296. //         flagClick1 = false;  // сброс признака фронта кнопки
  297. //         //  digitalWrite(2, LOW);
  298. //         pinMode(9, OUTPUT);
  299. //          TCCR1A = 0b01000000;
  300. //           // TCCR1A = 0x40;
  301. //         // TCCR1B = 0b00001101;
  302. //         TCCR1B = 0xD;
  303. //         OCR1A = 7811;  //1
  304.  
  305. //         oled.setCursor(0, 5);
  306. //         oled.print("  1Hz ");
  307. //         mode = 3;
  308. //       }
  309.  
  310. //       break;
  311.  
  312.  
  313. //     case 3:
  314.    
  315. //       if (flagClick1 == true) {
  316. //         // было нажатие кнопки
  317. //         flagClick1 = false;  // сброс признака фронта кнопки
  318. //         // pinMode(9, OUTPUT);
  319. //         // digitalWrite(9, LOW);  
  320. //         // delay(10);
  321.    
  322. //         TCCR1A = 0x40;
  323. //         TCCR1B = 0xD;
  324. //         // delay(10);
  325. //         OCR1A = 2603;  //3
  326.  
  327. //         oled.setCursor(0, 5);
  328. //         oled.print("  3Hz ");
  329. //         mode = 4;
  330. //       }
  331. //       break;
  332.  
  333.  
  334. //     case 4:
  335. //       if (flagClick1 == true) {
  336. //         // было нажатие кнопки
  337. //         flagClick1 = false;  // сброс признака фронта кнопки
  338. //         // pinMode(9, OUTPUT);
  339. //         TCCR1A = 0;
  340. //         TCCR1B = 0;
  341. //         delay(10);
  342. //         TCCR1A = 0x40;
  343. //         TCCR1B = 0xD;
  344. //         OCR1A = 520;  //15
  345. //         oled.setCursor(0, 5);
  346. //         oled.print(" 15Hz ");
  347. //         mode = 5;
  348. //       }
  349. //       break;
  350.  
  351.  
  352. //     case 5:
  353. //       if (flagClick1 == true) {
  354. //         // было нажатие кнопки
  355. //         flagClick1 = false;  // сброс признака фронта кнопки
  356. //         pinMode(9, OUTPUT);
  357. //         TCCR1A = 0x40;
  358. //         TCCR1B = 0xD;
  359. //         OCR1A = 312;  //25
  360. //         oled.setCursor(0, 5);
  361. //         oled.print(" 25Hz ");
  362. //         mode = 6;
  363. //       }
  364. //       break;
  365. //     case 6:
  366. //       if (flagClick1 == true) {
  367. //         // было нажатие кнопки
  368. //         flagClick1 = false;  // сброс признака фронта кнопки
  369. //         pinMode(9, OUTPUT);
  370. //         TCCR1A = 0x40;
  371. //         TCCR1B = 0xD;
  372. //         OCR1A = 130;  //60
  373. //         oled.setCursor(0, 5);
  374. //         oled.print(" 60Hz ");
  375. //         mode = 7;
  376. //       }
  377. //       break;
  378.  
  379. //     case 7:
  380. //       if (flagClick1 == true) {
  381. //         // было нажатие кнопки
  382. //         flagClick1 = false;  // сброс признака фронта кнопки
  383. //         pinMode(9, OUTPUT);
  384. //         TCCR1A = 0x40;
  385. //         TCCR1B = 0xD;
  386. //         OCR1A = 62;  //125
  387. //         oled.setCursor(0, 5);
  388. //         oled.print(" 125Hz");
  389. //         mode = 0;
  390. //       }
  391. //       break;
  392.  
  393.    
  394.  
  395. //   }  // exit switch (mode)
  396. // }
  397. void adc() {
  398.   int analogPin = 3;
  399.   int val = 0;
  400.  
  401.  
  402.   val = analogRead(analogPin);  // считываем напряжение с аналогового входа
  403.                                 // наблюдаем считанное значение
  404.   if (val > 780) {
  405.     digitalWrite(0, HIGH);
  406.     digitalWrite(1, LOW);
  407.   }
  408.  
  409.   else {
  410.     digitalWrite(0, LOW);
  411.     digitalWrite(1, HIGH);
  412.   }
  413.   // delay(1000);
  414. }
  415.  
Advertisement
Add Comment
Please, Sign In to add comment