Не выводится текст на дисплей 16х2 в цикле луп ()

Romanvd
Offline
Зарегистрирован: 17.03.2020

Здравствуйте написал код.Який выводит температуру и состояние дверей на екран.Колы я включаю ардуион то запрограммировано в 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
}

)

b707
Offline
Зарегистрирован: 26.05.2017

судя по коду - ты его не "написал", а надергал по нитке в интернете, не понимая, что за строчки вставляешь в программу. 

В результате получилась жуткая каша из бестолково наваленных команд. Не удивительно, что ничего не работает. Нафига, напрмер,  в Лупе при каждом проходе запускать lcd.begin() ? И более того - сделав один раз lcd.begin() , ты тут же делаешь его еще раз в процедуре lcdinfo(). Одни и те же данные выводятся на экран по 2-3 раза в разных кусках программы...

Вывод - в этом коде нет какой-то одной ошибки. которую поправить - и все заработает. Весь этот код - сплошная помойка, тут надо сидеть и выкидывать куски в десятки строк, переписывая по нормальному. ИМХО, это не вопрос для форума, тут либо сам разбирайся. либо заказывай платную разарботку.

sadman41
Offline
Зарегистрирован: 19.10.2016

Зачем везде, кроме setup() раскиданы lcd.begin()?

Romanvd
Offline
Зарегистрирован: 17.03.2020
1. Я новичок
2.Мени 13 лет
3. Что сделать чтобы заработал экран потому что все остальные работают
 
Romanvd
Offline
Зарегистрирован: 17.03.2020

Проблема решилась легко просто забрал эту команду lcd.clear() в 202 строке

-NMi-
Offline
Зарегистрирован: 20.08.2018

Romanvd пишет:

2.Мени 13 лет
3. Что сделать

1.............

2.Такими тэмпами скоро каждый второй т.е. 50% подрастающего населения будет прАграмистами. Конъюнктура на рынке рецессирует и праграмистам придёцца доплачивать заказчикам за свою работу.

3.Тренируйся на шанцевом инструменте - это всегда будет в тренде.

b707
Offline
Зарегистрирован: 26.05.2017

Romanvd пишет:

Проблема решилась легко просто забрал эту команду lcd.clear() в 202 строке

программируем методом тыка?

Роман, учитесь разбираться в коде самостоятельно, а не собирать в кучу чужие непонятные строчки.

Программа ваша никуда не годится, ее лучше выкинуть и написать заново

Romanvd
Offline
Зарегистрирован: 17.03.2020

Можно вопрос? Как очистить часть экрана а не весь

Romanvd
Offline
Зарегистрирован: 17.03.2020
Я понимаю, но стараюсь создать хоть что-то
я нигде этом невчився кроме интернета
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вчись дальше. Тока по книшкам,х а не интернетам

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

И пиши по русски, мову буду удалять.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Romanvd пишет:

Можно вопрос? Как очистить часть экрана а не весь

рукалицО

bwn
Offline
Зарегистрирован: 25.08.2014

DetSimen пишет:

И пиши по русски, мову буду удалять.

Дида, вот только не понял, а чем мова плоха? Англоязыких, вроде не чистим?