Имею устройство ардуино уно+ датчик темп влаж + реле блок на 8 реле подключил , все работает скетч : Код (Text): #include <DHT.h> #include <DHT.h> #include "DHT.h" #define DHTPIN 2 // вывод, к которому подключается датчик #define DHTTYPE DHT22 // DHT 22 (AM2302) #define fan 4 int maxHum = 101; int maxTemp = 26.3; DHT dht(DHTPIN, DHTTYPE); void setup() { pinMode(fan, OUTPUT); Serial.begin(9600); dht.begin(); } void loop() { // ждем пару секунд перед началом измерений delay(2000); // считывание температуры или влажности занимает примерно 250 мс! // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик) float h = dht.readHumidity(); // Считывание температуры в цельсиях float t = dht.readTemperature(); // проверяем, были ли ошибки при считывании и, если были, начинаем заново if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } if(h > maxHum || t > maxTemp) { digitalWrite(fan, HIGH); } else { digitalWrite(fan, LOW); } Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); } Вопрос к знатакам - как теперь вывести информацию на жк дисплей ? и как разделить реле ( при температуры срабатывает первое реле , при изменение влажности второе реле) ?
Нужно вместо куска Код (C++): Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); написать код для вывода инфы на дисплей. Нужно разделить вот этот if Код (C++): if(h > maxHum || t > maxTemp) { digitalWrite(fan, HIGH); } else { digitalWrite(fan, LOW); } На две отдельные части. Одна из них будет включать реле, связанное с температурой, вторая -- реле связанное с влажностью.
Взять любой скетч с выводом информации на дисплейчик. Все, что выше setup перенести также выше setup. Все, что в setup, также вставить в setup. Ну и потом по аналогии все, что ниже. Проверять, чтобы пины не попали друг на друга. Пока так. А реле разъединять будем уже потом. Глядишь, крупнее меня специалисты подтянутся, помогут.
не совсем понял #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); #include <dht11.h> dht11 sensor; #define DHT11PIN 2 byte degree[8] = // кодируем символ градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, }; void setup() { lcd.init(); lcd.backlight(); lcd.createChar(1, degree); // Создаем символ под номером 1 } void loop() { int chk = sensor.read(DHT11PIN); lcd.setCursor(0, 0); lcd.print("Hum: %"); lcd.setCursor(11, 0); lcd.print(sensor.humidity); lcd.setCursor(0, 1); lcd.print("temp: C"); lcd.setCursor(11, 1); lcd.print(sensor.temperature); delay(2000); } С этим работает дачик темп и дисплей, как их связать вместе ?
Хорошо . Спасибо ! Вот воссоеденил - ошибка Код (Text): #include <LiquidCrystal_I2C.h> #include <DHT.h> #include <DHT.h> #include "DHT.h" #define DHT11PIN 2 byte degree[8] = // кодируем символ градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, #define rele 4 int maxHum = 100; int maxTemp = 26.3; DHT dht(DHTPIN, DHTTYPE); void setup() { pinMode(rele, OUTPUT); Serial.begin(9600); dht.begin(); } void loop() { // ждем пару секунд перед началом измерений delay(2000); // считывание температуры или влажности занимает примерно 250 мс! // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик) float h = dht.readHumidity(); // Считывание температуры в цельсиях float t = dht.readTemperature(); // проверяем, были ли ошибки при считывании и, если были, начинаем заново if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } if(h > maxHum || t > maxTemp) { digitalWrite(rele, HIGH); } else { digitalWrite(rele, LOW); } int chk = sensor.read(DHT11PIN); lcd.setCursor(0, 0); lcd.print("Hum: %"); lcd.setCursor(11, 0); lcd.print(sensor.humidity); lcd.setCursor(0, 1); lcd.print("temp: C"); lcd.setCursor(11, 1); lcd.print(sensor.temperature); delay(2000); } ошибка - exit status 1 expected primary-expression before 'int'
В setup не вижу чтобы от дисплея что-то перенесли. Ну и ошибку сразу выкладывайте, проще ее искать будет.
Код (Text): #include <LiquidCrystal_I2C.h> #include <DHT.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); #include <dht11.h> dht11 sensor; #define DHT11PIN 2 byte degree[8] = // кодируем символ градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, #define rele 4 int maxHum = 100; int maxTemp = 26.3; DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.init(); lcd.backlight(); lcd.createChar(1, degree); // Создаем символ под номером 1 dht.begin(); } void loop() { // ждем пару секунд перед началом измерений delay(2000); // считывание температуры или влажности занимает примерно 250 мс! // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик) float h = dht.readHumidity(); // Считывание температуры в цельсиях float t = dht.readTemperature(); // проверяем, были ли ошибки при считывании и, если были, начинаем заново if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } if(h > maxHum || t > maxTemp) { digitalWrite(rele, HIGH); } else { digitalWrite(rele, LOW); } int chk = sensor.read(DHT11PIN); lcd.setCursor(0, 0); lcd.print("Hum: %"); lcd.setCursor(11, 0); lcd.print(sensor.humidity); lcd.setCursor(0, 1); lcd.print("temp: C"); lcd.setCursor(11, 1); lcd.print(sensor.temperature); delay(2000); } Вот как то так, но экран не работает ....