¿Tener que presionar dos veces un interruptor de tacto?

0

He creado un circuito simple que consiste en un 4017 ic, un interruptor de tacto y un arduino. El arduino es solo para fines de rebote. Por alguna razón, tengo que presionar dos veces el interruptor para que pase la entrada.

int button = 2;
int CLK = 3;

volatile boolean lastbutton = LOW;
volatile boolean currentbutton = LOW;
volatile boolean CLKlvl = LOW;

void setup() {
  pinMode(button, INPUT);
  pinMode(CLK, OUTPUT);

}

void loop() {
  currentbutton = debounce(lastbutton);
  if (lastbutton == LOW && currentbutton == HIGH){
    CLKlvl = !CLKlvl;
  }
  lastbutton = currentbutton;

  digitalWrite(CLK, CLKlvl);

}

 boolean debounce(boolean last){
 boolean current = digitalRead(button);
 if (last != current){
   delay(5);
   current = digitalRead(button);
 }
 return current ; 
}

    
pregunta thunderbootyclap

1 respuesta

1

Cambia la salida del reloj en cada transición de BAJO a ALTO (que se produce una vez por pulsación), lo que significa que para obtener un borde de reloj activo (ascendente en el 4017), debe presionarlo dos veces.

Podrías deshacerte de esa sentencia condicional: solo tienes que enviar el botón current al botón después del debounce y debería funcionar.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas