Дорукожопил. Loop не работает

Всем доброго вечера. Не знаю почему, перестал работать цикл loop. Вот код. Помогите пожалуйста. Так - же фото с платой:

#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>                      // библиотека для управления устройствами по I2C 
#include <LCD_1602_RUS.h>              // подключаем библиотеку LCD_1602_RUS
#include <DS3231.h>

DS3231  rtc(SDA, SCL);                 // Инициализация DS3231
LCD_1602_RUS LCD(0x27,16,2);           // присваиваем имя LCD для дисплея
DHT dht(4, DHT22);                     // сообщаем к какому пину подключен DHT22
Time t;
String Hor, Min, Sec, Date, Mon, Year, day, dan;

int Dow;
                                                                                                                
void setup()
{
  rtc.begin();                                                                                                                      // Инициализация часов 
  LCD.init();                                                                                                                          // инициализация LCD дисплея
  LCD.backlight();                                                                                                                     // включение подсветки дисплея
  dht.begin();                                                                                                                    
}

void loop()
{ 

 float humi = dht.readHumidity(); //Измеряем влажность
 float temp = dht.readTemperature(); //Измеряем температуру

  LCD.setCursor(0,0);
  LCD.print(String(Hor));

  LCD.setCursor(2,0);
  LCD.print(":");

  LCD.setCursor(3,0);
  LCD.print(Min);

  LCD.setCursor(6,0);
  LCD.print(day);

  LCD.setCursor(10,0);
  LCD.print(Date);

  LCD.setCursor(12,0);
  LCD.print("/");

  LCD.setCursor(13,0);
  LCD.print(Mon);

  LCD.setCursor(1,1);
  LCD.print(temp);
  LCD.print("°C");
  LCD.setCursor(9,1);
  LCD.print(humi);
  LCD.print("%");

  delay(1);

 // Присваиваем переменным значения
 t = rtc.getTime();
 Date = t.date;
 Mon = t.mon;
 Year = t.year;
 Hor = t.hour;
 Min = t.min;
 Sec = t.sec;
 Dow = t.dow;

  // Если число меньше 10, то добавляем 0 спереди
  if (Hor.toInt() < 10) Hor = "0" + Hor;
  if (Min.toInt() < 10) Min = "0" + Min;
  if (Sec.toInt() < 10) Sec = "0" + Sec;
  if (Date.toInt() < 10) Date = "0" + Date;
  if (Mon.toInt() < 10) Mon = "0" + Mon;

  // Вывод дней недели
  switch(Dow)
  {
    case 7:
    day = "Вс,";
    break;

    case 1:
    day = "Пн,";
    break;

    case 2:
    day = "Вт,";
    break;

    case 3:
    day = "Ср,";
    break;

    case 4:
    day = "Чт,";
    break;

    case 5:
    day = "Пт,";
    break;

    case 6:
   day = "Сб,";
   break;

   default:
   day = "Ош,";
   break;
  }

}



И как это проявляется?

В setup зависает и всё. Постоянно дисплей иницилизирует и включает подсветку. Мог бы видео показать, но нельзя(

Отменяй изменения, пока не заработает. Так узнаешь, где накосячил

Помнится, раньше у Вас оператор if не работал. Теперь вот, функция loop. Может, в консерватории чего не так?

Посмотрите на строки №№38-48 и строки №№62-108.

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

1 лайк

пробывал раньше было наооборот

эх Петрович, напророчил ты сегодня про выводы))

Пробыйте ещё. А главное попробуйте включить мозги (если есть) и ответить самому себе на простой вопрос: нахера выводить на экран переменную, которой пока ещё никакого значения не присвоено?

«Без умолку безумная девица …» :slight_smile:

Подсказываю

void setup()
{
  Serial.begin(9600);
  rtc.begin();    
  Serial.println("1");                                                                                                                    
  LCD.init(); 
  Serial.println("2");                                                                                                                    
  LCD.backlight(); 
  Serial.println("3");                                                                                                                    
  dht.begin();                                                                                                                    
  Serial.println("4");                                                                                                                    
}

И далее по коду вставляете подобные строки. Потом запускаете монитор порта и смотрите, после какой строки идет перезагрузка. И смотрите, какая бяка написана после нее

2 1

2 1

2 1

2 1

что то не запускается

Ну и чего неясного? У вас не инициализируется дисплей. При чем здесь loop()?

1 лайк

понял я, не успеваю отвечать) всё запустилось и без begin(не показывает temp) но так-же мигает подсветкаой

Инициализируется. Но при попытке включить подсветку почему-то ресетится…

вот вот, это я и имел ввиду

Ну так попробуй за комментировать 19 строку ( LCD.backlight(); ) для начала и скажи что будет.

Только вывод в порт как @v258 сказал оставь

вот что увидел в мониторе порта: пишет 1234, и опять начинает

пробую: вот что увидел в мониторе порта: пишет 1234, и опять начинает

А это откуда тогда?