Tasten an einem ADCPin, Versuch zu entprellen
Hallo Leute,
ich versuche grade drei Tasten die ich an einem ADC pin eines Tiny 85
angehägt habe zu entprellen.
(Tastenwert) wird duch eine ADKanallesenfunktion bestimmt und liegt
zwischen 0 und 5
zuerst habe ich die 3 Zustände in einer funktion definiert
uint8_t Tastenabfrage(void){
uint8_t Taste;
Taste = 0;
if (Tastenwert > 4) Taste=1; //Werte grösser als 4, schalter mit
einem KOhm wurde gedrückt
else if (Tastenwert > 2) Taste=10;//Werte grösser als 2, schalter mit
10 KOhm wurde gedrückt
else if (Tastenwert > 1) Taste=33;//Werte grösser als 1, schalter mit
33 KOhm wurde gedrückt
else Taste = 0;
return Taste;
}
danach habe ich versucht die Tasten so zu entprellen sodass ein
Tastendruck was ein Wert zwischen 0 und 5 erbit nicht erkannt wird,
er wird erst dann erkannt wenn der Wert zweimal rauskommt, und dann
wird 10 ms gewartet und letzendlich werden Taste als definiert.
Das Prozessflag definiert mehrere Zustände. Für Jeden Zustand wird ein
Bit reserviert in einem 8 Bit.
Ich habe das folgende Code geschrieben.
void TastenEntprellung(){
if((Tastenabfrage()==1)||(Tastenabfrage()==10)||(T astenabfrage()==33)){
// wenn nur einmal gedrückt (KeineTaste)
Anreiz=KeineTaste;
if(Tastenabfrage()==1){// zweimal erkannt TasteEins
_delay_ms(10);
Anreiz=TasteEins;
Prozessflag|= Benutzeroberflaeche;
}
if(Tastenabfrage()==10){// zweimal erkannt TasteZwei
_delay_ms(10);
Anreiz=TasteZwei;
Prozessflag|=Benutzeroberflaeche;
}
if(Tastenabfrage()==33){// zweimal erkannt TasteDrei
_delay_ms(10);
Anreiz=TasteDrei;
Prozessflag|=Benutzeroberflaeche;
}
}
}
Kann mir jemand sagen ob es richtig ist und ob es
Verbesserungsvorschläge gibt.
Mein bessten Dank