Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GyverOLED.h>
- GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
- // переменные и константы для обработки сигнала кнопки
- 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(A0, OUTPUT); // определяем вывод 5(светодиод) как выход
- pinMode(A1, OUTPUT); // определяем вывод 6 (светодиод) как выход
- pinMode(A2, OUTPUT); // определяем вывод 12 (светодиод) как выход
- pinMode(9, OUTPUT); // определяем вывод 8 (светодиод) как выход
- pinMode(11, INPUT_PULLUP); // определяем вывод 4 (кнопка) как вход
- pinMode(8, INPUT_PULLUP); // определяем вывод 3 (кнопка) как вход
- pinMode(0, OUTPUT); // определяем вывод 5(светодиод) как выход
- pinMode(1, OUTPUT); // определяем вывод 6 (светодиод) как выход
- oled.init(); // инициализация
- oled.clear(); // очистка
- oled.setScale(3); // масштаб текста (1..4)
- oled.setContrast(14);
- delay(1000);
- oled.home(); // курсор в 0,0
- oled.print(" OFF ");
- oled.setCursor(0, 5);
- oled.print(" MINUS");
- }
- // бесконечный цикл с периодом 2 мс
- void loop() {
- adc();
- button_click_KA();
- blink_click_KA();
- button_click_KA1();
- blink_click_KA1();
- }
- void button_click_KA() {
- /* блок обработки сигнала кнопки
- * при нажатой кнопке flagPress= true
- * при отжатой кнопке flagPress= false
- * при нажатии на кнопку flagClick= true */
- timeDrebezg = 15;
- if (flagPress == (!digitalRead(11))) {
- // признак flagPress = текущему состоянию кнопки
- // (инверсия т.к. активное состояние кнопки LOW)
- // т.е. состояние кнопки осталось прежним
- buttonCount = 0; // сброс счетчика подтверждений состояния кнопки
- } else {
- // признак flagPress не = текущему состоянию кнопки
- // состояние кнопки изменилось
- buttonCount++; // +1 к счетчику состояния кнопки
- if (buttonCount >= timeDrebezg) {
- // состояние кнопки не мянялось в течение заданного времени
- // состояние кнопки стало устойчивым
- flagPress = !flagPress; // инверсия признака состояния
- buttonCount = 0; // сброс счетчика подтверждений состояния кнопки
- if (flagPress == true) flagClick = true; // признак фронта кнопки на нажатие
- }
- }
- delay(2); // задержка на 2 мс
- }
- void button_click_KA1() {
- /* блок обработки сигнала кнопки
- * при нажатой кнопке flagPress1= true
- * при отжатой кнопке flagPress1= false
- * при нажатии на кнопку flagClick1= true */
- timeDrebezg = 15;
- if (flagPress1 == (!digitalRead(8))) {
- // признак 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_KA(void) {
- static uint8_t status=1;
- switch (status) {
- case 0:
- if (flagClick == true) {
- // было нажатие кнопки
- flagClick = false; // сброс признака фронта кнопки
- digitalWrite(A0, LOW); // вывод состояния светодиода
- digitalWrite(A1, LOW); // вывод состояния светодиода
- digitalWrite(A2, LOW); // вывод состояния светодиода
- status = 1;
- oled.home(); // курсор в 0,0
- oled.print(" OFF ");
- }
- break;
- case 1:
- if (flagClick == true) {
- // было нажатие кнопки
- flagClick = false; // сброс признака фронта кнопки
- oled.home(); // курсор в 0,0
- oled.print("POWER 1");
- digitalWrite(A0, HIGH); // вывод состояния светодиода
- digitalWrite(A1, LOW); // вывод состояния светодиода
- digitalWrite(A2, LOW); // вывод состояния светодиода
- status = 2;
- }
- break;
- case 2:
- if (flagClick == true) {
- // было нажатие кнопки
- flagClick = false; // сброс признака фронта кнопки
- oled.home(); // курсор в 0,0
- oled.print("POWER 2");
- digitalWrite(A0, LOW); // вывод состояния светодиода
- digitalWrite(A1, HIGH); // вывод состояния светодиода
- digitalWrite(A2, LOW); // вывод состояния светодиода
- status = 3;
- }
- break;
- case 3:
- if (flagClick == true) {
- // было нажатие кнопки
- flagClick = false; // сброс признака фронта кнопки
- oled.home(); // курсор в 0,0
- oled.print("POWER 3");
- digitalWrite(A0, LOW); // вывод состояния светодиода
- digitalWrite(A1, LOW); // вывод состояния светодиода
- digitalWrite(A2, HIGH); // вывод состояния светодиода
- status = 0;
- }
- break;
- }
- }
- void blink_click_KA1(void) {
- static uint8_t state = 0;
- switch (state) {
- case 0:
- digitalWrite(9, LOW);
- state = 1;
- break;
- case 1:
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 2;
- }
- break;
- case 2:
- digitalWrite(9, HIGH);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 3;
- }
- break;
- case 3:
- digitalWrite(9, (millis() / 500) % 2);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 4;
- }
- break;
- case 4:
- digitalWrite(9, (millis() / 167) % 2);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 5;
- }
- break;
- case 5:
- digitalWrite(9, (millis() / 34) % 2);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 6;
- }
- break;
- case 6:
- digitalWrite(9, (millis() / 20) % 2);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 7;
- }
- break;
- case 7:
- digitalWrite(9, (millis() / 8) % 2);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 8;
- }
- break;
- case 8:
- digitalWrite(9, (millis() / 4) % 2);
- if (flagClick1 == true) {
- flagClick1 = false;
- state = 0;
- }
- break;
- }
- }
- // void blink_click_KA1(void) {
- // static uint8_t mode = 1;
- // switch (mode) {
- // case 0:
- // // oled.setCursor(0, 5);
- // // oled.print(" 000");
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // // TCCR1B &= ~((1 << CS12) | (1 << CS11) | (1 << CS10));
- // // TCCR1A &= ~(1 << COM1A1);
- // // TCCR1A &= ~(1 << COM1A0);
- // TCCR1A = 0;
- // TCCR1B = 0;
- // digitalWrite(9, LOW); //выключаем все светодиоды
- // oled.setCursor(0, 5);
- // oled.print(" MINUS");
- // mode = 1;
- // }
- // break;
- // case 1:
- // if (flagClick1 == true) {
- // TCCR1A = 0;
- // TCCR1B = 0;
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // digitalWrite(9, HIGH);
- // oled.setCursor(0, 5);
- // oled.print(" PLUS ");
- // mode = 2;
- // }
- // break;
- // case 2:
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // // digitalWrite(2, LOW);
- // pinMode(9, OUTPUT);
- // TCCR1A = 0b01000000;
- // // TCCR1A = 0x40;
- // // TCCR1B = 0b00001101;
- // TCCR1B = 0xD;
- // OCR1A = 7811; //1
- // oled.setCursor(0, 5);
- // oled.print(" 1Hz ");
- // mode = 3;
- // }
- // break;
- // case 3:
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // // pinMode(9, OUTPUT);
- // // digitalWrite(9, LOW);
- // // delay(10);
- // TCCR1A = 0x40;
- // TCCR1B = 0xD;
- // // delay(10);
- // OCR1A = 2603; //3
- // oled.setCursor(0, 5);
- // oled.print(" 3Hz ");
- // mode = 4;
- // }
- // break;
- // case 4:
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // // pinMode(9, OUTPUT);
- // TCCR1A = 0;
- // TCCR1B = 0;
- // delay(10);
- // TCCR1A = 0x40;
- // TCCR1B = 0xD;
- // OCR1A = 520; //15
- // oled.setCursor(0, 5);
- // oled.print(" 15Hz ");
- // mode = 5;
- // }
- // break;
- // case 5:
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // pinMode(9, OUTPUT);
- // TCCR1A = 0x40;
- // TCCR1B = 0xD;
- // OCR1A = 312; //25
- // oled.setCursor(0, 5);
- // oled.print(" 25Hz ");
- // mode = 6;
- // }
- // break;
- // case 6:
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // pinMode(9, OUTPUT);
- // TCCR1A = 0x40;
- // TCCR1B = 0xD;
- // OCR1A = 130; //60
- // oled.setCursor(0, 5);
- // oled.print(" 60Hz ");
- // mode = 7;
- // }
- // break;
- // case 7:
- // if (flagClick1 == true) {
- // // было нажатие кнопки
- // flagClick1 = false; // сброс признака фронта кнопки
- // pinMode(9, OUTPUT);
- // TCCR1A = 0x40;
- // TCCR1B = 0xD;
- // OCR1A = 62; //125
- // oled.setCursor(0, 5);
- // oled.print(" 125Hz");
- // mode = 0;
- // }
- // break;
- // } // exit switch (mode)
- // }
- void adc() {
- int analogPin = 3;
- int val = 0;
- val = analogRead(analogPin); // считываем напряжение с аналогового входа
- // наблюдаем считанное значение
- if (val > 780) {
- digitalWrite(0, HIGH);
- digitalWrite(1, LOW);
- }
- else {
- digitalWrite(0, LOW);
- digitalWrite(1, HIGH);
- }
- // delay(1000);
- }
Advertisement
Add Comment
Please, Sign In to add comment