Schwachströmler schrieb:
> Genau bei dem häng ich gerade.
>
> Wie müsste das aussehen, ohne debounce?
Nicht 'ohne'
Du brauchst einen debounce
d.h. in manchen Fällen brauchst du ihn nicht.
Man muss unterscheiden zwischen
* etwas soll passieren (zb eine LED soll leuchten)
solange eine Taste gedrückt wird
* etwas soll passieren, wenn eine Taste gedrückt wird.
Der Unterschied ist wie die Fensterheber in einem Auto.
In manchen Autos wird das Fenster bewegt, solange du eine Taste drückst.
Drückst du, fährt die Fensterscheibe. Lässt du die Taste los, hört auch
die Bewegung auf.
Der andere Fall ist:
Du drückst eine Taste und eine LED leuchtet auf. Du lässt die Taste los
und nichts weiter passiert. Drückst du erneut auf die Taste so geht die
LED wieder aus. Lässt du los passiert nichts weiter.
Der erste Fall ist der einfachere. Man muss dort auch nichts entprellen
1 | int main()
|
2 | {
|
3 | ....
|
4 |
|
5 | while( 1 ) {
|
6 |
|
7 | if( !( PORTB & ( 1 << TASTER_PIN ) ) )
|
8 | schalte LED ein
|
9 | else
|
10 | schalte LED aus
|
11 | }
|
12 | }
|
hier steht klipp und klar: Taste gedrückt -> Led ein
Taste nicht gedrückt -> Led aus
und damit ergibt sich dann der Fall, dass die LED genau dann und nur
dann leuchtet, wenn die Taste gedrückt ist. Dazu muss man auch nichts
entprellen
Der andere Fall ist etwas komplizierter. Dazu muss man entprellen. Und
am einfachsten nimmt man dazu zb die 'Komfortlösung' auf der weiter oben
angegebenen Wiki-Seite