Hallo,
dein code scheint mir sehr kompliziert. Du brauchst doch nur 2 Dinge 1. Erfassung ob der Schalter gedrückt wurde und zweitens eine Zählvariable bis 15 bzw. 16 zu inkremenntieren. Das einlesen kannst du mit der bounce-Libary machen, da hast du gleich eine Entprellung;
http://www.arduino.cc/playground/Code/Bounce
Wenn der Taster gedrückt ist zählst du einfach den counter um eins hoch und setzt die Ausgangspins. Vorher fragst du noch kurz ab ob der counter schon bei 16 angelangt ist und wenn ja fängst du von vorne an (counter=0).
Das Setzen der Ausgangspins geht sicher noch wesentlich eleganter (eigentlich braucht man immer nur zwei Pins zu schreiben), da ist deiner Fantasie keine grenzen gesetzt.
// 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 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();
// Hochzählen des counters beim Tastendruck
if ( schalterStatus == HIGH)
{
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);
}
}
}
}