Как запустить функцию, обнаружив изменение напряжения?
#define monitor_pin 14
void setup()
{
pinMode(monitor_pin , INPUT);
}
void loop()
{
unsigned long d1 = pulseIn(14, HIGH);
if (d1>0){//триггерная функция}
}
Я знаю, что есть функция pulseIn(), но она не решает моей проблемы. Я просто хочу запустить функцию при изменении напряжения с НИЗКОГО на ВЫСОКОЕ/ВЫСОКОЕ на НИЗКОЕ. pulseIn() должен ждать, пока напряжение вернется к исходному уровню, что в моем случае превысит 3 минуты и вызовет тайм-аут.
Как я могу обнаружить изменение напряжения, отличное от pulseIn()?
@Jess, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 3
Вы можете сохранить предыдущее состояние вывода, а затем активировать функцию, когда текущее состояние отличается от предыдущего:
#define monitor_pin 14
int previous_state;
void setup()
{
pinMode(monitor_pin , INPUT);
previous_state = digitalRead(monitor_pin); // Инициализировать предыдущее состояние с начальным чтением вывода
}
void loop()
{
int current_state = digitalRead(monitor_pin);
if(current_state != previous_state){
// Выполните ваш код здесь
previous_state = current_state; // обновить предыдущее состояние
}
}
,
@chrisl
Смотрите также:
- Чтение частоты ввода в цифровых выводах
- Датчики Lolin NodeMCU V3 и 5V
- Пороговые напряжения цифрового ввода-вывода для ATmega32u4
- Преобразование из 3 вольт в 5В
- Как рассчитать требуемую силу тока нескольких двигателей?
- нужно не менее 5 вольт, но 3,7 литий-полимерный аккумулятор не обеспечивает достаточного напряжения
- 3,3 В от розетки 5,0 В
- Как построить регулятор мощности, управляемый микроконтроллером?
Длина импульса вас вообще не интересует?, @timemage
@timemage да, мне вообще не нужна длина импульса., @Jess