Не выводит данные MH-Z19C на LCD 1602 I2C(Ардуино нано)

26 Окт 2023
7
0
Оформи код соответствующим тэгом, см. Правила
Здраствуйте.
Никак не могу понять в чем проблема. Хочу вывести данные с датчика CO2 на дисплей, все скетчи которые только мог найти перепробовал, но всё равно не показывает значения экран лишь мигает и показывает белые квадраты.
В данный момент код(не мой) выглядит следующим образом.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
SoftwareSerial mhzSerial(10, 11); // Пины для соединения с датчиком MHZ19C

void setup() {
lcd.begin(16, 2);
lcd.backlight();
mhzSerial.begin(9600);
}

void loop() {
if (mhzSerial.available()) {
int response = mhzSerial.read();
if (response == 0xFF) {
int high = mhzSerial.read();
int low = mhzSerial.read();
int ppm = (high * 256) + low;

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CO2:");
lcd.setCursor(6, 0);
lcd.print(ppm);
lcd.setCursor(12, 0);
lcd.print("ppm");
}
}

delay(1000);
}
 
Изменено:

viktor1703

★★★✩✩✩✩
9 Дек 2021
612
146
А сего вы взяли, что они выполняются всегда? Ладно, первое условие, допустим, выполняется, дальше второе условие
C++:
int response = mhzSerial.read();
if (response == 0xFF) {
int high = mhzSerial.read();
int low = mhzSerial.read();
int ppm = (high * 256) + low;
Масло масленое, если значение прочитанное из порта равно 255, тогда читаешь порт еще 2 раза что-то, пересчитывается и потом вывод на дисплей. А если response не равно 0xFF, то ничего и не выполняется.
 
26 Окт 2023
7
0
Оформи код соответствующим тэгом, см. Правила
@Дромеозаврид обыкновенный, есть кстати ещё один код. Сегодня вечером его уже позаимствовал. Но он был от нейросети, пришлось немного отредактировать.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
SoftwareSerial mySerial(8,9);

void setup() {
mySerial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
}

void loop() {
byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
byte response[9];
byte crc = 0;

mySerial.write(cmd, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);

for (byte i = 1; i < 8; i++) {
crc += response;
}

crc = 255 - crc;
crc++;

lcd.clear();

if (!(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc)) {
lcd.print("Sensor CRC error");
} else {
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
unsigned int ppm = (256 * responseHigh) + responseLow;

lcd.print("CO2: ");
lcd.print(ppm);
lcd.print(" ppm");

if (ppm < 1000) {
lcd.setCursor(0,1);
lcd.print("Good air quality");
} else if (ppm >= 1000 && ppm < 2000) {
lcd.setCursor(0,1);
lcd.print("Moderate air quality");
} else {
lcd.setCursor(0,1);
lcd.print("Poor air quality");
}
}

delay(10000);
}

Завтра его попробую
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
612
146
Первый код тоже от нейросети? Второй скетч не смотрел, во-первых, он не читаемый, во-вторых, нейросети известно, что она там насочиняла и вам, чот там отредактировано. Я тут "от нечего делать" заглянул сюда и со всей ответственностью заявляю, что работать ничего и не должно, так как не используется библиотека для работы с датчиком.
 
Изменено:

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
Но он был от нейросети, пришлось немного отредактировать.
Может, лучше засесть за учебник, чем полагаться на нейросеть? Ну это же бред собачий, заказывать нейросети что-то там сгенерить, а потом просить людей на форуме исправить ошибки. Если самому не уметь писать код и в нём не разбираться, никакая нейросеть не поможет.
 
26 Окт 2023
7
0
@PiratFox, ваша правда. Поэтому я пытался
отредактировать её. И пытаюсь разобраться. Чтобы в будущем таких проблем не возникало.
Какие книги порекомендуете для подобных задач, связанных с парсингом данных?
 
26 Окт 2023
7
0

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
насколько я помню там С язык упрощёный немного
Ничего подобного, в среде ардуино иде вполне себе С++. Рекомендую учебники Кернигана и Риччи. Ну и Бьярна Страуструпа, куда же без него. Без знания языка о каком парсинге может идти речь?
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
612
146

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,410
976
58
Марий-Эл
Сколько читаю подобных "криков души".
То, что пытается разобраться - это хорошо.
Но начал не с того. И многие ардуинщики наступают на эти грабли каждый день.
Сначала нужно изучить алгоритмизациию и основы логики, а потом уже изучать языки.
Без основ любой язык бесполезен.
Правда сейчас не модно учиться.
Сейчас модно взять ардуину и возомнить себя программистом.
Я просмотрел кучу платных и бесплатных курсов. Везде учат программировать, но нигде не учат основам алгоритмов.

Понял вас. Спасибо огромное за помощь.
А то, что человек понял, очень похвально. Может что то и получится, если мы поможем.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
Сначала нужно изучить алгоритмизациию и основы логики, а потом уже изучать языки.
Эк ты хватил-то. :) В теории оно-то так, но практика показывает, что начав изучать язык, человек всё равно к этому придёт. Тем более, что нормальные учебники начинаются как раз с этого: с алгоритмов и логики.;)