Не выводится текст на дисплей 16х2 в цикле луп ()
- Войдите на сайт для отправки комментариев
Ср, 29/04/2020 - 14:17
Здравствуйте написал код.Який выводит температуру и состояние дверей на екран.Колы я включаю ардуион то запрограммировано в void setup () выводится на экран а вот void loop() ни.Поможить решить эту проблему спасибо).(Доброго дня написав код.Який виводить температуру і стан дверей на екран.Коли я включаю ардуіон те що запрограмовано в воїд ступ() виводиться на екран а от воїд луп() ні.Поможіть вирішити проблему дякую)
#include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #define BLYNK_PRINT Serial #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей char auth[] = "cvqv1m6B1BQVRple1Vx-TO4ZnuCvd1hM"; //ID blynk /* WiFi credentials */ const char* ssid2 = "InetHome 35"; //Имя точки доступа WIFI const char* password2 = "123321123321"; //пароль точки доступа WIFI char ssid[] = "InetHome 35"; //підключення до wifi char pass[] = "123321123321"; /* TIMER */ SimpleTimer timer; /* DS18B20 Temperature Sensor */ #include <OneWire.h> #include<DallasTemperature.h> #define ONE_WIRE_BUS 2 // DS18B20 подключаем на D4 на плате OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); int temp_0; int temp_1; const int girc = 13; //гірконг пін(d7) const int girc_2 = 12; //гірконг пін(d6) int gircstate = 0; // статус гірконгу int gircstate_2 = 0; // статус гірконгу int maxtemp = 26 ; //Максимальна температура; int mintemp = 20; //мінімальна температура; int buzer = 14; //Підключення бузера(D5) int val = 0; int val_3 = 0; void setup() { lcd.begin(); lcd.setCursor(5, 0); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("I start"); lcd.setCursor(3, 1); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("09821"); // Выводим текст , начиная с установленной позиции курсора pinMode(buzer, OUTPUT); //Ініцилізація бузера pinMode(girc, INPUT); //Ініцалізація гірконгу pinMode(girc_2, INPUT); //Ініцалізація гірконгу Serial.begin(115200); Blynk.begin(auth, ssid, pass); //Підключення до wifi DS18B20.begin(); timer.setInterval(5000L, getSendData); Serial.println(" "); Serial.println("Testing Dual Sensor data"); Blynk.notify("Пристрій запустився"); //Пристрій запустився (push) Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Пристрій запустився"); lcd.backlight(); // Включаем подсветку LCD дисплея lcd.setCursor(5, 0); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("I work!"); // Выводим текст "LCD", начиная с установленной позиции курсора delay(2000); lcd.clear(); // Чистим дисплей (надпись безвозвратно исчезнет с дисплея) } void loop() { lcd.begin(); lcdinfo(); gircstate = digitalRead(girc); //Зчитування статусу гірконга gircstate_2 = digitalRead(girc_2); //Зчитування статусу гірконга //----------------------Двері1---------------------- if (digitalRead(girc) == 1) //Якщо двері відкриті ... { val++;// прибавляем к переменной 1 при каждой смене цикла. delay(5000);//Час на скільки відкриті двері } else { val = 0; lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("Door close"); // Выводим текст , начиная с установленной позиции курсора } if (val >= 5) //Якщо двері відкриті більше ніж на вказаний час { digitalWrite(10, !digitalRead(10)); //инвертируем состояние пина val = 0; Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Двері 2 відкриті"); Blynk.notify("Двері 1 відкриті"); digitalWrite(buzer, HIGH); } //----------------------Двері1---------------------- //----------------------Двері2---------------------- if (digitalRead(girc_2) == 1) //Якщо двері відкриті ... { val_3++;// прибавляем к переменной 1 при каждой смене цикла. delay(5000);//Час на скільки відкриті двері } else { val_3 = 0; lcd.setCursor(11, 1); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("close"); // Выводим текст , начиная с установленной позиции курсора } if (val_3 >= 5) //Якщо двері відкриті більше ніж на вказаний час { digitalWrite(10, !digitalRead(10)); //инвертируем состояние пина val_3 = 0; Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Двері 2 відкриті"); Blynk.notify("Двері 2 відкриті"); digitalWrite(buzer, HIGH); } //----------------------Двері2---------------------- if (temp_1 == -127) { //Помилка датчика температури холодильник 1 Blynk.notify("Помилка датчика температури Холодильник 1"); Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Помилка датчика температури Холодильник 1"); buz(); } if (temp_0 == -127) { //Помилка датчика температури холодильник 2 Blynk.notify("Помилка датчика температури Холодильник 2"); Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Помилка датчика температури Холодильник 2"); buz(); } if (temp_1 > maxtemp) { //Якщо температура більша за вказану Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура більша максимальної холодильник 1"); Blynk.notify("Температура більша максимальної (холодильник 1)"); buz(); } if (temp_0 > maxtemp) { //Якщо температура більша за вказану Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура більша максимальної холодильник 2"); Blynk.notify("Температура більша максимальної (холодильник 2)"); buz(); } if (temp_0 < mintemp) //Якщо температура менша за вказану { Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура менша мінімальної (холодильник 2)"); Blynk.notify("Температура менша мінімальної (холодильник 2)"); buz(); } if (temp_1 < mintemp) //Якщо температура менша за вказану { Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура менша мінімальної (холодильник 1)"); Blynk.notify("Температура менша мінімальної (холодильник 1)"); buz(); } } /*************************************************** Send Sensor data to Blynk **************************************************/ void yield() { Blynk.run(); } void lcdinfo() { getSendData(); lcd.begin(); int val_2 = 0; lcd.setCursor(0, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print("Temp:"); // Выводим показания температуры lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(temp_1); // Выводим показания температуры lcd.setCursor(8, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print("C"); // Выводим показания температуры lcd.setCursor(12, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(temp_0); // Выводим показания температуры lcd.setCursor(14, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print("C"); // Выводим показания температуры if (temp_1 == -127 or temp_0 == -127) { //Якщо помилка датчика температури то почистити екран lcd.clear(); } //----------------------Двері1---------------------- if (digitalRead(girc) == 1) //Якщо двері відкриті ... { lcd.setCursor(0, 1); lcd.print("Door open!"); //Вивести двері відкриті } else { //По іншому lcd.setCursor(0, 1); lcd.print("Door close"); //Вивести двері закриті } //----------------------Двері1---------------------- //----------------------Двері2---------------------- if (digitalRead(girc_2) == 1) //Якщо двері відкриті ... { lcd.setCursor(11, 1); lcd.print("open!"); //Вивести двері відкриті } else { //По іншому lcd.setCursor(11, 1); lcd.print("close"); //Вивести двері закриті } //----------------------Двері2---------------------- if (temp_1 < -10 and temp_1 < 10 or temp_0 < -10 and temp_0 < 10) { val_2++; } if (val_2 == 1) { lcd.clear(); } else { val_2 = 0; } if(temp_1 < maxtemp and temp_1 != -127 and temp_1 > mintemp and temp_0 < maxtemp and temp_0 != -127 and temp_0 > mintemp) //Якщо все нормально виключити бузер { buz(); digitalWrite(buzer, LOW); } } void buz() //Функція бузера { if (temp_1 > maxtemp or temp_1 == -127 or temp_1 < mintemp or temp_0 > maxtemp or temp_0 == -127 or temp_0 < mintemp) { //Якщо темпреатура більша або менша або помилка датчика включити бузер digitalWrite(buzer, LOW); delay(100); digitalWrite(buzer, HIGH); delay(5000); } else if(temp_1 < maxtemp and temp_1 != -127 and temp_1 > mintemp and temp_0 < maxtemp and temp_0 != -127 and temp_0 > mintemp) //Якщо все нормально виключити бузер { digitalWrite(buzer, LOW); } if (val >= 5 or val_3 >= 5) { digitalWrite(buzer, HIGH); delay(1000); digitalWrite(buzer, LOW); delay(1000); } } void getSendData() { yield(); DS18B20.requestTemperatures(); temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях temp_1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях Serial.print("Temp_0: "); Serial.print(temp_0); Serial.print(" oC . Temp_1: "); Serial.print(temp_1); Serial.println(" oC"); Blynk.virtualWrite(12, temp_0); //выврд данных на виртуальный пин V10 Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11 }
)
судя по коду - ты его не "написал", а надергал по нитке в интернете, не понимая, что за строчки вставляешь в программу.
В результате получилась жуткая каша из бестолково наваленных команд. Не удивительно, что ничего не работает. Нафига, напрмер, в Лупе при каждом проходе запускать lcd.begin() ? И более того - сделав один раз lcd.begin() , ты тут же делаешь его еще раз в процедуре lcdinfo(). Одни и те же данные выводятся на экран по 2-3 раза в разных кусках программы...
Вывод - в этом коде нет какой-то одной ошибки. которую поправить - и все заработает. Весь этот код - сплошная помойка, тут надо сидеть и выкидывать куски в десятки строк, переписывая по нормальному. ИМХО, это не вопрос для форума, тут либо сам разбирайся. либо заказывай платную разарботку.
Зачем везде, кроме setup() раскиданы lcd.begin()?
Проблема решилась легко просто забрал эту команду lcd.clear() в 202 строке
1.............
2.Такими тэмпами скоро каждый второй т.е. 50% подрастающего населения будет прАграмистами. Конъюнктура на рынке рецессирует и праграмистам придёцца доплачивать заказчикам за свою работу.
3.Тренируйся на шанцевом инструменте - это всегда будет в тренде.
Проблема решилась легко просто забрал эту команду lcd.clear() в 202 строке
программируем методом тыка?
Роман, учитесь разбираться в коде самостоятельно, а не собирать в кучу чужие непонятные строчки.
Программа ваша никуда не годится, ее лучше выкинуть и написать заново
Можно вопрос? Как очистить часть экрана а не весь
Вчись дальше. Тока по книшкам,х а не интернетам
И пиши по русски, мову буду удалять.
Можно вопрос? Как очистить часть экрана а не весь
рукалицО
И пиши по русски, мову буду удалять.
Дида, вот только не понял, а чем мова плоха? Англоязыких, вроде не чистим?