Подключение 2х датчиков DHT11 к mega
- Войдите на сайт для отправки комментариев
Пт, 10/02/2017 - 16:00
Доброго времени суток всем, помогите пожалуйста разобраться с кодом. Не получается прописать скейч для одновременной работы 2х датчиков dht11 и вывод показателей на 2004А I2C. Плата arduino Mega.
Выкладывайте что есть
Выкладывайте что есть
я запретил.
Пока есть рабочий код на один датчик :
Выкладывайте что есть
Так сказано же - "не получается". Если бы что-то было, а так ... сами выкладывайте как надо :)
Не, имеется в виду подправить тот код что у меня уже работает всегда быстрее чем с нуля прописывать.
подправить тот код что у меня уже работает всегда быстрее чем с нуля прописывать.
Вы так в этом уверены? Не много же Вы знаете о программировании.
А пока, изучите вот это и выложите код как положено.
Да, я только осваиваю программирование и на этом сайте недавно.
//Тестировалось на Arduino IDE 1.0.5 #include <Wire.h> // Добавляем необходимые библиотеки #include <LiquidCrystal_I2C.h> #include <dht11.h> dht11 DHT; // Объявление переменной класса dht11 #define DHT11_PIN 4 // Датчик DHT11 подключен к цифровому пину номер 4 byte degree[8] = // Битовая маска символа градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, }; LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Задаем адрес и размерность дисплея void setup() { lcd.begin(20,4); // Инициализация lcd lcd.backlight(); // Включаем подсветку // Создаем символ под номером 1 } void loop() { // Выводим показания влажности и температуры lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("H= % "); // Выводим текст lcd.setCursor(2, 0); lcd.print(DHT.humidity, 1); lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("T= C "); // Выводим текст, \1 - значок градуса lcd.setCursor(2, 1); lcd.print(DHT.temperature,1); int chk; ; // Мониторинг ошибок chk = DHT.read(DHT11_PIN); // Чтение данных switch (chk){ case DHTLIB_OK: break; case DHTLIB_ERROR_CHECKSUM: lcd.clear(); lcd.print("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: lcd.clear(); lcd.print("Time out error"); break; default: lcd.clear(); lcd.print("Unknown error"); break; } delay(1000); }подправить тот код что у меня уже работает всегда быстрее чем с нуля прописывать.
Вы так в этом уверены? Не много же Вы знаете о программировании.
А пока, изучите вот это и выложите код как положено.
истинные слова, при переходе с ШИМ на ЦАП проще было всё с нуля переписать и, код как бы в два раза сократился )))
Никогда не делал, но попробовал бы так:
А как вывести на экран показания датчиков ?
На этот каод выдаёт ошибку
#include <Wire.h> // Добавляем необходимые библиотеки #include <LiquidCrystal_I2C.h> #include <dht11.h> dht11 DHT; // Объявление переменной класса dht11 #define DHT11_PIN 4 // Датчик DHT11 №1 подключен к цифровому пину номер 4 dht11 DHT1; // Объявление переменной класса dht11 #define DHT11_1_PIN 5 // Датчик DHT11 №2 подключен к цифровому пину номер 5 byte degree[8] = // Битовая маска символа градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, }; LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Задаем адрес и размерность дисплея void setup() { lcd.begin(20,4); // Инициализация lcd lcd.backlight(); // Включаем подсветку // Создаем символ под номером 1 } void loop() { // Выводим показания влажности и температуры lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("H= % "); // Выводим текст lcd.setCursor(2, 0); lcd.print(DHT.humidity, 1); lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("T= C "); // Выводим текст, lcd.setCursor(2, 1); lcd.print(DHT.temperature,1); lcd.setCursor(0, 2); // Устанавливаем курсор в начало 3 строки lcd.print("H= % "); // Выводим текст lcd.setCursor(2, 2); lcd.print(DHT1.humidity, 1); lcd.setCursor(0, 3); // Устанавливаем курсор в начало 4 строки lcd.print("T= C "); // Выводим текст, lcd.setCursor(2, 3); lcd.print(DHT1.temperature,1); int chk; // Мониторинг ошибок chk = DHT.read(DHT11_PIN); // Чтение данных 1го датчика chk = DHT.read(DHT11_1_PIN5); // Чтение данных 2го датчика switch (chk){ case DHTLIB_OK: break; case DHTLIB_ERROR_CHECKSUM: lcd.clear(); lcd.print("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: lcd.clear(); lcd.print("Time out error"); break; default: lcd.clear(); lcd.print("Unknown error"); break; } delay(1000); }Эта конструкция точно неправильная!
Во первых название пина для второго датчика,
во вторых, наверное переменных надо две chk и chk1
тогда и блоков проверки надо два, или если оставить одну переменную, считали с первого датчика, проверям, считали со второго датчика, проверяем
А интернет пишет, что между чтениями датчиков должно пройти не менее 2 секунд, а что в описании на вашу библиотеку, кстати какую именно используете?
Мб поможет кому. Делал метеостанцию на 2 DTH11. + датчик света с дискретным выходом на отключение подсветки ночью.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей #include "DHT.h" #define DHTPIN 2 // Номер пина к которому подкл. датчик 1 #define DHTPIN2 4 // Номер пина к которому подкл. датчик 2 DHT dht(DHTPIN, DHT11); // Инициализируем датчик 1 DHT dht2(DHTPIN2, DHT11); // Инициализируем датчик 2 int inPin = 7; // датчик света на входе 7 int val = 0; // переменная для хранения значения byte simvol[8] = { //кодируем символ градуса 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 }; void setup() { pinMode(inPin, INPUT); // устанавливает режим работы - вход для 7го вход/выхода (pin) lcd.init(); lcd.createChar(1, simvol); // добавляем символ дисплею } void loop() { delay(2000); // 2 секунды задержки val = digitalRead(inPin); // считываем значение с входа датчика света if (val == LOW) lcd.backlight(); else lcd.noBacklight(); float h = dht.readHumidity(); //Измеряем влажность float t = dht.readTemperature(); //Измеряем температуру float h2 = dht2.readHumidity(); //Измеряем влажность float t2 = dht2.readTemperature(); //Измеряем температуру lcd.setCursor(0, 0); lcd.print("In: "); lcd.setCursor(5, 0); lcd.print(t, 0); lcd.setCursor(7, 0); lcd.print(char(1)); lcd.setCursor(8, 0); lcd.print("C"); lcd.setCursor(10, 0); lcd.print(h, 0); lcd.setCursor(12, 0); lcd.print(" % "); lcd.setCursor(0, 1); lcd.print("Out: "); lcd.setCursor(5, 1); lcd.print(t2, 0); lcd.setCursor(7, 1); lcd.print(char(1)); lcd.setCursor(8, 1); lcd.print("C"); lcd.setCursor(10, 1); lcd.print(h2, 0); lcd.setCursor(12, 1); lcd.print(" % "); }byte simvol[8] = { //кодируем символ градуса 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 };мошт, я тебя удивлю, канеш, но в китайском LCD1602, есть символ градуса, его код 0xDF.
Screen.setCursor(0, 1); Screen.printf("Left side: %d%cC", glbTemperature, 0xDF);Буду знать теперь.
а нам-то по Траллесу надобно :-)
Я до таких градусов еще не допился. У меня простые.