PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Matrix-Taster zwischenspeichern (Problem gelöst)



Bloodyben
16.09.2008, 13:40
Hallo zusammen,
ich habe das RN-Control Board und möchte später so eine 3x4 Matrix Tastatur anklemmen. Jetzt gibt es ja für das Board den Code für die Tasterabfrage:


Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)

If Ws < 1010 Then
Select Case Ws

Case 410 To 450
Tastenabfrage = 1

Case 340 To 380
Tastenabfrage = 2

Case 265 To 305
Tastenabfrage = 3

Case 180 To 220
Tastenabfrage = 4

Case 100 To 130
Tastenabfrage = 5

End Select

End If
End Function


Wie schaffe ich es nun, in einem Sub, mehrere male hintereinander die Tasten abzufragen. Also zum Beispiel wenn ich Taster 2 dann 1 und dann 3 drücke, dass ich in einer Variable 213 stehen habe? Am Ende möchte ich das mit der # bestätigen. Für das RN-Control könnte man erstmal die Taste 5 dafür nutzen!

Google und die Boardsuche habe ich bemüht, aber ich glaub mir fehlt der richtige Suchbegriff!

Freu mich auf antworten!

Benjamin

Jaecko
16.09.2008, 13:47
Hm evtl so:

StoreString ist ein String.

So "speichern":


StoreString = StoreString + Str(Tastenabfrage)
Tastenabfrage = 0


Und evtl so auslesen:


DIM laenge as byte
DIM Taste as String * 2
laenge = LEN(Storestring)
IF laenge > 0 THEN
Taste = LEFT(StoreString, 1)
ENDIF


Wär mal eine der Möglichkeiten.

Bloodyben
16.09.2008, 13:48
wow das ging aber schnell ;-)

hmm mit einem String kann man aber nicht rechnen oder?

Jaecko
16.09.2008, 13:49
Naja, kommt drauf an, was man unter "rechnen" versteht.
Musst halt den Wert dann zuvor umwandeln:

TasteAlsByte = val(TasteAlsString)


Nachtrag: Noch was vergessen: nachdem du eine Taste ausgelesen hast, muss die natürlich auch vom Speicherstring abgezogen werden:

StoreString = MID(StoreString, 2)

Bloodyben
16.09.2008, 13:56
damit muss ich zuhause mal rumprobieren. mein ziel ist es eine zahl (z.B. 150000) aus dem EEPROM zu lesen, zu dieser 213 addieren (mit hilfe der Taster eingegeben) und anschließend das ganze wieder zurück ins eeprom. Das mit dem lesen und schreiben ist kein problem. es mangelt nur an dem "auslesen + zusammensetzen"

Offtopic PS: Bei deiner Homepage geht der obere link nicht, also wenn man oben auf die überschrift (cihome) klickt.

Jaecko
16.09.2008, 13:58
Meinst du das grosse "CIHome" über "Aktualisieren"? Kann nicht gehen, das ist kein Link; das ist schon die oberste Seite. Wenn du auf "Home" drückst, kommst du also immer zu dieser Seite zurück.

Bloodyben
16.09.2008, 14:07
@Jaecko: hast ne PN

gibt es denn noch eine andere möglichkeit? werde trotzdem nachher mal die oben genannte versuchen!

StevieL
16.09.2008, 17:00
Hallo Benjamin,

ich würde das Ergebnis der Tastenabfrage zwischenspeichern und dann nach Betätigung der #-Taste weiterverarbeiten.

Wenn zwischendrin eine weitere Taste gedrückt wird (außer #), multiplizierst du das bisherige Ergebnis mit 10 und addierst den neuen Wert dazu. Die Variable muss natürlich groß genug dimensioniert sein. Mit dem Wert kannst du dann auch weiterrechnen.

Bloodyben
18.09.2008, 10:58
Hey StevieL,
ich hab das gerade mal so eingegeben und scheint super zu funktionieren. Falls jemand nochmal das Problem hat hier mal der Code


Dim X As Byte
Dim y as long
Y = 0
While x <> 5
Y = y *10
Input "Zahl eingeben: " , X
Y = Y + X
Wend
Y = Y / 10
Print "X ist: " ; x
Print "Y ist: " ; y
end


speichert solange zahlen vom terminal (rs232) bis die 5 gedrückt wird!
Edit: Habe noch Y = Y/10 ergänzt, damit die eingegebene 5 (was später die # sein soll) nicht mit reingeschrieben wird

Wenn jemand Zeit hätte, könnte er mir vielleicht erklären, wieso das funktioniert? Warum *10? Ich möchte das ja nicht nur Stumpf abschreiben sondern was lernen ;-)

StevieL
18.09.2008, 16:03
Hallo Benjamin,

ist ja eigentlich ganz einfach. Wenn mehr als eine Taste gedrückt wird, wird die bisherige Einerstelle zur Zehnerstelle. Das macht man einfach damit, dass man die Einerstelle mit 10 multipliziert. Die bisherige Zahl rutscht somit eine Stelle nach links. Da wird dann das Ergebnis der neuen Taste dazugezählt. Bei erneutem Tastendruck wird die Zehnerstelle zur Hunderterstelle und die Einerstelle zur Zehnerstelle. Auch das passiert wieder, indem du mit 10 multiplizierst. Jetzt rutschen beide Zahlen wieder eins nach links. Und so kannst du das beliebig weitertreiben (so lange es der Speicherplatz der Variablen erlaubt).