Запуск прерываний с помощью DHT-11

Я новичок в Arduino. Я хочу написать скетч, который будет печатать сообщение, если температура поднимется выше 30 C. Вот мой скетч, подскажите пожалуйста, что с ним не так

#include "DHT.h"
#define DHTTYPE DHT11
#define dht_dpin D3

DHT dht(dht_dpin, DHTTYPE); 

void setup()
{
 Serial.begin(9600);
 }
void loop()
{
 float t = dht.readTemperature();  
 Serial.print("temp=");
 Serial.println(t);
 attachInterrupt(dht_dpin, IntCallback, CHANGE);  
}
void IntCallback()
{
  float t = dht.readTemperature();  
  if(t>30)
  {
    Serial.print("Alert");
  }
}

, 👍0

Обсуждение

удалите строки, начиная со строки с attachIterrupt до строки перед if (t > 30), @Juraj


2 ответа


1

Вы не можете использовать прерывание так, как пытаетесь. Присоединение прерывания к такому выводу приведет к тому, что прерывание будет срабатывать каждый раз, когда значение цифрового вывода изменится. DHT11 использует последовательную связь для отправки значений температуры на Arduino. Последовательная связь использует множество импульсов включения/выключения на сигнальной линии для отправки символов данных. Ваше прерывание будет срабатывать каждый раз, когда DHT11 переключает сигнальную линию.

Вам нужно прочитать температуру из DHT11 в вашем цикле, а затем добавить оператор if, который будет делать то, что вы хотите, когда температура превышает ваш порог. (Похоже, вам просто нужно избавиться от вызова AttachInterrupt() и вместо этого вызывать IntCallback() каждые пару секунд.

,

Привет. Спасибо за помощь, но я нуб в этом. Я мало что знаю о прерывании и обратном вызове. Так что, если вы не возражаете, не могли бы вы изменить эскиз для меня. Это было бы большим подспорьем., @Neeraj Chimwal


0

Вам даже не нужно прерывание.Модификация:

#include "DHT.h"
#define DHTTYPE DHT11
#define dht_dpin D3

DHT dht(dht_dpin, DHTTYPE); 

void setup()
{
 Serial.begin(9600); 
 }
void loop()
{
 float t = dht.readTemperature();  
 Serial.print("temp=");
 if(t>30)
  {
    Serial.print("Alert");
  }
}
,

Позвольте мне объяснить всю мою ситуацию. Мой проект состоит в том, чтобы создать систему GPS-слежения, а также использовать dht11 для подачи оповещения через GSM, если температура поднимается выше 30 C. Но проблема в том, что после 1-го или 2-го выхода dht11 не дает никаких показаний, он показывает «Nan» в последовательном порту. монитор. Чтобы получить еще одно показание, требуется от 28 до 30 секунд. Поэтому я подумал, что, возможно, использование Interrupt сработает. Есть какие-нибудь предложения по этому поводу??, @Neeraj Chimwal

тогда попробуйте использовать другую библиотеку для DHT11., @Vaibhav