Detectar si se cumple una acción dentro de un rango de tiempo

No esta perfecto pero va en la dirección correcta

const byte boton = 5;

byte estadoboton;
byte estadoAntBoton;
byte Tguardado = false;

int contador = 0;
unsigned long tiempoPar, 
              tiempoImpar, 
              tiempoDiff,
              tiempo;
bool presento = false;


void setup() {
  pinMode(boton, INPUT);
  Serial.begin(9600);
  Serial.println ("Inicio");
}

void loop() {
    
  estadoboton = digitalRead(boton);
  if (estadoboton != estadoAntBoton)  {
    if (estadoboton== LOW) {
      contador++;
      Serial.print("Contador : " + String(contador));
      presento = true;
    }
  }
  estadoAntBoton = estadoboton;
  if (presento) {
      if (contador % 2 == 0)   {
        tiempoPar = millis();
        Serial.println("=>  par =>");
        Tguardado =true;
        
      }
      else {
        Serial.print("=>impar =>");
        tiempoImpar = millis();
        Tguardado = false;
      }
  
      if (!Tguardado)  {
        tiempoDiff = tiempoImpar - tiempoPar;
        Serial.println(" Tiempo : " + String(tiempoDiff));
        tiempo = millis();
      }
  }
  presento = false;
}

image

Yo quitaría el

if (estadoboton== LOW) {

que permite que ocurran cosas raras como tiempos 0 o muy pequeños.
Lo he quitado y lo hace igual, asi que es un punto a analizar.

1 Like