So wird das nichts.
Statt den Taster an einen Interrupt-Pin zu hängen, verwendest Du besser
einen Timer-Interrupt, der alle paar ms ALLE Taster abfragt, das
Entprellen übernimmt und die Tastendrücke entweder in einer volatile
Variable oder besser noch in einem Fifo an main() weitergibt.
1 | char myKey = getKey(); // read key from fifo
|
2 |
|
3 | switch(myKey)
|
4 | {
|
5 | case keyEnterMenuPressed:
|
6 | menuMarker = 1;
|
7 | ... / do your stuff to enter menu
|
8 | break;
|
9 |
|
10 | case keyEnterMenuReleased:
|
11 | menuMarker = 0;
|
12 | ... // do your stuff to exit menu
|
13 | break;
|
14 |
|
15 | case keyChooseVariablePressed:
|
16 | if (menuMarker == 1)
|
17 | {
|
18 | ....
|
19 | }
|
20 | break;
|
21 |
|
22 | case keyzeitVerstellenPressed:
|
23 | if (menuMarker == 1)
|
24 | {
|
25 | ....
|
26 | }
|
27 | break;
|
28 | }
|
Mit einer Timer-ISR kannst Du bei Bedarf nicht nur keyPressed sondern
auch keyReleased Signale auswerten und an main() weiterleiten.
Vorteile:
* Du wertest Deine Tasten an EINER Stelle aus und nicht verstreut im
Programm. Das erleichtert das Testen (was ist das?).
* Alle Tasten werden entprellt.
* Wenn main() mal ein paar ms beschäftigt ist (Graphik-Ausgabe, etc.),
kann trotzdem kein tastendruck verlorengehen.
* ...
Wie man Tasten im Timer-ISR entprellt, findest Du hier an mehreren
Stellen.
Gruß, Stefan