MH-Z19B и невозможность совместной работы с LCD. Ардуино UNO
- Войдите на сайт для отправки комментариев
Ср, 23/10/2019 - 01:59
Здравствуйте, помогите решить проблему: хочу выводить на LCD экран данные об уровне СО. Итак схема собрана, код написан(хотя скорее взято чьё то готовое решение и туда добавлен мною LCD). Данные на компьютер об уровне СО идут и нормально отображаются. Но на дисплее LCD появляются только разные рандомные символы, периодически обновляемые. Уже два дня бьюсь ищу решение. Сам дисплей точно правильно подключён, так как при загрузки тестовой программы все выводит отлично. В чем может быть проблема? Платформа ардуино уно.
#include <SoftwareSerial.h> #include <LiquidCrystal.h> //добавляем необходимую библиотеку LiquidCrystal lcd(0, 1, 2, 3, 4, 5); // (RS, E, DB4, DB5, DB6, DB7) SoftwareSerial mySerial(9, 8); byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char response[9]; int x; void setup() { Serial.begin(9600); mySerial.begin(9600); lcd.begin(16, 2); } void loop() { 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 int ppm = (256*responseHigh) + responseLow; Serial.println(ppm); x=ppm; } lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print(x); // Выводим текст delay(3000); }
Операторы из 44 и 45 строк надо перенести и вставить за строкой 38.
Ты используешь аппаратный UART и к этим же пинам подключает дисплей.
Подумай, что ты делаешь не так
В строке №4
LiquidCrystal lcd(0, 1, 2, 3, 4, 5);
подчёркнутое точно правильно? Соединено именно так? Как Вы их туда запихали, фото можно?
Евгений, да запихать туда не проблема, там обычные разъемы, только очевидно это и было ошибкой.
Переставил на 7,6 и заработало. Спасибо
То есть SoftwareSerial.h , резервирует 0 и 1 порт даже если указаны иные?
аппаратный UART на них завязан жестко и
Serial
.begin их превращает в Rx Tx
если отказаться от вывода на комп - будет работать и с 0 1
но по любому вывод на дисплей надо делать только при совпадении CRC
порты 0 и 1 это аппаратный сериал
То есть SoftwareSerial.h , резервирует 0 и 1 порт даже если указаны иные?
Нет, аппаратный сериал занимает 0 и 1. У Вас же на них датчик подключён, разве нет? Потому я и спросил как впихнули.
8 и 9
Всем спасибо, помогло, тему закрывать можно