MH-Z19B и невозможность совместной работы с LCD. Ардуино UNO

Paladian
Offline
Зарегистрирован: 23.10.2019

Здравствуйте, помогите решить проблему: хочу выводить на 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);
  
}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Операторы из 44 и 45 строк надо перенести и вставить за строкой 38.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ты используешь аппаратный UART и к этим же пинам подключает дисплей.
Подумай, что ты делаешь не так

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В строке №4

LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

подчёркнутое точно правильно? Соединено именно так? Как Вы их туда запихали, фото можно?

Paladian
Offline
Зарегистрирован: 23.10.2019

Евгений, да запихать туда не проблема, там обычные разъемы, только очевидно это и было ошибкой.
Переставил на 7,6 и заработало. Спасибо
То есть SoftwareSerial.h , резервирует 0 и 1 порт даже если указаны иные?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

аппаратный UART на них завязан жестко и Serial.begin их превращает в Rx Tx

если отказаться от вывода на комп - будет работать и с 0 1

но по любому вывод на дисплей надо делать только при совпадении CRC

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

 порты 0 и 1 это аппаратный сериал

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Paladian пишет:

То есть SoftwareSerial.h , резервирует 0 и 1 порт даже если указаны иные?

Нет, аппаратный сериал занимает 0 и 1. У Вас же на них датчик подключён, разве нет? Потому я и спросил как впихнули.

Paladian
Offline
Зарегистрирован: 23.10.2019
 
SoftwareSerial mySerial(9, 8);
8 и 9
Paladian
Offline
Зарегистрирован: 23.10.2019

Всем спасибо, помогло, тему закрывать можно