LCD Menu Hauptseite: Unterschied zwischen den Versionen

Aus ProjectWiki
Wechseln zu:Navigation, Suche
K (How to use it)
K
Zeile 40: Zeile 40:
 
Außerdem wird eine Konstante erstellt, die die maximale Länge für Strings angibt.
 
Außerdem wird eine Konstante erstellt, die die maximale Länge für Strings angibt.
  
=== Initialisation ===
+
=== Initialisierung ===
 +
mit dem Aufruf des Makros:
 
<pre>Menu_init</pre>
 
<pre>Menu_init</pre>
  
=== Main Loop ===
+
=== Hauptschleife ===
 
<pre>Do
 
<pre>Do
   If Switch_minus = 1 Then Menu_backward()            ' back button pressed
+
   If Switch_minus = 1 Then Menu_backward()            ' -/Zurück gedrückt
   If Switch_plus = 1 Then Menu_forward()              ' forward button pressed
+
   If Switch_plus = 1 Then Menu_forward()              ' +/Vorwärts gedrückt
   If Switch_enter = 1 Then                            ' enter button pressed
+
   If Switch_enter = 1 Then                            ' Enter gedrückt
 
       Select Case Menu_enter()
 
       Select Case Menu_enter()
       Case Menu_exit:                                  ' Exit entry selected
+
       Case Menu_exit:                                  ' Menü wurde über Exit verlassen
 
         ...
 
         ...
       Case 2-255:                                      ' Function call
+
       Case 2-255:                                      ' Funktionsaufruf
 
         ...
 
         ...
 
       End Select
 
       End Select
 
   End If
 
   End If
   Menu                                                ' Main function
+
   Menu                                                ' Menü Hauptfunktion
 
   ...
 
   ...
 
Loop</pre>
 
Loop</pre>
  
== Interface description ==
+
== Programmierinterface ==
 
<pre>Const Menu_default_entry</pre>
 
<pre>Const Menu_default_entry</pre>
ID of the default entry
+
Index des Default-Eintrags
  
  
 
<pre>Const Menu_value_string_width</pre>
 
<pre>Const Menu_value_string_width</pre>
size for strings used to display
+
Maximale Größe für Strings in Verwendung mit dem Menü
  
  
 
<pre>Macro Menu_init</pre>
 
<pre>Macro Menu_init</pre>
loads the menu data
+
Lädt die Menüdaten aus dem Flash-Speicher
  
  
 
<pre>Macro Menu_check_update</pre>
 
<pre>Macro Menu_check_update</pre>
call this macro in the time interval you wish to update read-only values
+
Werden Read-Only Variablen verwendet, muss diese Funktion im gewünschten Intervall aufgerufen zu werden um eine Aktualisierung der Anzeige zu erzwingen.
  
  
 
<pre>Declare Sub Menu()</pre>
 
<pre>Declare Sub Menu()</pre>
Main function, called in Main Loop
+
Hauptfunktion, wird regelmäßig aus der Hauptschleife aufgerufen
  
  
 
<pre>Declare Sub Menu_forward()</pre>
 
<pre>Declare Sub Menu_forward()</pre>
Goes one step forward in the menu or while in edit mode, bit values are set to true, numerical values are increased by the step size and for strings, the following character in the table will be selected.
+
Geht einen Schritt in der Menüstruktur weiter, oder ändert Variablenwerte. Bits werden auf True (1) gesetzt, numerische Variablen werden mit der gewählten Schrittgröße inkrementiert und bei Strings wird das nächste Zeichen aus der Zeichentabelle ausgewählt.
  
  
 
<pre>Declare Sub Menu_backward()</pre>
 
<pre>Declare Sub Menu_backward()</pre>
 +
Geht einen Schritt in der Menüstruktur zurück, oder ändert Variablenwerte. Bits werden auf False (0) gesetzt, numerische Variablen werden mit der gewählten Schrittgröße dekrementiert und bei Strings wird das vorige Zeichen aus der Zeichentabelle ausgewählt.
 
Goes one step backward in the menu or while in edit mode, bit values are set to false, numerical values are decreased by the step size and for strings, the preceeding character in the table will be selected.
 
Goes one step backward in the menu or while in edit mode, bit values are set to false, numerical values are decreased by the step size and for strings, the preceeding character in the table will be selected.
  
  
 
<pre>Declare Function Menu_enter() As Byte</pre>
 
