вывод двух датчиков на utft

kainda
Offline
Зарегистрирован: 09.02.2017
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 подключил и вывел на дисплей, но второй датчик так и не получается вывести.

показания первого датчика так же отображаются и во второй позиции второго датчика... хотя второй датчик не подключен... меняю местами провод от датчика - второй отображается в перво позиции.

хотя при отключенном датчике в позиции (отключенного датчика) должен отобазится ноль...

подскажите, где ошибка в скетче.

прилагаю часть кода...

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kainda пишет:

прилагаю часть кода...

Что заставляет Вас думать, что проблема именно в этой части?

И что мешает завести две переменные датчиков, раз у Вас их два?

kainda
Offline
Зарегистрирован: 09.02.2017

ЕвгенийП пишет:

kainda пишет:

прилагаю часть кода...

Что заставляет Вас думать, что проблема именно в этой части?

И что мешает завести две переменные датчиков, раз у Вас их два?

вот я и прошу помощи разобраться где проблема?

мешает не знание как это сделать...

я много примеров по подключению двух датчиком просмотрел, но к сожалению они были для мониторинга или

для lcd1602... на основе тех данных я и пытался вывести два датчика на utft

vvadim
Offline
Зарегистрирован: 23.05.2012

ну если на 1602 у вас есть код по выводу данных с двух датчиков влажности то и сделайте по аналогии на tft, в чём проблема

kainda
Offline
Зарегистрирован: 09.02.2017

проблема в вышесказаном... один датчик считывается и выводится как два датчика...

я в скетче указываю два датчика dht11, но подключаю пока только один - в первой позиции он как положено температуру и влажность показывает.

второй датчик НЕ ПОДКЛЮЧЕН - однако во второй позиции отображаются показания первого датчика.

я не пойму, где совершил ошибку... по примерам я вроде все так же сделал, но результат получился не тот.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП прав, проблема не в этой части кода

kainda
Offline
Зарегистрирован: 09.02.2017
// подключение необхдимых библиотек
#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); 
} 
 
}

хорошо, вот скетч... как бы вы прописали два этих датчика???

bankir_1986
Offline
Зарегистрирован: 23.03.2015

поменяй PIN 13 на другой

kainda
Offline
Зарегистрирован: 09.02.2017

а смысл??? это как в математике - от перестановки слагаемых сумма не поменяется...

bankir_1986
Offline
Зарегистрирован: 23.03.2015

А ты пробовал?

Что еще на 13-ом пине висит?

kainda
Offline
Зарегистрирован: 09.02.2017

пробовал...

ничего на нем не сидит

подключил второй датчик... теперь они скачут и показывают с преодичностью свои и другие показания.

b707
Offline
Зарегистрирован: 26.05.2017

kainda пишет:

пробовал...

ничего на нем не сидит

Ощибаетесь, на 13 пине висит светодиод, впаянный в плату. Если есть другие свободные пины, 13-й лучше не использовать.

Что касается показаний с датчиков - внимательно отнеситесь к совету Евгения в сообщении #1. Если у вас два датчика, то и обьектов класса dht11 должно быть два, а у вас - один.

 

kainda
Offline
Зарегистрирован: 09.02.2017

пересадил уже на А1

b707 пишет:

 Если у вас два датчика, то и обьектов класса dht11 должно быть два, а у вас - один.

подскажите как правильно тогда прописать это?

 

b707
Offline
Зарегистрирован: 26.05.2017

kainda пишет:

подскажите как правильно тогда прописать это?

Ну блин :)

У вас 16 строчка - dht11 DHT; Добавьте еще одну, скажем dht11 DHT2;

И после этого везде, где у вас второй датчик - поменяйте DHT на DHT2. Только внимательно, найдите все вызовы этого класса и четко разберитесь, где у вас первый датчик, а где второй.

kalapanga
Offline
Зарегистрирован: 23.10.2016

b707 пишет:

И после этого везде, где у вас второй датчик - поменяйте DHT на DHT2. Только внимательно, найдите все вызовы этого класса и четко разберитесь, где у вас первый датчик, а где второй.

Хуже от этого точно не должно быть. Хотя формально почему бы и как есть не работать? В используемой библиотеке получается, что объект DHT к конкретному пину не привязан, а читает данные с того, с какого попросят.

Автору бы ещё результат функции read проверить. Может он по каким-то причинам не всегда Ок?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Попробуйте это в отдельные функции оформить и из лупа вызывать,
что-то не нравится мне (дилетанту) ваша конструкция

{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); 
} 

 

kainda
Offline
Зарегистрирован: 09.02.2017

я чуть по другому сделал, но принцип тот же.

ура... заработало, как сказал b707 так и сделал.

датчик отключеный показывает по нулям, подключеный показывает температуру и влажность. и наоборот. оба тоже показывают и реагируют на принудительную темпратуру по разному.

всем спасибо, тема закрыта.

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

kainda пишет:

датчик отключеный показывает по нулям, подключеный показывает температуру и влажность. и наоборот. оба тоже показывают и реагируют на принудительную темпратуру по разному.

В Вашем исходном варианте температура с обоих датчиков хранится в одном и том же поле. Прочитали данные с одного датчика - запомнили. Читаем со второго - ой, не получилось. Поле температуры при этом библиотекой не очищается, по-видимому. Там оставлся результат прошлого измерения. Вот Вы нулей и не видели. Можно было это контролировать самому и если результат функции read() не Ок, то выводить на экран 0. Но с двумя переменными - более привычный вариант исполнения.

kainda
Offline
Зарегистрирован: 09.02.2017

спасибо, на будущее учту. этот скетч пока учебный тестовый.