Помогите, пожалуйста! Не могу подключить кнопку для управления экраном!
- Войдите на сайт для отправки комментариев
Вс, 22/07/2018 - 23:17
Добгого времени суток! Я в ардуино относительно новичок, но какие-то понятия о программировании имею. Помогите, пожалуйста, мне! Я пытаюсь сделать так, чтобы можно было переключать старницы с информацией на дисплее 1602 нажатием кнопки. Пока я смог сделать только так, чтобы при удерживании кнопки открывалась вторая страница, а при отпускании закрывалась, но а если страниц много, то такое не прокатит, хочется, чтобы при единоразовом нажатии открывалась другая страница, и чтобы её закрыть, надо было бы нажать ещё раз.
Вот скетч с тем, что смог сделать:
#include <TimeLib.h> #include <Wire.h> // библиотека для протокола IIC #include <LiquidCrystal_I2C.h> // подключаем библиотеку LCD IIC LiquidCrystal_I2C lcd(0x27,20,2); // присваиваем имя lcd для дисплея #include <DHT.h> // подключаем библиотеку для DHT11 DHT dht(2, DHT11); // к какому порту подключаем датчик const int BUTTON=4; // создаем символ градуса и присваиваем имя "gradus" byte gradus[8] = { 0b01100,0b10010,0b10010,0b01100,0b00000,0b00000,0b00000,0b00000 }; // создаем русскую букву "П" byte P[8] = { 0b11111,0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000 }; // создаем русскую букву "У" byte Y[8] = { 0b10001,0b10001,0b10001,0b01111,0b00001,0b00001,0b01110,0b00000 }; // создаем русскую букву "Л" byte L[8] = { 0b00111,0b01001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000 }; // создаем русскую букву "Ж" byte ZH[8] = { 0b10101,0b10101,0b10101,0b01110,0b10101,0b10101,0b10101,0b00000 }; // создаем русскую букву "Ь" byte znak[8] = { 0b10000,0b10000,0b10000,0b11110,0b10001,0b10001,0b11110,0b00000 }; byte YA[8] = { 0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000 }; void setup() { pinMode (BUTTON, INPUT); Serial.begin(9600); // запуск последовательного порта lcd.init(); // инициализация LCD дисплея lcd.backlight(); // включение подсветки дисплея lcd.createChar(1, gradus); lcd.createChar(2, P); lcd.createChar(3, Y); lcd.createChar(4, L); lcd.createChar(5, ZH); lcd.createChar(6, znak); lcd.createChar(7, YA); setTime (15, 54, 0, 7, 21, 2018); } void loop() { if(digitalRead(BUTTON) == HIGH) { // если нужны точные значение, то используйте float, вместо byte byte h = dht.readHumidity(); // считываем значение температуры byte t = dht.readTemperature(); // считываем значение влажности Serial.print("Temperature: "); Serial.println(t); // отправляем значение температуры на монитор Serial.print("Humidity: "); Serial.println(h); // отправляем значение температуры на монитор Serial.println(" "); // пустая строка lcd.setCursor(0,0); // ставим курсор на 1 символ первой строки lcd.print("TEM"); // используем латинские буквы lcd.print(char(2)); // выводим русскую букву "П" lcd.print("EPAT"); // используем латинские буквы lcd.print(char(3)); // выводим русскую букву "У" lcd.print("PA: "); // используем латинские буквы lcd.print(t); // выводим значение температуры на LCD lcd.print(char(1)); // выводим знак градуса lcd.setCursor(0,1); // анологично lcd.print("B"); lcd.print(char(4)); lcd.print("A"); lcd.print(char(5)); lcd.print("HOCT"); lcd.print(char(6)); lcd.print(": "); lcd.print(h); lcd.print("%"); delay(1000); } else { lcd.clear(); lcd.print("BPEM"); lcd.print(char(7)); lcd.setCursor(0, 1); lcd.print( hour() ); lcd.print( ":" ); lcd.print( minute() ); delay(1000); } }
Заранее огромное спасибо!
Лучше заведите переменную типа byte - она будет отвечать за выбранную страницу
И по каждому нажатию на кнопку -инкрементируйте ее(увеличивайте на 1)
К примеру
А Вы не могли бы, пожалуйста, чуть более конкретный пример показать. Так, в целом понятно, но не всё...
Подождите тогда
Хорошо, спасбо большое!
Пробуйте, каждый case - отдельная страница.
Да не забудьте про защиту от дребезга контактов кнопки. В этом коде я ее не делал. Поищите по гуглу, об этом информации хватает
Спасибо большое, про дребезг знаю, вы мне очень помогли!
VanyaDrug, по логике программы Вам нужно реагировать на факт изменения состояния кнопки, а в коде Вы реагируете на само состояние.
BuonanotteMash, а что будет делать Ваш код при длительном нажатии?
Простите за наглость, но я не понимаю, я нуб, куда мне деть мой оставшийся код? Как дать понять ардуино, что температура и влажность - первая страница, а время - вторая?
Простите за наглость, но я не понимаю, я нуб, куда мне деть мой оставшийся код? Как дать понять ардуино, что температура и влажность - первая страница, а время - вторая?
ну чеж так тупить-то... Или код на первой странице на самом деле не ваш, а целиком стянут где-то в инете?
Вот в том "вашем" коде есть часть, которая показывается при нажатой кнопке - ее ставим в первый кейс. А ветку else - во второй.