<pre>Declare Function Menu_enter() As Byte</pre>
Shows the menu if inactive, follows a link, enters/exits the edit mode, adds a character in string edit mode or selects a function
+
Zeigt das Menü an falls es nicht aktiv ist, folgt einem Link (gewünschter Eintrag wird angezeigt), startet/beendet den Editiermodus oder ruft eine Funktion auf.
  
  
 
<pre>Declare Sub Menu_show(byval Entry_id As Byte)</pre>
 
<pre>Declare Sub Menu_show(byval Entry_id As Byte)</pre>
Displays the menu with the provided entry id, if 0, the default entry is selected
+
Zeigt das Menü mit dem übergegebenen Eintrag an, falls 0 übergeben wird, wird der Standardeintrag ausgewählt.
  
  
 
<pre>Declare Sub Menu_hide()</pre>
 
<pre>Declare Sub Menu_hide()</pre>
hides the menu
+
Schließt das Menü.
  
 
== LCD Menu Designer ==
 
== LCD Menu Designer ==
=== Global Settings ===
+
=== Allgemeine Einstellungen ===
[[File:Menu_designer_settings.jpg|frameless|Global menu settings]]
+
[[File:Menu_designer_settings.jpg|frameless|Allgemeine Einstellungen]]
  
When the first entry in the menu tree is selected, the global settings are visible. Here you can select the LCD character width, the visual style for the [[LCD Bargraph with different styles|bargraph]], edit the character table used in string edit mode and choose the texts to display for bit values (Default is On/Off, you can set it for example to Yes/No or High/Low etc.).
+
Die allgemeinen Einstellungen werden angezeigt, wenn der oberste Eintrag ausgewählt wird. Hier kann die Zeichenbreite des Displays und der Anzeigestil für den [[LCD Bargraph with different styles|Bargraph]] eingestellt werden, die Zeichentabelle für den String-Editiermodus bearbeitet und der Anzeigetext (Standard ist On/Off, aber An/Aus, High/Low etc. ist genauso möglich) für Bitvariablen gewählt werden.
  
 
=== Link ===
 
=== Link ===
[[File:Menu_designer_link.jpg|frameless|Entry is a link, select the target]]
+
[[File:Menu_designer_link.jpg|frameless|Dieser Eintrag ist ein Link, das Ziel auswählen]]
  
With links you can jump to another entry in the menu, just select it in the right menu tree.
+
Mit Links kann zu einem anderen Menüeintrag gesprungen werden, das Ziel muss in der rechten Baumansicht ausgewählt werden.
Submenu- and Back entries are also links, but the target is created automatically.
+
Intern werden Submenüs und "Back"-Einträge als Links verwaltet, das Ziel wird hierbei automatisch gesetzt.
  
 
=== Value ===
 
=== Value ===
[[File:Menu_designer_value.jpg|frameless|Value settings]]
+
[[File:Menu_designer_value.jpg|frameless|Value Einstellungen]]
  
Select the variable type (all Bascom types are supported) and choose if the value should be editable or read-only.
+
 
In the "Associated variable" field enter the Variable name you declared in your code.
+
Zuerst muss der Typ der Variable (Alle Bascom-Datentypen werden unterstützt) ausgewählt und bestimmt werden, ob der Inhalt nur angezeigt wird (Read-Only) oder auch editierbar ist. Im Feld "Associated variable" wird der Name der Variable, wie in Bascom deklariert, eingetragen.
Then set the range of the value (lowest and highest possible value).
+
Für alle Typen muss im Editiermodus ein Startwert bestimmt werden.
If the value is editable, you further have to set its initial value (will be set in Menu_init) and, if its a numerical value, the step size (positive, > 0).
+
Bei numerischen Variablen muss das Intervall (größter bzw. kleinster mögliche Wert) gesetzt sowie zusätzlich für den Editiermodus die Schrittweite (>0)angegeben werden.
  
 
=== Function ===
 
=== Function ===
 
[[File:Menu_designer_function.jpg|frameless|Function ID select]]
 
[[File:Menu_designer_function.jpg|frameless|Function ID select]]
  
Select a function ID between 2 and 255. When this entry is selected, the menu hides and the Menu()-function returns the ID.
+
Die Funktion, die der Menüpunkt ausführen soll, wird durch eine beliebige ID zwischen 2 und 255 gekennzeichnet.
 +
