Dein Problem ist nicht die Erkennung des Signals, dein problem ist, dass du zu langsam für den uC bist. In meinem Code wird der Taster schon softwaremäßig entprellt (5ms). Eine weitere Verzögerung ist im Code noch nicht enthalten. D.h. der Code braucht wahrscheinlich weniger als 10ms zum durchlaufen. Wenn du den Taster 0,5s drückst läuft die Schleife mindestens 50 mal durch -> LEDs werden durchgejagt. Wenn es langsamer gehen soll, füg ein delay am Ende des if-Blocks ein. Wenn bei jeder steigenden Flanke eine LED geschaltet werden soll musst du halt den Flankenwechsel und nicht den Schalterzustand abfragen
// This code turns a led on/off through a debounced switch
#include <Bounce.h>
// This code turns a led on/off through a debounced button
// Build the circuit indicated here: http://arduino.cc/en/Tutorial/Button
#define BUTTON 8 //schalterPin
int ledPin[] = {30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45};
int i;
int schalterStatus;
int oldschalterStatus = LOW;
int counter=0;
// Instantiate a Bounce object with a 5 millisecond debounce time
Bounce bouncer = Bounce( BUTTON,5 );
void setup() {
pinMode(BUTTON,INPUT);
for (i=0; i<16;i++)
{
pinMode(ledPin[i],OUTPUT);
}
//erste LED soll leuchten beim einschalten
digitalWrite(30,HIGH);
}
void loop() {
// Update the debouncer
bouncer.update ( );
// Get the update value
schalterStatus = bouncer.read();
// Abfragen des Flankenwechsels
if ( schalterStatus == HIGH && oldschalterStatus == LOW)
{
counter = counter + 1;
// Rücksetzen beim erreichen der letzten led
if(counter>15)
{
counter=0;
}
//Pins Ausschalten
for (i=0; i<counter; i++)
{
digitalWrite(ledPin[i],LOW);
}
// Pin einschalten
digitalWrite(ledPin[counter],HIGH);
//Pins ausschalten
for (i=counter+1; i<16; i++)
{
digitalWrite(ledPin[i],LOW);
}
}
oldschalterStatus=schalterStatus;
}
Wenn beim Drücken mehrere LEDs durchlaufen musst du die Entprellzeit hochsetzen [Bounce bouncer = Bounce( BUTTON,5); <-Die 5 größer machen]. Das ist vom Taster abhängig.