Запуск прерываний с помощью 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");
}
}
@Neeraj Chimwal, 👍0
Обсуждение2 ответа
Вы не можете использовать прерывание так, как пытаетесь. Присоединение прерывания к такому выводу приведет к тому, что прерывание будет срабатывать каждый раз, когда значение цифрового вывода изменится. DHT11 использует последовательную связь для отправки значений температуры на Arduino. Последовательная связь использует множество импульсов включения/выключения на сигнальной линии для отправки символов данных. Ваше прерывание будет срабатывать каждый раз, когда DHT11 переключает сигнальную линию.
Вам нужно прочитать температуру из DHT11 в вашем цикле, а затем добавить оператор if, который будет делать то, что вы хотите, когда температура превышает ваш порог. (Похоже, вам просто нужно избавиться от вызова AttachInterrupt() и вместо этого вызывать IntCallback() каждые пару секунд.
Привет. Спасибо за помощь, но я нуб в этом. Я мало что знаю о прерывании и обратном вызове. Так что, если вы не возражаете, не могли бы вы изменить эскиз для меня. Это было бы большим подспорьем., @Neeraj Chimwal
Вам даже не нужно прерывание.Модификация:
#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
- Скетч мигания ESP8266 не мигает светодиодом
- Arduino Nano, модуль часов DS3231 RTC и 4 каскадных светодиодных матричных модуля FC-16
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Асинхронные вызовы функций в скетче ардуино
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Esp8266 Vin контакт
- Сокращение времени считывания показаний датчиков температуры DS18B20.
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
удалите строки, начиная со строки с
attachIterrupt
до строки передif (t > 30)
, @Juraj