Я разделю свой ответ на две части:
- Аппаратное обеспечение:
Пожалуйста, опишите конфигурацию вашего оборудования, чтобы сузить круг вашей проблемы: Как вы переключаете реле? Он оптически связан? Вы используете транзистор? Если да, то какого типа? Есть ли в вашем реле защита от обратного диода? (Не не подключайте реле напрямую к контакту Arduino)
- Код
2.1. Этот цикл for в вашей настройке() неверен:
for (int DigitalPin = 8; DigitalPin <= 8; DigitalPin++) {
pinMode(DigitalPin, OUTPUT);
}
Вы индексируете от 8 до 8, поэтому вам не нужен цикл for для объявления одного вывода в качестве выхода.
2.2. В общем, вы можете назначить свои выходные контакты переменным или макросу, как вы сделали для DHT. Просто будьте последовательны. Кроме того, ваш код нуждается в общей уборке:
а . Начните свой код со всеми вызовами библиотек
#include <Wire.h> // The Wire.h library is already called by the LiquidCrystal_I2C library, so you don't need to call it if you use the I2C one
#include <LCD.h> // You are using the LCD library...
#include <LiquidCrystal_I2C.h> // but also the I2C lcd library. You don't need both.
#include <dht.h> // Is this the latest version? Use Adafruit's
б. Попробуйте сгруппировать все свои макросы в начале. Объявите контакты или константы здесь:
// Using macros
#define DHT11_PIN 7
#define DigitalPin 8
#define DHT11_PIN 7
или используя константы для выводов. Выберите один, а не оба:
// Group all your const int together, for the sake of clarity
const int DHT_PIN = 7;
const int DigitalPin = 8;
const int ledPin = 6;
в. Я считаю, что этот конструктор не подходит для выбранной вами библиотеки. Посмотрите пример из этого библиотека (при условии, что это то же самое, что я считаю)
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
попробуйте вместо этого с этим конструктором:
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
д. Функция setup()
тоже нуждается в некоторых изменениях:
void setup()
{
// You don't seem to be using the serial library. However, if you use it, it is
// preferable to start it first.
Serial.begin(9600);
// LCD configuration
lcd.begin(16, 2); // Always call the begin() method first
lcd.setBacklightPin(3,POSITIVE); // Then, use additional configuration methods.
lcd.setBacklight(HIGH);
lcd.clear();
// Once again, please check if you are using the right library.
// It might be the cause of the garbage you see.
// Initialize the type of pin
pinMode(DigitalPin, OUTPUT);
}
е. Согласно библиотеке Adafruit (пожалуйста, см. примеры), вам не хватает макроса для объявления типа используемого датчика DHT:
# определить DHTTYPE DHT11
ф. В вашем основном цикле() вы читаете значения с какой-то странной скобкой:
int chk = DHT.read11(DHT11_PIN);
float temp=(DHT.temperature);
float Hum=(DHT.humidity);
который, согласно последней библиотеке, должен быть:
// The latest library does not have this prototype: int chk = DHT.read11(DHT11_PIN); What is it for in your dht lib?
float temp = DHT.readTemperature(); // instead of: float temp=(DHT.temperature); --> which should be DHT.temperature(); in any case
float hum = DHT.readHumidity(); // instead of: float Hum=(DHT.humidity);
TL;DR: поделитесь своим оборудованием, чтобы помочь вам. Обновите свои библиотеки, очистите свой код и используйте правильные методы из последних библиотек.
person
Daniel Melendrez
schedule
27.11.2020