PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zählen der ausgekösten Tasterbetätigung



DevilsChoice
16.09.2008, 23:34
Nun da ich endlich geschafft habe meine Taster unter kontrolle zu bekommen u8nd sie den Selbstest und alles andere (andere Testprogramme für Taster) ohne murren durchführen, möchte ich nun eien Zähler bauen, der es mir erlaubt das auslösen eines Tasters zu erfassen.

Im genaueren meine ich "Wird ein Taster gedrückt (im Moment egal welcher) soll der Zähler um eins ansteigen.

Ich habe auch schon was probiert nur funktioniert das nicht so wie ich es gerne hätte.

radbruch
17.09.2008, 00:24
Hallo

Bei Komplieren deines Programms erhalte ich unter anderem folgende Warnung:

temp.c:13: warning: 'n' might be used uninitialized in this function

Deshalb würde ich in der Funktion zaehler() als Ersatz für int n; folgende Zeile empfehlen:

static int n=0;

Das bewirkt, dass die Funktion die Variable nie mehr vergißt (static) und beim ersten Mal mit 0 vorbelegt wird (=0).

Einfacher geht es z.B. so:

#include "asuro.h"

int main(void)
{
unsigned char i=0;

Init();
StatusLED(RED); // Meldung Ende Init() erreicht

while(1)
{
while(PINC & (1<<PC4)); // Wird ausgeführt solange keine Taste gedrückt wird

i++; // Zähler erhöhen
if(i==5) StatusLED(GREEN); // Zählerstand anzeigen
if(i==10) StatusLED(YELLOW);
if(i==15) { StatusLED(RED); i=0; } // und rücksetzen

while(!(PINC & (1<<PC4))); // Wird ausgeführt solange eine Taste gedrückt wird
}
return(0);
}


Gruß

mic

hai1991
17.09.2008, 14:09
hallo

könnte es sein, dass es bei diesem programm zu falschen werten kommen könnte, da die taster womöglich nicht entprellt sind?

in der schule habe ich gelernt, dass beim drücken eines tasters und auch beim loslassen kurzzeitig der wert am pin zwischen 1 und 0 wechselt (es ist kurz ein kontakt, dann wieder nicht. und das etliche male)
das würde dann in diesem programm dazu führen, dass ein zu hoher wert heraus kommt.
man könnte dies umgehen, in dem man einfach beim erkennen eines gedrückten tasters einige ms wartet, und dann erst schaut, wann er wieder losgelassen wird. ebenso müsste man es beim loslassen machen.

wie gesagt bin ich mir aber nicht sicher, ob sie wirklich nicht entprellt sind