Hi,
ich habe mir vor etwa einem Jahr einen LED-Cube nach einer Anleitung
gebastelt, wobei ich damals aber noch keine Ahnung von Mikrocontrollern
hatte - der Code war bei der Anleitung dabei. Mittlerweile habe ich mich
etwas in die Welt der Mikrocontroller eingearbeitet und verstehe
immerhin den bestehenden Code. Jetzt wollte ich ihn so abändern, dass
ich per Knopfdruck immer einen Effekt weiterschalten kann. Also einen
Taster an den INT1 gehängt mit folgendem Code:
1 | volatile unsigned char current_effect = 0;
|
2 | volatile unsigned char effects_mode = 2;
|
3 |
|
4 | ISR(INT1_vect)
|
5 | {
|
6 | if (effects_mode == 2) {
|
7 | delay_ms(1000);
|
8 | ++current_effect;
|
9 | if (current_effect >= EFFECTS_TOTAL) current_effect = 0;
|
10 | }
|
11 | }
|
Vorher kommt natürlich noch beim Initialisieren:
1 | GICR |= (1 << INT1);
|
2 | MCUCR |= (1 << ISC11);
|
delay_ms() hat zwar ms im Namen, sind aber keine Millisekunden. Wurde
aber vom Autor des Codes aus mir unbekannten Gründen so genannt. 1000
entspricht eher 200 ms. Die Funktion rufe ich natürlich auf, weil der
Taster wie blöd prellt. Habe auch noch ein kleines RC-Glied (1kR, 10nF)
zwischen Taster und Atmega gesetzt.
Das Problem ist jetzt, dass current_effect immer um 2 erhöht wird, statt
um 1. Ich denke nicht, dass es an Schwingvorgängen am Taster liegt, da
ich auch schon delay_ms(5000) ausprobiert habe mit demselben Ergebnis.
Ich hoffe ihr könnt mir da irgendwie weiterhelfen. Falls das zu wenig
Code ist, einfach sagen - es ist genug für alle da. ;-)
Grüße,
Marc