Нельзя переключаться между RTC и каким-либо событием
Какие-нибудь идеи, пожалуйста? Я застрял, и также не судите меня за то, как я написал код. Я новичок в программировании и все еще учусь. Итак, идея заключается в том, что я хочу отображать данные и часы на ЖК-дисплее, но когда лампа включена, я хочу, чтобы сообщение печаталось в течение 5 секунд, затем часы и дата будут напечатаны снова... и так далее. Данные с последовательного канала поступают из esp, которые запускают какое-либо событие по беспроводной сети.Arduino получает обратную связь о том, что работа выполнена, а затем выводит сообщение на ЖК-дисплей. Точнее.. Используя mqtt - из браузера, я нажимаю кнопку, чтобы включить лампу. Как только лампа включена, на esp приходит сообщение от брокера mqtt о том, что лампа включена. esp затем отправляет данные в arduino с помощью последовательного. и arduino должен отображать текст "Лампа включена".
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
LiquidCrystal_I2C lcd(0x3F,20,4);
DS3231 rtc (SDA, SCL);
int verificare_stare_releu = A13;
char a;
void setup(){
Serial.begin(115200);
rtc.begin();
lcd.init();
lcd.backlight();
pinMode(A13,INPUT);
}
void loop(){
int b = analogRead(verificare_stare_releu);
if(!Serial.available()){
display_clock();
}
if(!Serial.available()){
if(b >= 900){
lcd.print("Lamp ON ");
}
if( b < 900 ){
lcd.print("Lamp OFF");
}
}
if(Serial.available()>0){
a = Serial.read();
if(a == 102){
lcd.setCursor(0,0);
lcd.print("Lamp ON ");
}
if(a == 110){
lcd.setCursor(0,0);
lcd.print("Lamp OFF");
}
}
}
//a = digitalRead(verificare_stare_releu);
void display_clock (){
lcd.setCursor(0,0);
lcd.print("Ora: "+(String)rtc.getTimeStr());
lcd.setCursor(0,1);
lcd.print((String)rtc.getDOWStr()+(String) rtc.getDateStr());
}
@Iulian Chirvasa, 👍0
Обсуждение1 ответ
Хотя я все еще не понимаю, как объединить данные с последовательного порта с аналоговым входом, я могу показать, как отображать сообщение в течение 5 секунд, используя пример Мигания без задержки.
Логическая переменная "сообщение" используется для предотвращения использования обычного кода на дисплее в течение 5 секунд. Та же логическая переменная используется для проверки того, прошло ли 5 секунд (с использованием миллиса). По истечении 5 секунд логическая переменная устанавливается в значение "false", и это освобождает дисплей, чтобы его можно было использовать для обычных вещей.
Чтобы начать 5 секунд, необходимы эти две строки:
previousMillis = millis();
message = true;
Когда "сообщение" имеет значение true, переменная "previousMillis" должна быть допустимой. Как только "сообщение" становится ложным, значение "previousMillis" больше не используется.
Скетч может быть таким:
unsigned long previousMillis;
const unsigned long interval = 5000; // 5 секунд
bool message = false; // true, если отображается сообщение
void setup() {
// код для настройки здесь
}
void loop() {
if(!message) { // сообщение не отображается ?
// показать температуру, время и т.д.
}
if(Serial.available() > 0) {
int a = Serial.read();
switch(a) {
case 102:
lcd.setCursor(0,0);
lcd.print("Lamp ON ");
previousMillis = millis(); // remember this moment
message = true; // задать логическую переменную
break;
}
}
if(message) {
if(millis() - previousMillis >= interval) {
// прошло 5 секунд ?
message = false; // освободить дисплей
}
}
}
@jsotola Я попытался дать лучшее объяснение. Дайте мне знать, если мне нужно будет улучшить его еще больше., @Jot
теперь это кажется достаточно ясным ... комментарии в коде говорят сами за себя, @jsotola
- Как отобразить символ º на ЖК-дисплее?
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Как заставить ЖК-дисплей отображать китайские и японские иероглифы?
- Wemos: дисплей 16x2 ничего не показывает
- Запись значения на 7-сегментный дисплей max7219
- Адресация HD44780 DDRAM по второй линии
- Чтение текста с SD-карты возвращает странные символы
- Как подключить этот последовательный дисплей SPI к Arduino?
Взгляните на пример обнаружения изменений состояния: https://www.arduino.cc/en/Tutorial/StateChangeDetection Когда вы включаете лампу в переменную on/off и запоминаете lastLampState, то можете обнаружить изменение и вывести сообщение на дисплей на 5 секунд. Аналоговый вход можно использовать без pinMode, как вы можете видеть здесь: https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/ Можете ли вы описать, для чего используются данные из последовательного порта? Скетч тестируется три раза для ввода данных с последовательного порта, но вы должны протестировать его один раз. Попробуйте разделить разные вещи., @Jot
Данные из serial поступают из esp, который запускает какое-то событие wireless.Arduino получает обратную связь о том, что работа выполнена, а затем выводит сообщение на жидкокристаллический дисплей. Точнее.. Используя браузер mqtt - from, я нажимаю кнопку, чтобы включить лампу. Как только лампа горит, в esp поступает сообщение от брокера mqtt о том, что лампа сейчас включена. затем esp отправляет данные в arduino с помощью serial. и arduino должен отображать текст "Лампа включена"., @Iulian Chirvasa
Не могли бы вы добавить эту информацию к своему вопросу, пожалуйста. Пожалуйста, объясните также разницу между последовательными данными esp и данными аналогового вывода., @Jot
Не могу сказать, что я думал ясно, когда думал, что это можно сделать, но я хочу использовать обе платы. Arduino Mega потому что у него так много входов/выходов и какое-то беспроводное устройство. Поскольку у меня есть только Nodemcu, я использую это.Итак, что я хочу сделать, так это общаться между Raspberry(как mqtt broker), Esp (mqtt client) и arduino. Arduino будет иметь ЖК-дисплей и некоторые датчики. Я хотел бы отобразить на нем данные: час, температуру,влажность,давление. Но кроме того, я хочу отобразить некоторые события, которые я активирую с веб-стороны. Как я уже сказал ... если я включу лампу, esp будет взаимодействовать с arduino с помощью serial., @Iulian Chirvasa
если лампа горит,то на ЖК-дисплее появится какое-то сообщение,сообщающее об этом в течение 5 секунд. затем переключитесь на свайп между rtc, давлением, dht и т.д., @Iulian Chirvasa
я также использую приложение blynk, где кнопка настроена для ссылки на вывод nr от esp, который контролирует состояние лампы(вкл/выкл). Поэтому, когда я использую приложение и нажимаю кнопку, чтобы включить лампу, я использую другой контакт(в моем случае это аналоговый контакт A13), чтобы увидеть, включено или выключено реле, и поэтому Arduino будет знать, использовал ли я приложение на телефоне, чтобы включить лампу, и будет отображение сообщения, соответствующего состоянию., @Iulian Chirvasa