dht11 не показывает температуру при подключении часов
- Войдите на сайт для отправки комментариев
есть значит такая беда: датчик работает на нескольких библиотеках, все отлично показывает. есть реле, которое должно включаться либо при повышении температуры и влажности либо при наступлении определенного времени. есть модуль часов DS3231.
проблема в том что когда я инициализирую модуль часов в коде температура с датчика перестает читаться, получается ноль.
если закомментировать строку rtc.begin(); то на Serial выводится значение, но естественно не работают часы.
контроллер Leonardo.
замечал такую же беду при подключении lcd дисплея, после lcd.begin, но дисплей не понадобился и я тогда не заморачивался. подскажите в чем проблема, потому что не могу понять то ли лыжи не едут, то ли...
#include <Thread.h> // библиотека потоков #include "DHT.h" #include <Wire.h> #include "RTClib.h" //библиотека часов DHT dht; RTC_DS3231 rtc; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; int Relay1 = 3; // Реле модуль подключен к цифровому выводу 3 Thread ThTime = Thread(); // поток управления реле по времени Thread ThRelay1 = Thread(); // поток управления реле по событию повышения температуры float humidity = 0; // Переменная влажности int temperature = 0; // Переменная температуры void setup() { Serial.begin(9600); dht.setup(2); // data pin 2 rtc.begin(); pinMode(Relay1, OUTPUT); ThRelay1.onRun(GlobalRelay); //Назначаем потоку задачу ThRelay1.setInterval(2000); //Интервал срабатывания, мсек digitalWrite(Relay1, HIGH); // реле выключено ThTime.onRun(OnTime); //Назначаем потоку задачу ThTime.setInterval(9000); //Интервал срабатывания, мсек digitalWrite(Relay1, HIGH); // реле выключено } void loop() { delay(dht.getMinimumSamplingPeriod()); // Проверка прошел ли интервал включения: if (ThRelay1.shouldRun()) ThRelay1.run(); // запускаем поток if (ThTime.shouldRun()) ThTime.run(); // запускаем поток } void GlobalRelay(){ CheckTemp(); Serial.print("Humidity: "); Serial.print(humidity); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" *C"); if (temperature>26 || humidity>70){ digitalWrite(Relay1, LOW); // реле включено } else{ digitalWrite(Relay1, HIGH); // реле выключено } } void CheckTemp(){ humidity = dht.getHumidity(); temperature = dht.getTemperature(); } void OnTime(){ DateTime now = rtc.now(); //получение значения часов int th=now.hour(); Serial.println(th); if (now.hour()>12||now.hour()<15){ //если время от 12 до 15 digitalWrite(Relay1, LOW); // реле включено } else{ digitalWrite(Relay1, HIGH); // реле выключено }
большое спасибо за ответ всем абсолютно
сам уже разобрался