#include "urutils.h"
int led = 21;
int porta = 5;
int dentro = 2;
int aperto = 0;
int a0 = LOW;
DiffTimer debt;

void setup()
{
  Serial.begin(115200);
  pinMode(led, OUTPUT);
  pinMode(porta, INPUT);
  pinMode(dentro, INPUT);
  pinMode(aperto, INPUT);
}

void loop ()
{
  if (digitalRead(porta)) {// polling livello
    Serial.println("fronte di salita");
    debt.start(); // fronte mediante singleton
  }

  if (debt.get() > 50  && digitalRead(porta) == LOW) { // disarmo del timer al timeout
    debt.stop(); // disarmo del timer
    debt.reset();
    Serial.println("fronte di discesa");

    if (digitalRead(dentro))
    {
      digitalWrite(led, HIGH);
      Serial.println("il topo in gabbia");
    } else {
      Serial.println("il topo è furbo");
      digitalWrite(led, LOW);
    }
  }

  if (digitalRead(aperto) == HIGH)
  {
    waitUntilInputLow(aperto, 50);
    Serial.println("la gabbia è aperta");
    digitalWrite(led, LOW);
  }
  delay(10);
}
Loading
esp32-devkit-c-v4
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
led1:A
led1:C
sw1:1
sw1:2
sw1:3