Прошу помощи с DTH22

shAAde

✩✩✩✩✩✩✩
24 Окт 2024
3
0
Оформи код соответствующим тэгом, см. Правила
Прошу помощи с кодом:
delay - завешивает программу и кнопка включения (просто реле включаю) начинает не сразу срабатывать, но таймер на считывания данных все же нужен, чтобы не считывал постоянно.
и еще странные показания .... может датчик глючит конечно.....

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
int knopka1=0;

#define DHTPIN 6 //пин для получения сигнала от датчика DHT11
// Раскомментировать тип датчика, который используется
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
pinMode(7, OUTPUT);
Serial.begin(9600);
dht.begin();
}
void loop()
{
if(digitalRead(14)==HIGH&&knopka1==0)//если кнопка нажата
// и перемення knopka1 равна 0 , то ...
{
digitalWrite(7,!digitalRead(7));
knopka1=1;
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от "дребезга" 100%
}
if(digitalRead(14)==LOW&&knopka1==1)//если кнопка НЕ нажата
//и переменная knopka1 равна - 1 ,то ...
{
knopka1=0;//обнуляем переменную knopka1
}
{
// Задержка перед измерениями
delay(2000); //Это завешиват всю программу, но измерять нужно все же с интервалом, как?
float h = dht.readHumidity(); //Измеряем влажность
float t = dht.readTemperature(); //Измеряем температуру
if (isnan(h) || isnan(t)) // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
{
Serial.println("Ошибка считывания");
return;
}
Serial.print("Влажность: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Температура: ");
Serial.print(t);
Serial.println(" *C "); //Вывод показателей на экран
}
}
 

Вложения

poty

★★★★★★✩
19 Фев 2020
3,207
932
@shAAde, используйте millis вместо delay. Примеров - масса и на этом форуме, и в обучающих программах на сайте Гайвера, и в Интернете.
 

shAAde

✩✩✩✩✩✩✩
24 Окт 2024
3
0
@poty, пробовал, тяжко понять куда именно и как ее применять. очень прошу показать в моем коде....
 

VAF

✩✩✩✩✩✩✩
15 Июл 2023
47
0
Москва
Перед лууп вставляете int last_read=millis(), period_read=2000; Это параметры организации цикла.
На месте delay
if(millis()-last_read>period_read){ last_read=millis(); что вам надо все сюда ... }
Если работа модуля очеь длительная, то тип last_read надо изменить.