>ich hebs jetzt mit einer schleife versucht, dass der befehl immer
>wiederholt wird. aber das klappt irgendwie nicht, dann leuchten alle
>leds
Solange Du nicht verstanden hast, dass Du zur Lösung Deines Problems im
Programm erkennen musst, wann sich der Tastenzustand von "nicht
gedrückt" auf "gedrückt" ändert, wird das nix.
Um eine solche Änderung festzustellen musst Du a) den Taster zyklisch in
einem kleinen Zeitintervall, z. B. alle 10 ms, abfragen, und b) Dir
immer den vorherigen Tastenzustand merken. Das erlaubt Dir, den
vorherigen mit dem aktuellen Zustand zu vergleichen. Bei "11", d. h. der
vorherige Zustand ist "1" und der aktuelle auch "1", dann ist die Taste
unverändert "up", bei "00" ist sie unverändert "down", bei "10" wurde
sie gerade gedrückt, und bei "01" gerade losgelassen. Dich interessiert
der Fall "10", darauf musst Du mit "IF" prüfen. Tritt der 10-Fall ein,
z. B. 7.28 Sekunden nach dem Start des Programms, schaltest Du die
LED-Kette eins weiter, und in allen anderen drei Fällen tust Du nichts.
Nochmal: Nur mit der Information über den aktuellen Tastenzustand kannst
Du dieses Problem nicht lösen, denn während die Taste "up" ist, kann
jede LED eingeschaltet sein, und bei "down" genauso. Du brauchst
mehr, nämlich die Information über die Änderung des Tastenzustands.
Das zyklische Abfragen kannst Du mit einer Delayschleife
bewerkstelligen, oder (besser) über einen Timer. Als Zeitintervall geht
alles von ca. 5 ms bis 50 ms. Wählst Du es noch größer, wirst Du
zunehmend eine leichte Verzögerung zwischen dem Druck auf die Taste und
dem Weiterschalten der LEDs spüren (ausprobieren!).
Gleich wird hier übrigens irgendein schlauer Mensch darauf hinweisen,
dass man dieses Problem auch mit einem PinChange-Interrupt lösen kann.
Stimmt. Aber man kann es eben auch ohne PC-Interrupt lösen, und das
oft besser (Stichwort Entprellung).