PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Counter für sog. "Skinner-Box"



eIdea
01.10.2006, 17:30
Moin Jungs!
Ich steh grad vor einem kleinen Problem und ich komme ienfach nicht auf die (wahrscheinlich zu triviale) Lösung.
Ich möchte auf einem LCD die Anzahl von Tastendrücken zählen (LCD funktioniert).
Allerdings wird momentan so lange weiter gezählt, wie der Taster gedrückt wird, und nicht pro Tastensruck Einmal.
Ich hoffe, ihr versteht, was ich meine...
Und das mit dem Entprellen bekomm ich auch nicht hin

Hier mein Jetziger Code:


$regfile = "2313def.dat"
$crystal = 8000000

Config Pind.6 = Input
Taster Alias Pind.6
Dim Ist As Integer
Ist = 0
Cursor Off
Cls
Do
If Taster = 1 Then
Ist = Ist + 1
Locate 1,1
Lcd "Ist :" ; Ist
End If
Loop
End


Vielen Danke!

PS: Skinner-Box: http://de.wikipedia.org/wiki/Skinner-Box O:)

PicNick
01.10.2006, 18:05
Ganz anspruchslos kannst du das machen, indem du nach =1 auf =0 wartest.



Do
If Taster = 1 Then
Ist = Ist + 1
Locate 1,1
Lcd "Ist :" ; Ist

DO
LOOP UNTIL Taster = 0 'warten auf loslassen

End If
Loop
End


Wie gesagt, anspruchslos.

bertl100
01.10.2006, 18:44
entprellen kannst mit debounce pinx.x

eIdea
01.10.2006, 19:46
Jap, klappt alles wunderbar!
Taster ist entprellt, Zählern tuts auch - Vielen Dank!

=D>

eIdea
02.10.2006, 22:02
Hab jetzt noch nen Problem mit nem 2. Taster.

Den ersten habe Folgendermaßen "angebaut"


Debounce Taster , 1 , Tasteran
[...]

Tasteran:
Do
If Taster = 1 Then

[Programmblock, der 1x bei Tasterdruck ausgeführt wird]

DO
LOOP UNTIL Taster = 0 'warten auf loslassen

End If
Loop

End


Ich habe den 2. ähnlich angeschlossen:


Debounce Taster , 1 , Tasteran
Debounce Taster1 , 1 , Tasteran1
[...]

Tasteran:
Do
If Taster = 1 Then

[Programmblock, der 1x bei Tasterdruck ausgeführt wird]

DO
LOOP UNTIL Taster = 0 'warten auf loslassen

End If
Loop

Tasteran1:
Do
If Taster1 = 1 Then

[Programmblock, der 1x bei Tasterdruck ausgeführt wird]

DO
LOOP UNTIL Taster1 = 0 'warten auf loslassen

End If
Loop

End


Aber der 2. Taster wird einfach übergangen...
(Die Namen habe ich soweit korrekt vergeben)

Nochmals vielen Dank

bertl100
02.10.2006, 22:13
Du brauchst noch eine loop über die debounce Argumente.
Die Taster sollten doch ständig abgefragt werden, sonst läuft er einfach durch.

eIdea
02.10.2006, 22:22
Hat nicht wiirklich geklappt.. aber du hast mcih auf ne Idee gebracht:
Ich habe vo den Debounce-Block nen Label gesetzt. Nach ausführen des Taster-Befehls gehts zurück zum Entprell-Label ;-)

rolfw20
08.10.2006, 15:50
Hi eIdea,

wenn Du den Debounce Befehl benutzt brauchst Du nicht darauf abzufragen ob der Pin wieder 0 ist. Sonst hängt Dein Prog. an dieser Stelle fest bis Du den Taster wieder loslässt.


Gruß
Rolf

eIdea
12.10.2006, 15:27
Vielen Dank für den Hinweis, aber das ist nciht Schlimm, da daduch ja auch jede weitere Eingabe gesperrt ist, wenn ein Taster gedrückt wird, ist schon ok so ;-)