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); // реле выключено
}
большое спасибо за ответ всем абсолютно
сам уже разобрался