Scotch
28.02.2012, 15:52
Hallo,
ich versuche mich z. Z. mit dem Thema LCD Menue.
Hier im RN Wissen habe ich ein Besipiel gefunden http://www.rn-wissen.de/index.php/Bascom_State_Machine_Menu .
Das Beispiel (Version2) habe ich auf dem Arduino Uno mit DFRobot LCD Sheld (http://robosavvy.com/store/product_info.php/products_id/1862)
zum laufen gebracht. LCD funktioniert und die Tasten am Analogeingang funktionieren auch.
Genau so wie das blättern im Menue.
Nur mit dem Verständnis der Datentabelle und deren abfrage hapert es noch.
Wobei der Inhalt der Tabelle an sich verstanden ist.
hier mal ein Auszug wo ich nicht weiter komme.
'********* State routines ************************************************** *
'---------------------------------------------------------------
'Subroutine: Change_state
'Call from: main loop
'Purpose: Status der State Machine feststellen und ggf. Wechseln
'Result: Pointer auf State / Variable State_renew
'---------------------------------------------------------------
Change_state:
lds R8, {State}
lds R9, {State + 1}
For I = 1 To Key_buttons
Read W
If Key = Keycode(i) Then
If W <> Loadlabel(null) Then
State_renew = 1
Key = Key_null 'reset key status after get a new state of state machine (prevent influence on GOSUBs)
State = W
End If
End If
Next I
Read State_gosub 'Adresse des akt. Unterprogramms einlesen
Read Lcd_textbuffer 'read LCD text
Return
'---------------------------------------------------------------
'Subroutine: Change_state_by_sub
'Call from: subroutine
'Purpose: change state of state machine by a subbroutine
'---------------------------------------------------------------
Change_state_by_sub:
State_renew = 1
Gosub Change_state
Return
'---------------------------------------------------------------
'DATA: State Machine
'Result: Pointers auf States , Unterprogramme
' Menütexte
'Format: 1. Zeile: für jede Taste genau eine Verzeigung ADR2 (see Key_buttons=xx)
' 2. Zeile: Sprunglabel als ADR2 für ein ggf. anzuspringendes Unterprogramm
' 3. Zeile: Displaytext des akt. Status als DATA Feld
'Hinweis: wenn nichts passieren soll wird das Label NULL eingetragen
'---------------------------------------------------------------
Null:
'Null is a dummy flag for State and Gosub -> do nothing
Return
S10:
Adr2 Null : Adr2 S20 : Adr2 Null : Adr2 S11 'Key_plus|Key_minus|Key_prev|Key_next
Adr2 Null 'Subroutine for current State
Data "1 Butterfly Bascom" 'Menue Display Text
S11:
Adr2 Null : Adr2 Null : Adr2 S10 : Adr2 Null 'Key_plus|Key_minus|Key_prev|Key_next
Adr2 Null
Data "11 Rev 2"
Zu einem ist es die Tabelle an sich.
Die sieht mir aus wie normale Labes (S10: S20: ....) die ich auch bei Gosub z.b. benutze.
Woher weiß Bascom das dies eine Datentabelle ist?
Die Zeile
Adr2 Null : Adr2 S20 : Adr2 Null : Adr2 S11
sind die Sprungmarken für die Einzelnen Tasten zum anzeigen des nächsten Menuepunktes.
Muss ich der Tabelle irgendwo sagen wie viel Einträge pro Datensatz gemacht werden?
Und das auslesen will sich mir auch noch nicht so recht erschließen.
Mit Read W wird die Tabelle gelesen und mit der For Next Schleife,
werden die Daten pro Datensatz z. B. Adr2 Null : Adr2 Null : Adr2 S10 : Adr2 Null
ausgelesen aber wie wird dann die zweite und dritte Zeile ausgelesen ?
Also die Zeilen
Adr2 Null
Data "11 Rev 2
Die Bascom Hilfe zu Read und Loadlabe war auch nicht so aufschlussreich.
Vielleicht kann mir einer hier im Forum die Funktion bzw. das Arbeiten mit
Tabellen erläutern.
Gruß Ingo
ich versuche mich z. Z. mit dem Thema LCD Menue.
Hier im RN Wissen habe ich ein Besipiel gefunden http://www.rn-wissen.de/index.php/Bascom_State_Machine_Menu .
Das Beispiel (Version2) habe ich auf dem Arduino Uno mit DFRobot LCD Sheld (http://robosavvy.com/store/product_info.php/products_id/1862)
zum laufen gebracht. LCD funktioniert und die Tasten am Analogeingang funktionieren auch.
Genau so wie das blättern im Menue.
Nur mit dem Verständnis der Datentabelle und deren abfrage hapert es noch.
Wobei der Inhalt der Tabelle an sich verstanden ist.
hier mal ein Auszug wo ich nicht weiter komme.
'********* State routines ************************************************** *
'---------------------------------------------------------------
'Subroutine: Change_state
'Call from: main loop
'Purpose: Status der State Machine feststellen und ggf. Wechseln
'Result: Pointer auf State / Variable State_renew
'---------------------------------------------------------------
Change_state:
lds R8, {State}
lds R9, {State + 1}
For I = 1 To Key_buttons
Read W
If Key = Keycode(i) Then
If W <> Loadlabel(null) Then
State_renew = 1
Key = Key_null 'reset key status after get a new state of state machine (prevent influence on GOSUBs)
State = W
End If
End If
Next I
Read State_gosub 'Adresse des akt. Unterprogramms einlesen
Read Lcd_textbuffer 'read LCD text
Return
'---------------------------------------------------------------
'Subroutine: Change_state_by_sub
'Call from: subroutine
'Purpose: change state of state machine by a subbroutine
'---------------------------------------------------------------
Change_state_by_sub:
State_renew = 1
Gosub Change_state
Return
'---------------------------------------------------------------
'DATA: State Machine
'Result: Pointers auf States , Unterprogramme
' Menütexte
'Format: 1. Zeile: für jede Taste genau eine Verzeigung ADR2 (see Key_buttons=xx)
' 2. Zeile: Sprunglabel als ADR2 für ein ggf. anzuspringendes Unterprogramm
' 3. Zeile: Displaytext des akt. Status als DATA Feld
'Hinweis: wenn nichts passieren soll wird das Label NULL eingetragen
'---------------------------------------------------------------
Null:
'Null is a dummy flag for State and Gosub -> do nothing
Return
S10:
Adr2 Null : Adr2 S20 : Adr2 Null : Adr2 S11 'Key_plus|Key_minus|Key_prev|Key_next
Adr2 Null 'Subroutine for current State
Data "1 Butterfly Bascom" 'Menue Display Text
S11:
Adr2 Null : Adr2 Null : Adr2 S10 : Adr2 Null 'Key_plus|Key_minus|Key_prev|Key_next
Adr2 Null
Data "11 Rev 2"
Zu einem ist es die Tabelle an sich.
Die sieht mir aus wie normale Labes (S10: S20: ....) die ich auch bei Gosub z.b. benutze.
Woher weiß Bascom das dies eine Datentabelle ist?
Die Zeile
Adr2 Null : Adr2 S20 : Adr2 Null : Adr2 S11
sind die Sprungmarken für die Einzelnen Tasten zum anzeigen des nächsten Menuepunktes.
Muss ich der Tabelle irgendwo sagen wie viel Einträge pro Datensatz gemacht werden?
Und das auslesen will sich mir auch noch nicht so recht erschließen.
Mit Read W wird die Tabelle gelesen und mit der For Next Schleife,
werden die Daten pro Datensatz z. B. Adr2 Null : Adr2 Null : Adr2 S10 : Adr2 Null
ausgelesen aber wie wird dann die zweite und dritte Zeile ausgelesen ?
Also die Zeilen
Adr2 Null
Data "11 Rev 2
Die Bascom Hilfe zu Read und Loadlabe war auch nicht so aufschlussreich.
Vielleicht kann mir einer hier im Forum die Funktion bzw. das Arbeiten mit
Tabellen erläutern.
Gruß Ingo