вывод двух датчиков на utft
- Войдите на сайт для отправки комментариев
Чт, 13/07/2017 - 18:04
dht11 DHT; // Объявление переменной класса dht11
#define DHT11a_PIN 12
#define DHT11b_PIN 13
{int chk;
chk = DHT.read(DHT11a_PIN); // Чтение данных с датчика DHT11 (ЗАЛ)
myGLCD.setColor(VGA_WHITE);
myGLCD.print(String(DHT.temperature), 380,10) ; }
myGLCD.print("C ", 430,10 );
myGLCD.print(String(DHT.humidity), 380,40);
myGLCD.print("%", 430,40);
delay(2000);
}
{{int chk2;
chk2 = DHT.read(DHT11b_PIN);
myGLCD.setColor(VGA_WHITE);
myGLCD.print(String(DHT.temperature), 380,70) ; }
myGLCD.print("C ", 430,70 );
myGLCD.print(String(DHT.humidity), 380,100);
myGLCD.print("%", 430,100);
delay(2000);
}
вывожу температуру на utft дисплей.
один датчик dht11 подключил и вывел на дисплей, но второй датчик так и не получается вывести.
показания первого датчика так же отображаются и во второй позиции второго датчика... хотя второй датчик не подключен... меняю местами провод от датчика - второй отображается в перво позиции.
хотя при отключенном датчике в позиции (отключенного датчика) должен отобазится ноль...
подскажите, где ошибка в скетче.
прилагаю часть кода...
прилагаю часть кода...
Что заставляет Вас думать, что проблема именно в этой части?
И что мешает завести две переменные датчиков, раз у Вас их два?
прилагаю часть кода...
Что заставляет Вас думать, что проблема именно в этой части?
И что мешает завести две переменные датчиков, раз у Вас их два?
вот я и прошу помощи разобраться где проблема?
мешает не знание как это сделать...
я много примеров по подключению двух датчиком просмотрел, но к сожалению они были для мониторинга или
для lcd1602... на основе тех данных я и пытался вывести два датчика на utft
ну если на 1602 у вас есть код по выводу данных с двух датчиков влажности то и сделайте по аналогии на tft, в чём проблема
проблема в вышесказаном... один датчик считывается и выводится как два датчика...
я в скетче указываю два датчика dht11, но подключаю пока только один - в первой позиции он как положено температуру и влажность показывает.
второй датчик НЕ ПОДКЛЮЧЕН - однако во второй позиции отображаются показания первого датчика.
я не пойму, где совершил ошибку... по примерам я вроде все так же сделал, но результат получился не тот.
ЕвгенийП прав, проблема не в этой части кода
// подключение необхдимых библиотек #include <dht11.h> #include <UTFT.h> #include <DS1307.h> // подключение шрифтов extern uint8_t BigFont[]; extern uint8_t SmallFont[]; extern uint8_t SevenSegNumFont[]; extern uint8_t Grotesk16x32[]; // подключение исплея UTFT myGLCD(TFT395UNO,A2,A1,A3,A4,A0); // подключение датчика DHT11 dht11 DHT; // Объявление переменной класса dht11 #define DHT11a_PIN 12 #define DHT11b_PIN 13 // DS1307: SDA pin -> pin 9 // SCL pin -> pin 10 // часы DS1307 rtc(10, 11); Time t; void setup() { Serial.begin(9600); rtc.halt(false); //Запускаем часы myGLCD.InitLCD(); //Инициализируем дисплей myGLCD.fillScr(0, 0, 0); //Закрашиваем дисплей черным цветом // The following lines can be commented out to use the values already stored in the DS1302 // rtc.setDOW(SUNDAY); // день FRIDAY //rtc.setTime(17, 39, 0); // час, мин, сек (24 часовой) //rtc.setDate(11, 07, 2017); // день, месяц, год } void loop() { // вывод часов и даты t = rtc.getTime(); String stringOne = rtc.getTimeStr(); myGLCD.setColor(255, 255, 255); //Цвет отображения myGLCD.setFont(SevenSegNumFont); //Шрифт для отображения myGLCD.print(stringOne.substring(0,2), 10, 10); //Отображаем часы myGLCD.print(stringOne.substring(3,5), 100, 10); //Отображаем минуты myGLCD.setFont(BigFont); myGLCD.setColor(255, 255, 0); //Цвет отображения myGLCD.print(stringOne.substring(6), 170, 10); // Вывод секунд //delay(500); myGLCD.setColor(255, 255, 0); myGLCD.setFont(BigFont); myGLCD.fillCircle(85, 25, 7); //Верхняя точка myGLCD.fillCircle(85, 45, 7); //Нижняя точка myGLCD.setColor(0, 255, 0); myGLCD.setFont(BigFont); myGLCD.print(rtc.getDateStr(), 15, 70); //Отображаем дату // рамка по краю дисплея myGLCD.drawRoundRect(5,5,475,315); // рамка // на данном этапе планировалось вывести датчики DHT11 myGLCD.setColor(VGA_FUCHSIA); //Цвет отображения myGLCD.setFont(Grotesk16x32); //Шрифт для отображения myGLCD.print("ZAL", 230, 10); //Отображаем зал myGLCD.setColor(VGA_FUCHSIA); //Цвет отображения myGLCD.setFont(BigFont); //Шрифт для отображения myGLCD.print("temp", 290, 10); //Отображаем температура myGLCD.setColor(VGA_FUCHSIA); //Шрифт для отображения myGLCD.setFont(BigFont); //Шрифт для отображения myGLCD.print("vlajn", 290, 40); //Отображаем влажность // на данном этапе планировалось вывести датчики DHT11 myGLCD.setColor(VGA_MAROON); //Цвет отображения myGLCD.setFont(Grotesk16x32); //Шрифт для отображения myGLCD.print("KUCH", 230, 70); //Отображаем кухня myGLCD.setColor(VGA_MAROON); //Цвет отображения myGLCD.setFont(BigFont); //Шрифт для отображения myGLCD.print("temp", 300, 70); //Отображаем температура myGLCD.setColor(VGA_MAROON);//Цвет отображения myGLCD.setFont(BigFont); //Шрифт для отображения myGLCD.print("vlajn", 300, 100); //Отображаем влажность myGLCD.setColor(VGA_WHITE); myGLCD.print(String(DHT.temperature), 380,10) ; myGLCD.print("C ", 430,10 ); myGLCD.print(String(DHT.humidity), 380,40); myGLCD.print("%", 430,40); {int chk; chk = DHT.read(DHT11a_PIN); // Чтение данных с датчика DHT11 (ЗАЛ) myGLCD.setColor(VGA_WHITE); myGLCD.print(String(DHT.temperature), 380,10) ; myGLCD.print("C ", 430,10 ); myGLCD.print(String(DHT.humidity), 380,40); myGLCD.print("%", 430,40); delay(2000); } {{int chk2; chk2 = DHT.read(DHT11b_PIN); myGLCD.setColor(VGA_WHITE); myGLCD.print(String(DHT.temperature), 380,70) ; } myGLCD.print("C ", 430,70 ); myGLCD.print(String(DHT.humidity), 380,100); myGLCD.print("%", 430,100); delay(2000); } }хорошо, вот скетч... как бы вы прописали два этих датчика???
поменяй PIN 13 на другой
а смысл??? это как в математике - от перестановки слагаемых сумма не поменяется...
А ты пробовал?
Что еще на 13-ом пине висит?
пробовал...
ничего на нем не сидит
подключил второй датчик... теперь они скачут и показывают с преодичностью свои и другие показания.
пробовал...
ничего на нем не сидит
Ощибаетесь, на 13 пине висит светодиод, впаянный в плату. Если есть другие свободные пины, 13-й лучше не использовать.
Что касается показаний с датчиков - внимательно отнеситесь к совету Евгения в сообщении #1. Если у вас два датчика, то и обьектов класса dht11 должно быть два, а у вас - один.
пересадил уже на А1
Если у вас два датчика, то и обьектов класса dht11 должно быть два, а у вас - один.
подскажите как правильно тогда прописать это?
подскажите как правильно тогда прописать это?
Ну блин :)
У вас 16 строчка - dht11 DHT; Добавьте еще одну, скажем dht11 DHT2;
И после этого везде, где у вас второй датчик - поменяйте DHT на DHT2. Только внимательно, найдите все вызовы этого класса и четко разберитесь, где у вас первый датчик, а где второй.
И после этого везде, где у вас второй датчик - поменяйте DHT на DHT2. Только внимательно, найдите все вызовы этого класса и четко разберитесь, где у вас первый датчик, а где второй.
Хуже от этого точно не должно быть. Хотя формально почему бы и как есть не работать? В используемой библиотеке получается, что объект DHT к конкретному пину не привязан, а читает данные с того, с какого попросят.
Автору бы ещё результат функции read проверить. Может он по каким-то причинам не всегда Ок?
Попробуйте это в отдельные функции оформить и из лупа вызывать,
что-то не нравится мне (дилетанту) ваша конструкция
{int chk; chk = DHT.read(DHT11a_PIN); // Чтение данных с датчика DHT11 (ЗАЛ) myGLCD.setColor(VGA_WHITE); myGLCD.print(String(DHT.temperature), 380,10) ; myGLCD.print("C ", 430,10 ); myGLCD.print(String(DHT.humidity), 380,40); myGLCD.print("%", 430,40); delay(2000); } {{int chk2; chk2 = DHT.read(DHT11b_PIN); myGLCD.setColor(VGA_WHITE); myGLCD.print(String(DHT.temperature), 380,70) ; } myGLCD.print("C ", 430,70 ); myGLCD.print(String(DHT.humidity), 380,100); myGLCD.print("%", 430,100); delay(2000); }я чуть по другому сделал, но принцип тот же.
ура... заработало, как сказал b707 так и сделал.
датчик отключеный показывает по нулям, подключеный показывает температуру и влажность. и наоборот. оба тоже показывают и реагируют на принудительную темпратуру по разному.
всем спасибо, тема закрыта.
датчик отключеный показывает по нулям, подключеный показывает температуру и влажность. и наоборот. оба тоже показывают и реагируют на принудительную темпратуру по разному.
В Вашем исходном варианте температура с обоих датчиков хранится в одном и том же поле. Прочитали данные с одного датчика - запомнили. Читаем со второго - ой, не получилось. Поле температуры при этом библиотекой не очищается, по-видимому. Там оставлся результат прошлого измерения. Вот Вы нулей и не видели. Можно было это контролировать самому и если результат функции read() не Ок, то выводить на экран 0. Но с двумя переменными - более привычный вариант исполнения.
спасибо, на будущее учту. этот скетч пока учебный тестовый.