Wird dieser Menüpunkt ausgewählt, wird das Menü beendet und die Menu()-Funktion gibt die ID der betreffenden Funktion zurück, die dann ausgewertet werden kann.
  
=== Tool: Character Table ===
+
=== Tool: Zeichentabelle ===
 
[[File:Menu_designer_character_table.jpg|frameless|Tool: interactive LCD character table]]
 
[[File:Menu_designer_character_table.jpg|frameless|Tool: interactive LCD character table]]
  
With this little tool it is easy to get the corresponding code for characters supported by alphanumerical LCDs.
+
Mit diesem kleinen Tool kann man einfach den Code für ein bestimmtes Zeichen, welches von alphanumerischen Standard-Displays angezeigt werden kann, herausfinden. Dazu einfach auf das gewünschte Zeichen klicken, der betreffende Code wird zur Verwendung in Bascom Strings formatiert "{xxx}" und im Textfeld angezeigt.
Click on the desired character, the calculated code, formatted ready to use in Bascom strings, appears in the text field below.
 
  
 
== Samples ==  
 
== Samples ==  

Version vom 11. Juli 2011, 20:05 Uhr

Übersicht

Das ist ein Menü-System für alphanumerische Standard-LCDs mit mindestens 2 Zeilen.

Um durch das Menü zu navigieren benötigt man nur 3 Tasten (+, -, Enter) oder einen Drehencoder mit eingebautem Taster.

Die Menü-Struktur kann beliebig tief verschachtelt sein, versteckte Sub-Menüs sind möglich (aber noch nicht vom Designer unterstützt). Weiters kann man durch einen Menüeintrag eine beliebige Funktion ausführen oder Variableninhalte anzeigen und editieren (Alle Bascom-Typen werden unterstützt).

Die Menü-Struktur und damit verknüpfte Daten werden aus dem Flash geladen zur Laufzeit in Arrays verwaltet, die Menüpunkte werden mithilfe ihrer Indexes verknüpft.

Numerische Variableninhalte werden gleichzeitig als Zahl und grafisch mit einem Bargraph, welcher die momentane Position innerhalb des spezifizierten Intervalls darstellt, angezeigt.

Bit Variablen können auf On/Off (oder einen anderen beliebigen Text) gesetzt werden, numerische Werte werden mit der eingestellten Schrittgröße in- oder dekrementiert und Strings können mithilfe einer wählbaren Zeichentabelle (und 2 Spezialzeichen zum Löschen/Bestätigen) editiert werden.

Um Flash-Speicher zu sparen werden nur benötigte Code-Teile kompiliert. Am wenigsten Speicherplatz wird benötigt, wenn nur Links und Funktionen verwendet werden. Der Speicherverbrauch steigt jeweils mit der Verwendung von Read-Only Werten, editierbaren Werten oder beiden und zusätzlich für jeden im Menü verwendeten Datentyp.

Video Demo

In diesem Video ist das Menü in Aktion zu sehen.

Einbinden ins Programm

Setup

Die vom Designer erstellten Daten und die Funktionen fürs Menü inkludieren:

Macro Menu_include_data
   $include "inc\menu_data.bas"
End Macro
$include "inc\menu.bas"

Dimensionierung der Variablen

Zwischen dem Include und dem Aufruf der Init-Funktion müssen die Variablen (die im Menü angezeigt oder editiert werden) dimensioniert werden.

Dim Test_bit As Byte
Dim Test_byte As Byte
Dim Test_word As Word
Dim Test_integer As Integer
Dim Test_dword As Dword
Dim Test_long As Long
Dim Test_single As Single
Dim Test_double As Double
Dim Test_string As String * Menu_value_string_width

Bit Datentypen müssen als Byte deklariert werden. Außerdem wird eine Konstante erstellt, die die maximale Länge für Strings angibt.

Initialisierung

mit dem Aufruf des Makros:

Menu_init

Hauptschleife

Do
   If Switch_minus = 1 Then Menu_backward()            ' -/Zurück gedrückt
   If Switch_plus = 1 Then Menu_forward()              ' +/Vorwärts gedrückt
   If Switch_enter = 1 Then                            ' Enter gedrückt
      Select Case Menu_enter()
      Case Menu_exit:                                  ' Menü wurde über Exit verlassen
         ...
      Case 2-255:                                      ' Funktionsaufruf
         ...
      End Select
   End If
   Menu                                                ' Menü Hauptfunktion
   ...
Loop

