Блин! а не может это быть из-за использования библиотеки #include "stDHT.h"????? может она "пашет" только на delay? или имеет какие-то особенности?
Вообще судя по тому, что температура и влажность на единицу изменились все работает. Просто надо воздействовать на датчики.
Serg, я и так "воздействую" ... на ОДИН датчик.... но вот что происходит... Воздействуя на первый, второй тоже показывает увеличение влажности причем показания равны! Воздействуя на Второй датчик - тоже САМОЕ))) Код (C++): #include <uTimerList.h> #include "stDHT.h" DHT sens(DHT22); #define MAXTIMERSCOUNT 8 //const int relPin1 = 3; //реле нагрева //const int relPin2 = 5; //реле продувки extern TTimerList TimerList; THandle hnd_dht1; // хэндл для DHT 1 THandle hnd_dht2; // хэндл для DHT 2 byte dht1 = 2; //пины датчиков byte dht2 = 4; uint8_t flag1=0; uint8_t flag2=0; void setup() { Serial.begin(57600); pinMode(dht1, INPUT); digitalWrite(dht1, HIGH); pinMode(dht2, INPUT); digitalWrite(dht2, HIGH); // pinMode(relPin1, OUTPUT); // pinMode(relPin2, OUTPUT); // pinMode(11, INPUT); THandle hnd_dht1 = TimerList.AddSeconds(readDHT1,3); // добавляем таймер, задержка между морганиями 3сек THandle hnd_dht2 = TimerList.AddSeconds(readDHT2,3); // } void readDHT1(void) // функция вызывается раз в секунду { flag1 = 1; } void readDHT2(void) // функция вызывается раз в секунду { flag2 = 1; } void loop() { if (flag1 == 1) { flag1 = 0; int t = sens.readTemperature(dht1); // чтение датчика на пине 2 int h = sens.readHumidity(dht1); // чтение датчика на пине 2 Serial.print("Влага датчика №1: "); Serial.print(sens.readHumidity(dht1)); Serial.print(" %"); Serial.print("Темпер датчика №1: "); Serial.print(sens.readTemperature(dht1)); Serial.println(" C "); } if (flag2 == 1) { flag2 = 0; int t2 = sens.readTemperature(dht2); // чтение датчика на пине 4 int h2 = sens.readHumidity(dht2); // чтение датчика на пине 4 Serial.print("Влага датчика №2: "); Serial.print(sens.readHumidity(dht2)); Serial.print(" %"); Serial.print("Темпер датчика №2: "); Serial.print(sens.readTemperature(dht2)); Serial.println(" C "); } }
попробовал первый раз сделать на "миллис" Код (C++): #include "stDHT.h" DHT sens(DHT22); int flag1=0; int flag2=0; long previosMillis = 0; long interval = 2000; long interval2 = 2000; void setup() { Serial.begin(57600); pinMode(2, INPUT); digitalWrite(2, HIGH); pinMode(4, INPUT); digitalWrite(4, HIGH); } void loop() { unsigned long currentMillis = millis(); if (currentMillis-previosMillis>interval && flag1 == 0) { previosMillis=currentMillis; flag1 = 1; if (flag1 == 1) { flag2 = 0; int t = sens.readTemperature(2); // чтение датчика на пине 2 int h = sens.readHumidity(2); // чтение датчика на пине 2 Serial.print("Влага датчика №1: "); Serial.print(sens.readHumidity(2)); Serial.print(" %"); Serial.print("Темпер датчика №1: "); Serial.print(sens.readTemperature(2)); Serial.println(" C "); } } if (currentMillis-previosMillis>interval2 && flag2 == 0) { previosMillis=currentMillis; flag2 = 1; if (flag2 == 1) { flag1 = 0; int t2 = sens.readTemperature(4); // чтение датчика на пине 4 int h2 = sens.readHumidity(4); // чтение датчика на пине 4 Serial.print("Влага датчика №2: "); Serial.print(sens.readHumidity(4)); Serial.print(" %"); Serial.print("Темпер датчика №2: "); Serial.print(sens.readTemperature(4)); Serial.println(" C "); } } } Получилось изощеренно))) но работает.... если уменьшаю интервал происходит тоже уравнение показаний... и из-за флажков... показания выдаются ступенчато, т.е. сначала показания первого, через 2 секунды второго и т.д.
С флагами я думаю все нормально. В порт выводится ведь. Код (C++): volatile int t2 = sens.readTemperature(4); // чтение датчика на пине 4 volatile int h2 = sens.readHumidity(4); Компилятор видит, что при инициализации переменной ей всегда присваивается одинаковое выражения, ну и не присваивает его второй раз, хотя в Вашем случае не должен бы. Еще попробуйте вынести объявления переменных t1, h1, t2, h2 в начало функции loop тогда у вас инициализация и присваение будут отдельно и компилятор не будет Вам голову морочить.
Вообще советую такие штуки выводить вместе со временеми показывать со временем вывода. Лично я здесь без бутылки (а то и трех) не смогу разобраться, какие были внешние условия, какие внутренние, что там был за код и прочее и прочее. Пиши время, когда такие штуки выкладываешь. А еще лучше с фотками. И приятней смотреть было бы По поводу delay: это бич-вариант, когда вообще дргих вариантов нет. Ардуинка тупо простаивает две секунды (а могла бы и правда что-то делать, например, скажем, вычислять среднее значение, уже круто) и ничегошечки не делает. Это не круто. Это как... Ну, попробую провести аналогию, представь, что ты ардуинка и тебя поместили в машину времени на 10 секунд. Для тебя это время прошло незаметно, а во всем мире за 10 секунд столько всегопроизошло... Короче, мой совет: избавляйся в своих программах от delay по максимуму. Он нужен только на этапе изучения платформы, при серьезных проектах он только вредит.