Можно ли создать задержку длительностью 5 секунд в программе прерывания?
void buttonPressed()
{
if(ledOn)
{
ledOn = false;
digitalWrite(13,LOW);
}else
{
ledOn = true;
digitalWrite(13,HIGH);
}
vout=analogRead(sensor);
vout=(vout*500)/1023;
tempc=vout; // Сохранение значения в градусах Цельсия
tempf=(vout*1.8)+32; // Преобразование в градусы Фаренгейта
lcd.setCursor(0,0);
lcd.print("ROOM TEMPERATURE");
lcd.setCursor(0,1);
lcd.print("C = ");
lcd.print(tempc);
lcd.print(" F = ");
lcd.print(tempf);
Serial.print("f ");
Serial.print(tempf);
}
Вот код прерывания, и я хочу отслеживать значение датчика примерно 5 секунд.
@Peouse Dutta, 👍2
1 ответ
Лучший ответ:
▲ 4
Для этого вам не нужны прерывания. Основной цикл нужен только для проверки переключателя, например.
void loop ()
{
if (digitalRead (button) == HIGH) // предполагаем, что LOW означает нажатие
return;
// считываем показания термопары здесь
// отобразить результаты
delay (5000);
}
Я хочу вывести значение термистора на ЖК-дисплей с помощью прерываний и хочу, чтобы значение сохранялось около 5 секунд
Вы неправильно используете прерывания в своей попытке. См. мою страницу о прерываниях. Вам просто не следует пытаться печатать или задерживать вывод внутри процедуры прерывания. Максимум, что вам следует сделать, — это определить нажатие кнопки:
volatile bool switchIsPressed = false;
// Процедура обслуживания прерываний (ISR)
void buttonPressed()
{
switchIsPressed = true;
} // конец ISR buttonPressed
Теперь в основном цикле вы определяете нажатие кнопки и снимаете показания. Если вам нужно что-то ещё, «запомните» время, когда отображалось значение, например:
unsigned long whenTemperatureDisplayed = 0;
void loop ()
{
if (switchIsPressed && whenTemperatureDisplayed == 0)
{
// читать ...
// отображение показаний ...
whenTemperatureDisplayed = millis (); // когда мы отобразили показания
switchIsPressed = false; // готово к следующему разу
} // конец, если переключатель был нажат
if (whenTemperatureDisplayed != 0 &&
millis () - whenTemperatureDisplayed >= 5000) // прошло 5 секунд
{
// остановить отображение показаний ...
whenTemperatureDisplayed = 0;
} // конец, если время истекло
// сделать здесь другие вещи
} // конец цикла
,
@Nick Gammon
Смотрите также:
- Почему показания датчика температуры становятся непоследовательными при добавлении к плате дополнительного оборудования?
- Регистрация данных при просмотре меню на ЖК-экране
- Проблема стабильности кода прерываний, связанного с датчиком расхода
- проблемы с кодированием
- Печать string and integer LCD
- Как работают прерывания на Arduino Uno и аналогичных платах?
- Отправка значения с одного Arduino на другой
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?