Два устройства по UART. Nextion и mh-z19
- Войдите на сайт для отправки комментариев
Вс, 03/09/2017 - 06:26
Доброго времени суток! Возникла следующая проблема. Не хотят вместе работать дисплей nextion и датчик CO2 mh-z19.
Суть примерно следующее. Устройство ждет команды от дисплея, и раз в минуту подключается к датчику.
Но проблема в том что по отдельности все работает. А вместе, датчик вроде что то получает. Ардуина отправляет команды дисплею, но при этом почему то не получает команды от дисплея.
Есть подозрение, что они где то мешают друг другу, уже всю голову сломал. помогите пожалуйста(
// include library #include <SoftwareSerial.h> #include <Nextion.h> #include <Wire.h> #include <iarduino_RTC.h> #include <EEPROM.h> // init ds1307 iarduino_RTC RTC1(RTC_DS1307); // init Nextion SoftwareSerial nextion(2, 3); // TX - 2, RX - 3 Nextion myNextion(nextion, 9600); SoftwareSerial mySerial(A0, A1); // A0 - TX, A1 - RX byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char response[9]; // init var time int curHour = 0; int curMin = 0; String curTimeStr = "0"; String curHourStr = "0"; String curMinStr = "0"; int ppm = 0; void setup() { Serial.begin(9600); mySerial.begin(9600); myNextion.init(); RTC1.begin(); RTC1.period(1); RTC1.gettime(); curHour = RTC1.Hours; curMin = RTC1.minutes; SetVarCurrentTimeStr(); CheckPpm(); GoHome(); } void loop() { RTC1.gettime(); SetVarCurrentTimeStr(); if (curHour != RTC1.Hours) { curHour = RTC1.Hours; myNextion.setComponentText("t3", String(curHourStr)); } if (curMin != RTC1.minutes) { curMin = RTC1.minutes; myNextion.setComponentText("t4", String(curMinStr)); CheckPpm(); } String message = myNextion.listen(); // check for message // SetTimeButtonMenu if (message == "65 3 2 0 ffff ffff ffff") { }; if (message != "") { // if a message is received... Serial.println(message); //...print it out }; } void GoHome() { myNextion.sendCommand("page 1"); myNextion.setComponentText("t0", String(ppm)); myNextion.setComponentText("t3", String(curHourStr)); myNextion.setComponentText("t4", String(curMinStr)); } void SetVarCurrentTimeStr() { curTimeStr = RTC1.gettime("H:i"); curHourStr = (curTimeStr).substring(0, 2); curMinStr = (curTimeStr).substring(3, 5); }; void CheckPpm() { mySerial.write(cmd, 9); memset(response, 0, 9); mySerial.readBytes(response, 9); int i; byte crc = 0; for (i = 1; i < 8; i++) crc+=response[i]; crc = 255 - crc; crc++; if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) { Serial.println("CRC error: " + String(crc) + " / "+ String(response[8])); } else { unsigned int responseHigh = (unsigned int) response[2]; unsigned int responseLow = (unsigned int) response[3]; unsigned ppm = (256*responseHigh) + responseLow; myNextion.setComponentText("t0", String(ppm)); } }
Посмотрите пример здесь Two Port Receive .Если я правильно понял, библиотека SoftwareSerial умеет слушать только один порт. Если используется несколько портов, надо задавать, который слушаем в данный момент.
Подскажите плиз, решили данную проблему?
Если можно пример кода.