Guten Tag zusammen,
Hab ein kleines Problem:
Und zwar wollte ich die Reihenfolge von tastern in einem array
abspeichern und nach 5 eingaben diese auf dem LCD wieder ausgeben. wenn
ich nun das Programm starte wird zwar "Taste Nr. 0" angezeigt aber wenn
ich auf den tastern rum drücke passiert gar nichts???
kann mir da vll jemand behilflich sein?
Hier mein Code:
naja durch die for-schleife werden die Taster ja für jeden Teil des
Arrays ein mal abgefragt, also insgesamt 5 mal...
Und das Ganze Programm soll erst einmal nur ein mal durchlaufen
Blöde Frage: Wo werden die Ports initialisiert, also auf Input
geschaltet, etc.?
Ich kenne Deine Hardware ja nicht, aber das würde ich irgendwo ganz am
Anfang erwarten.
long_delay(20);
und du denkst du kannst innerhalb von 20 Millisekunden einen Taster
drücken und wieder loslassen?
Denn: Wenn du einen Taster drückst, wird das zwar registriert, aber ~20
Millisekunden später kommt die nächste Abfrage, ob eine Taste gedrückt
ist.
if((!(taster_b)) && (!(taster_a)) && (!(taster_c)))
Probier mal alle 3 Taster gleichzeitig drücken :-)
Nö, entweder ich bin übermüdet, oder er prüft alle 20ms ob alle Taster
losgelassen sind, bevor es weiter geht. Der Busy-Wait ist zwar sinnlos
aber m.E. harmlos.
Korrektur: Der Busy-Wait will wohl entprellen, damit nicht sinnlos. Aber
dann müsste eigentlich nochmal im "Alle-Tasten losgelassen
erkannt"-Zweig gewartet werden.
Stefan Hennig schrieb:
> Nö, entweder ich bin übermüdet, oder er prüft alle 20ms ob alle Taster> losgelassen sind, bevor es weiter geht.
Da könnte was drann sein.
Die vielen ! machen mich ganz konfus :-)
TO:
Was ist der genau Zweck der Funktion kein_Taster()?
Worauf soll die warten?
a) bis eine Taste gedrückt wird
b) bis alle Tasten losgelassen wurden
-> PeDa Entprellung zur Tastenabfrage benutzen. Da stellt sich dieses
Problem gleich gar nicht :-)
die Funktion kein_taster(); habe ich als ganz unprofesionelle
entprellung genutzt. ^^
In diesem prog wollte ich erst mal ausprobieren wie das mit den arrays
so am besten funzt der eigentliche nutzen soll später sein, dass
messwerte in arrays geschrieben werden. also in etwa so:
1
array1[counter]=messwert;
2
array2[counter]=zeitpunkt;
3
counter++;
das ganze soll dann im eeprom abgepeichert werden:
Wie gesagt: Ich sehe keinen Grund in der Software, warum es überhaupt
nicht gehen sollte, vorausgesetzt:
- Du verwendest den richtigen Port
- Die Ports sind nach einem Reset korrekt initialisiert (ich sehe nicht,
dass Du das in Deinem Code machen würdest)
- Die Taster schalten in die richtige Richtung. Ich denke, in Deinem
Code bedeutet ein gedrückter Taster ein Portbit, das auf 0 gezogen wird.
- Das würde bedeuten, dass Du irgendwo einen Pullupwiderstand verbaut
hast, oder den Port entsprechend konfiguriert hast (s.o.)
Prüfe das doch mal.
Grüße,
Stefan
Karl heinz Buchegger schrieb:
> -> PeDa Entprellung zur Tastenabfrage benutzen. Da stellt sich dieses> Problem gleich gar nicht :-)
Jawoll, so isses!!!
Sie erschlägt so nebenbei mindestens 10 andere häufige Probleme.
Vor allem gestattet sie einen einfachen Programmablauf ohne haufenweise
Merkvariablen und Verzweigungen.
Peter
oh mann...
an sowas primitivem wie nem Widerstand gescheitert Kopf gegen Wand
thx Stefan Hennig.
und auch allen anderen.
noch ne frage:
wenn ich mehrere variablen in den EEprom schreibe und dann wieder lesen
will. Stimmt das dann so:
Also muss in dieser Variablen ein Wert zwischen 1 und (je nach größedes
EEproms) stehen?
wird die Adresse nicgt automatisch bestimmt? Muss ich mir nochmal
anschaun ^^