Как запустить функцию, обнаружив изменение напряжения?

#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()?

, 👍0

Обсуждение

Длина импульса вас вообще не интересует?, @timemage

@timemage да, мне вообще не нужна длина импульса., @Jess


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; // обновить предыдущее состояние
  }
}
,