Programmierinterface

Const Menu_default_entry

Index des Default-Eintrags


Const Menu_value_string_width

Maximale Größe für Strings in Verwendung mit dem Menü


Macro Menu_init

Lädt die Menüdaten aus dem Flash-Speicher


Macro Menu_check_update

Werden Read-Only Variablen verwendet, muss diese Funktion im gewünschten Intervall aufgerufen zu werden um eine Aktualisierung der Anzeige zu erzwingen.


Declare Sub Menu()

Hauptfunktion, wird regelmäßig aus der Hauptschleife aufgerufen


Declare Sub Menu_forward()

Geht einen Schritt in der Menüstruktur weiter, oder ändert Variablenwerte. Bits werden auf True (1) gesetzt, numerische Variablen werden mit der gewählten Schrittgröße inkrementiert und bei Strings wird das nächste Zeichen aus der Zeichentabelle ausgewählt.


Declare Sub Menu_backward()

Geht einen Schritt in der Menüstruktur zurück, oder ändert Variablenwerte. Bits werden auf False (0) gesetzt, numerische Variablen werden mit der gewählten Schrittgröße dekrementiert und bei Strings wird das vorige Zeichen aus der Zeichentabelle ausgewählt. Goes one step backward in the menu or while in edit mode, bit values are set to false, numerical values are decreased by the step size and for strings, the preceeding character in the table will be selected.


Declare Function Menu_enter() As Byte

Zeigt das Menü an falls es nicht aktiv ist, folgt einem Link (gewünschter Eintrag wird angezeigt), startet/beendet den Editiermodus oder ruft eine Funktion auf.


Declare Sub Menu_show(byval Entry_id As Byte)

Zeigt das Menü mit dem übergegebenen Eintrag an, falls 0 übergeben wird, wird der Standardeintrag ausgewählt.


Declare Sub Menu_hide()

Schließt das Menü.

LCD Menu Designer

Allgemeine Einstellungen

Allgemeine Einstellungen

Die allgemeinen Einstellungen werden angezeigt, wenn der oberste Eintrag ausgewählt wird. Hier kann die Zeichenbreite des Displays und der Anzeigestil für den Bargraph eingestellt werden, die Zeichentabelle für den String-Editiermodus bearbeitet und der Anzeigetext (Standard ist On/Off, aber An/Aus, High/Low etc. ist genauso möglich) für Bitvariablen gewählt werden.

Link

Dieser Eintrag ist ein Link, das Ziel auswählen

Mit Links kann zu einem anderen Menüeintrag gesprungen werden, das Ziel muss in der rechten Baumansicht ausgewählt werden. Intern werden Submenüs und "Back"-Einträge als Links verwaltet, das Ziel wird hierbei automatisch gesetzt.

Value

Value Einstellungen


Zuerst muss der Typ der Variable (Alle Bascom-Datentypen werden unterstützt) ausgewählt und bestimmt werden, ob der Inhalt nur angezeigt wird (Read-Only) oder auch editierbar ist. Im Feld "Associated variable" wird der Name der Variable, wie in Bascom deklariert, eingetragen. Für alle Typen muss im Editiermodus ein Startwert bestimmt werden. Bei numerischen Variablen muss das Intervall (größter bzw. kleinster mögliche Wert) gesetzt sowie zusätzlich für den Editiermodus die Schrittweite (>0)angegeben werden.

Function

Function ID select

Die Funktion, die der Menüpunkt ausführen soll, wird durch eine beliebige ID zwischen 2 und 255 gekennzeichnet. Wird dieser Menüpunkt ausgewählt, wird das Menü beendet und die Menu()-Funktion gibt die ID der betreffenden Funktion zurück, die dann ausgewertet werden kann.

Tool: Zeichentabelle

Tool: interactive LCD character table

Mit diesem kleinen Tool kann man einfach den Code für ein bestimmtes Zeichen, welches von alphanumerischen Standard-Displays angezeigt werden kann, herausfinden. Dazu einfach auf das gewünschte Zeichen klicken, der betreffende Code wird zur Verwendung in Bascom Strings formatiert "{xxx}" und im Textfeld angezeigt.

Samples

Sample 1: Small menu

LCD Menu Sample 1

Sample 2: All functions

LCD Menu Sample 2

This Software is Donationware. <paypal>1</paypal> See here for more informations

Download

To install the Menu Designer, run setup.exe with administrator privileges.