Die Funktionen im Einzelnen

Grundsätzliches

Die Grafikschnittstelle besitzt zwei Ebenen:

  • In der Hauptebene werden die einzelnen Funktionen bestimmt (z.B. Aktivieren des Terminalmodus). Aus dem jeweils aktiven Modus kommt man immer heraus, indem man das Kommando MODE_QUIT sendet. Dann muss man einen neuen Modus wählen.
  • Jede Unterebene besitzt eigene Kommandos, die nur hier gelten. Sie sollten – obwohl möglicherweise ähnlich – nicht in anderen Modi benutzt werden
  • Manche Modi besitzen temporäre Untermodi – so kann man beim Modus fürs freie Zeichnen auch in den Terminalmodus wechseln, um Texte ausgeben zu können. Solange der temporäre Modus aktiv ist, gelten dessen Kommandos. Temporäre Modi kann man ebenfalsl durch „MODE_QUIT“ oder besser „MODE_END_INTERMEDIATE“ verlassen und befindet sich danach wieder im eigentlichen Modus, dessen Einstellungen und Bildschirm danach auch noch zur Verfügung stehen und nicht zerstört sind.

Hauptebene

Kommando Bedeutung
MODE_TERMINAL Terminalmodus
MODE_BALKENGRAFIK Balkengrafik
MODE_MESSWERTE Messwerte
MODE_MENU Menue
MODE_KEYBOARD_ALPHA Bildschirmtastatur für Texteingabe
MODE_KEYBOARD_NUMERIC Bildschirmtastatur für Zahleneingabe
MODE_MESSAGEBOX Auswahlfenster Ja-Nein / Ok-Abbrechen
MODE_8COLOR_LED 8fach-LED-Bildschirm
MODE_3COLOR_LED 3fach-LED in Ampelanordnung und -farbe
MODE_DRAW Freie Grafiken zeichnen
MODE_COLORPALETTE Farbpalette – Rechtecke mit Farbe aufsteigend von 0..255
MODE_SLIDER Schieberegler
MODE_TOUCHSCREEN_CONFIG Touchscreen-Konfiguration
MODE_KEYBOARD_DRAW Tastatur ohne Beschriftungen
MODE_QUIT beendet den aktuellen Modus
MODE_END_INTERMEDIATE beendet einen temporären Modus

Unterebenen

Terminalmodus

Im Terminalmodus werden Zeichen hintereinander am Bildschirm ausgegeben. Farbe und Hintergrundfarbe können festgelegt werden, ebenso die Ausgabeposition. Zur Wahl stehen drei Fonts, von denen der mittlere der zum Lesen angenehmste ist. Mit ihm können bis zu 30 Zeilen a 40 Zeichen ausgegeben werden. Durch die Wahl der Ausgabeposition können auch einfache Textbildschirme umgesetzt werden. Text wird von links nach rechts und oben nach unten ausgegeben. Wenn der Bildschirm voll ist, wird er gelöscht.

Alle Zeichen mit einem Wert größer 32 (Leerzeichen) werden als Text interpretiert. Nur die Zeichen bis 127, dazu die deutschen Sonderzeichen werden ausgegeben, alle anderen Werte führen zur Ausgabe des Leerzeichens 32.

Kommando Bedeutung
TERMINAL_CURSORHOME Textausgabeposition nach links oben setzen
TERMINAL_CURSORHOME Textausgabeposition nach links oben setzen
TERMINAL_CLEARSCREEN Bildschirm löschen
TERMINAL_TEXTCOLOR Textfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)
TERMINAL_BKCOLOR Hintergrundfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)
TERMINAL_LINEFEEED Line Feed – Zeilenvorschub (Standard-Steuerzeichen)
TERMINAL_CARRIAGERETURN Carriage Return – Wagenrücklauf (Standard-Steuerzeichen)
TERMINAL_SETCURSOR Cursor-Position setzen (weitere 2 Werte für x, y erforderlich)
TERMINAL_FONT_SMALL Fontgröße 0 (Kleine Schrift)
TERMINAL_FONT_MEDIUM Fontgröße 1 (doppelt hohe Schrift, Standardschrift)
TERMINAL_FONT_BIG Fontgröße 2 (doppelt hohe und doppelt breite Schrift)

Balkengrafikanzeige

Hier können ein bis acht Balken in zweihundert Stufen dargestellt werden. Die Farben der Balken können insgesamt oder einzeln festgelegt werden. Die Zeichengeschwindigkeit ist lediglich durch die serielle Schnittstelle (19.200 Bit/s = maximal 300 Aktualisierungen aller acht Balken pro Sekunde) limitiert. Es wird keine Achsendarstellung hinzugefügt. Balkenewerte müssen größer oder gleich BALKENGRAFIK_BAROFFSET sein.

Kommando Bedeutung
BALKENGRAFIK_NUMACHSEN_1 1 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_2 2 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_3 3 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_4 4 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_5 5 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_6 6 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_7 7 Balken zeichnen
BALKENGRAFIK_NUMACHSEN_8 8 Balken zeichnen
BALKENGRAFIK_COLOR_BALKEN_1 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_2 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_3 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_4 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_5 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_6 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_7 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BALKEN_8 Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich
BALKENGRAFIK_COLOR_BLUE Farbe dunkelblau für alle Balken
BALKENGRAFIK_COLOR_LTBLUE Farbe dunkelblau für alle Balken
BALKENGRAFIK_COLOR_GREEN Farbe dunkelgruen für alle Balken
BALKENGRAFIK_COLOR_LTGREEN Farbe hellgruen für alle Balken
BALKENGRAFIK_COLOR_YELLOW Farbe dunkelgelb für alle Balken
BALKENGRAFIK_COLOR_LTYELLOW Farbe hellgelb für alle Balken
BALKENGRAFIK_COLOR_RED Farbe rot für alle Balken
BALKENGRAFIK_COLOR_ORANGE Farbe orange für alle Balken
BALKENGRAFIK_COLOR_WHITE Farbe weiß für alle Balken
BALKENGRAFIK_DRAWBAR_1 Zeichne Balken 1 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_2 Zeichne Balken 2 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_3 Zeichne Balken 3 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_4 Zeichne Balken 4 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_5 Zeichne Balken 5 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_6 Zeichne Balken 6 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_7 Zeichne Balken 7 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_DRAWBAR_8 Zeichne Balken 8 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich
BALKENGRAFIK_BAROFFSET = 52, Hilfswert für BALKENGRAFIK_DRAWBAR_X

Messwert-Modus

Hier wird ein Raster auf den Bildschirm gezeichnet, das von links nach rehts durch übergebene Werte überschrieben wird (Wertebereich 0..200). Wenn die Zeichnung ganz rechts angekommen ist, beginnt sie links wieder. Auch das Raster wird eimmal neu gezeichnet, so dass man die aktuelle Zeichenposition leicht erkennen kann. Die Farbe des Verlaufs ist einstellbar, außerdem kann unterhalb der Grafik ein Text dargestellt werden. Diese Funktion ist damit für Langzeitmessungen gut geeignet, da sie 256 Messwerte speichern kann. Die maximale Aktualisierung liegt bei 2400 Hz / 2400 Werte pro Sekunde, womit man schon ein einfaches Oszilloskop bauen kann. Der übergebene Wertebereich liegt zwischen 32..255, wobei 255 oben und 32 unten ist

Kommando Bedeutung
MESSWERTE_RASTER zeichnet ein Raster
MESSWERTE_CLEARSCREEN Bildschirm löschen (zeichnet auch ein Raster)
MESSWERTE_TEXTCOLOR Textfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)
MESSWERTE_START Mindestwert für anzuzeigende Werte
MESSWERTE_WERTE folgende Werte größer oder gleich 32 werden als Messwerte interpretiert
MESSWERTE_TEXT folgende Werte größer oder gleich werden als Text interpretiert

Tastatur-Modus

Zeigt ein Tastenfeld mit 26 Zeichen und 10 Ziffern, dazu zwei Schaltern für “OK” und “Abbrechen”. Wozu auch immer man Text eingeben mag – hier ist die Möglichkeit dazu. Ungelöst ist bisher noch die Frage mach Groß-Kleinschreibung und dem Leerzeichen. Hierzu wurde in der Bibliothek eine spezielle Funktion “Show_Keyboard” geschaffen, die nach ihrem Aufruf mit dem eingegebenen Wert zurückkehrt.

Es gibt drei Tastaturmodi:

  • alphanumerische Eingabe mit Zahlen und Buchstaben
  • numerische Eingabe mit Zahlen
  • keine Tastaturbeschriftung – dafür muss das Programm dann selbst sorgen
Kommando Bedeutung
KEYBOARD_RELEASE wird in Addition mit den anderen KEYBAORD_XXX-Konstanten benutzt – Knopf wird ungedrückt gezeichnet
KEYBOARD_PRESSED wird in Addition mit den anderen KEYBAORD_XXX-Konstanten benutzt – Knopf wird gedrückt gezeichnet
KEYBOARD_SELECT Taste ist selektiert (bei Tastaturauswahl
KEYBOARD_TEXT Text ist bestätigt und wird ausgegeben
KEYBOARD_SWITCHTERMINAL schaltet temporär in den Terminalmodus um
KEYBOARD_RELEASE31 Button 31 wird ungedrückt dargestellt
KEYBOARD_RESET setzt Textposition auf Anfang
KEYBOARD_0 Tastencode für 0
KEYBOARD_A Tastencode für A
KEYBOARD_OK Tastennummer für OK
KEYBOARD_CANCEL Tastennummer für Abbrechen

 

Menü-Modus

Eine typische Menüdarstellung mit Überschrift (schwarz auf weißem Grund) und maximal fünf Auswahlwerten, die per Touchscreen oder Tastatur (Rechts-Links-OK) ausgewählt werden können. Der ausgewählte Eintrag wird hervorgehoben dargestellt. Hierzu wurde in der Bibliothek eine spezielle Funktion “Show_Menu” geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion kapselt die folgenden Kommandos auf einfache Weise

Kommando Bedeutung
MENU_LINE1_SELECTED Menü 1 selektiert
MENU_LINE2_SELECTED Menü 2 selektiert
MENU_LINE3_SELECTED Menü 3 selektiert
MENU_LINE4_SELECTED Menü 4 selektiert
MENU_LINE5_SELECTED Menü 5 selektiert
MENU_TEXT_LINE1 21 Text wird ab sofort in Zeile 1 ausgegeben (Überschrift, schwarz auf weifl)
MENU_TEXT_LINE2 22 Text wird ab sofort in Zeile 2 ausgegeben (linker Rand, weifl auf blau)
MENU_TEXT_LINE3 23 Text wird ab sofort in Zeile 3 ausgegeben (linker Rand)
MENU_TEXT_LINE4 24 Text wird ab sofort in Zeile 4 ausgegeben (linker Rand)
MENU_TEXT_LINE5 25 Text wird ab sofort in Zeile 5 ausgegeben (linker Rand)
MENU_TEXT_LINE6 26 Text wird ab sofort in Zeile 6 ausgegeben (linker Rand)
MENU_DRAWFRAME 29 Es werden Rahmen um die 5 Menü-Elemente ausgegeben (Standard). Dabei wird ein Rahmen selektiert dargestellt

 

Messagebox-Modus

eine Dialogbox, die ein Fenster darstellt mit Überschrift (in doppelter Schrifthöhe) und drei Zeilen. Man kann außerdem aus den folgenden Schaltflächenkombinationen wählen:

  • OK/Abbrechen
  • Ja/Nein
  • Zurück/OK/Weiter
  • Zurück/Weiter*OK

Hierzu wurde in der Bibliothek eine spezielle Funktion “Messagebox” geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion kapselt die folgenden Kommandos auf einfache Weise.

Kommando Bedeutung
MESSAGEBOX_BACK_NEXT Pfeile nach links und nach rechts
MESSAGEBOX_BACK_OK_NEXT Pfeile nach links und nach rechts, auflerdem OK in der Mitte
MESSAGEBOX_OK_CANCEL OK und Abbrechen
MESSAGEBOX_YES_NO Ja und Nein
MESSAGEBOX_OK OK
MESSAGEBOX_SELECTBTN1 linker Knopf gedrückt
MESSAGEBOX_SELECTBTN2 mittlerer Knopf gedrückt
MESSAGEBOX_SELECTBTN3 rechter Knopf gedrückt
MESSAGEBOX_LINE1 Text in Zeile 1 ausgeben
MESSAGEBOX_LINE2 Text in Zeile 2 ausgeben
MESSAGEBOX_LINE3 Text in Zeile 3 ausgeben
MESSAGEBOX_LINE4 Text in Zeile 4 ausgeben

8-LED-Modus

Ein Bildschirm, der acht farbige Rechtecke horizontal anordnet und dazu die Ausgabe eines Textes oberhalb erlaubt. Dieser Modus orientiert sich an den 8 LEDs des MC6400-Originals. Die “LED” können aber in rot, gelb, grün, blau und weiß oder in Kombination oder Regenbogenfarbe leuchten.

Kommando Bedeutung
LED_8COLOR_BLUE Alle LEDs sind blau
LED_8COLOR_GREEN Alle LEDs sind grün
LED_8COLOR_RED Alle LEDs sind rot
LED_8COLOR_YELLOW Alle LEDs sind gelb
LED_8COLOR_WHITE Alle LEDs sind weiß
LED_8COLOR_MIXED Je 2 LEDs sind blau, grün, gelb, rot
LED_8COLOR_RAINBOW Regenbogen-Farbanordnung
LED_NOBKCOLOR keine Hintergrundfarbe, wird durch LED_8COLOR_CLEARSCREEN aufgehoben
LED_8COLOR_CLEARSCREEN Löscht den Bildschirm
LED_1_OFF schaltet LED 1 aus
LED_2_OFF schaltet LED 2 aus
LED_3_OFF schaltet LED 3 aus
LED_4_OFF schaltet LED 4 aus
LED_5_OFF schaltet LED 5 aus
LED_6_OFF schaltet LED 6 aus
LED_7_OFF schaltet LED 7 aus
LED_8_OFF schaltet LED 8 aus
LED_1_ON schaltet LED 1 ein
LED_2_ON schaltet LED 2 ein
LED_3_ON schaltet LED 3 ein
LED_4_ON schaltet LED 4 ein
LED_5_ON schaltet LED 5 ein
LED_6_ON schaltet LED 6 ein
LED_7_ON schaltet LED 7 ein
LED_8_ON schaltet LED 8 ein

 

Ampel-Modus

Ein Bildschirm in Ampelanordnung und -farbe, der drei farbige Rechtecke vertikal anordnet. Dieser Modus orientiert sich an den 3 farbigen LEDs des MC6400-Originals.

Kommando Bedeutung
LED_3COLOR_GREEN_ON 2 grün hell
LED_3COLOR_GREEN_OFF 3 grün dunkel
LED_3COLOR_YELLOW_ON 4 gelb hell
LED_3COLOR_YELLOW_OFF 5 gelb dunkel
LED_3COLOR_RED_ON 6 rot hell
LED_3COLOR_RED_OFF 7 rot dunkel

Freier Zeichenmodus

Ein leerer Bildschirm, auf dem wahlweise (auch gefüllte) Rechtecke, Linien und Punkte dargestellt werden können. Um Texte ausgeben zu können, kann zwischendurch in einen Terminalmodus geschaltet werden (siehe oben). Farben können festgelegt oder über die eingebaute Farbpalette (siehe oben) ausgewählt werden.

Kommando Bedeutung
DRAW_CLEARSCREEN Bildschirm loeschen
DRAW_COLOR Zeichenfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)
DRAW_BKCOLOR Hintergrundfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255), löscht nicht automatisch den Bildschirm!
DRAW_SELECTCOLOR Ruft eine Farbauswahl auf – Farbe muss vom aufrufenden Programm gesetzt werden!
DRAW_LINE Linie, erfordert vier weitere Werte für x1/y1 und x2/y2
DRAW_SETPIXEL Pixel, erfordert zwei weitere Werte für x/y
DRAW_DRAWRECT Rechteck, erfordert vier weitere Werte für x1/y1 und x2/y2
DRAW_FILLRECT Gefülltes Rechteck, erfordert vier weitere Werte für x1/y1 und x2/y2
DRAW_BUTTONFFRAME zeichnet einen transparenten Knopf (links oben: hell, rechts unten: dunkel)
DRAW_SELBUTTONFFRAME zeichnet einen selektierten Knopf (links oben: dunkel, rechts unten: hell)
DRAW_SWITCHTERMINAL schaltet temporär in den Terminalmodus, damit Texte ausgegeben werden können

 

Schieberegler-Modus

- MODE_SLIDER

Ein Modus, in dem ein Regler mit dem Wertebereich 0..199 gezeichnet wird und wahlweise durch die Knöpfe links und rechts, die Tastatur oder durch Antippen verschoben werden kann. Hierzu wurde in der Bibliothek eine spezielle Funktion “Slider” geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion akzeptiert beliebige Bereiche und rechnet das Ergebnis des Schiebereglers automatisch um und kapselt damit diese Kommandos auf einfache Weise.

Eine Überschrift kann übergeben werden – alle Zeichen größer oder gleich 32 werden als Text interpretiert und hintereinander ausgegeben.

Kommando Bedeutung
SLIDER_REDRAW Neuzeichnen im unselektierten Zustand
SLIDER_BTN_BACK_PRESSED Back-Button gedrückt
SLIDER_BTN_NEXT_PRESSED Next-Button gedrückt
SLIDER_BTN_OK_PRESSED OK-Button gedrückt
SLIDER_VALUE Wert für Slider – zweiter Wert wird abgefragt, zulässig sind Werte von 0 bis 200
SLIDER_CLEARSCREEN löscht den Bildschirm inklusive des Textes

 

Funktionen der mclib.c

Einfache Kommando- und Prüffunktionen

Kommando Bedeutung
Send_Command(unsigned char c) Übergabe eines Kommandos an den Grafikcontroller (kapselt uart_putc)
Send_Value(unsigned char c) Übergabe eines Wertes zwischen 0 und 255 an den Grafikcontroller (kapselt uart_putc)
Send_String(const char *s) Übergabe eines nullbasierten Strings an den Grafikcontroller (kapselt uart_puts)
unsigned char Wait_For_Input() wartet auf eine Eingabe durch den Tastatur- und Touchscreencontroller (kapselt uart_getchar())
unsigned char Check_For_Input() prüft auf Vorhandensein einer Eingabe durch den Tastatur- und Touchscreencontroller, kehrt aber auch zurück, wenn keine Eingabe vorliegt (kapselt uart_getc())
void Send_Coordinates(unsigned char x, unsigned char y) sendet ein Koordinatenpaar an den Grafikcontroller
void Send_Double_Coordinates(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) sendet zwei Koordinatenpaare an den Grafikcontroller
void Send_Terminal_String(unsigned char x, unsigned char y, unsigned char delete_line, const char *s) Sendet einen String ans Terminal an einer bestimmten Position. Die Zeile kann vorher gelöscht werden, indem „delete_line“ nicht Null ist.
char Point_in_Rect(unsigned char x, unsigned char y , unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) Prüft, ob ein Punkt innerhalb eines Rechtecks liegt. Es gilt x1 < x <= x2 und y1 < y <= <2.

Show_Menu_Screen

Diese Funktion zeigt einen Menübildschirm an und kehrt mit der getroffenen Auswahl zurück. Die Auswahl kann gleichermaßen über Touchscreen oder die drei Tastaturknöpfe erfolgen.

char Show_Menu_Screen(const char *caption, const char *menu1, const char *menu2, const char *menu3, const char *menu4, const char *menu5)

Es werden eine Überschrift und maximal 5 Menüeinträge als String übergeben. Je 40 Zeichen können dargestellt werden. Folgende Rückgabewerte sind möglich:

Rückgabewert Bedeutung
MENUITEM1 Erster Menüeintrag wurde ausgewählt
MENUITEM2 Zweiter Menüeintrag wurde ausgewählt
MENUITEM3 Dritter Menüeintrag wurde ausgewählt
MENUITEM4 Vierter Menüeintrag wurde ausgewählt
MENUITEM5 Fünfter Menüeintrag wurde ausgewählt

Show_Keyboard

Diese Funktion zeigt die Bildschirmtastatur an. Die Tastatur kann auch mit den drei Tasten auf dem Schaltpult bedient werden. Dabei dienen die Knöpfe für „Links“ und „Rechts“ zur Auswahl des gewünschten Zeichens, mit „OK“ wählt man es aus. Um die Eingabe abzuschließen, muss man dann den „OK“-Knopf auf der Tastatur auswählen und betätigen.

signed int Show_Keyboard(int Min, int Max, char Keyboard_Mode, const char *caption)

Folgende Möglichkeiten sind vorhanden:

Eingabe Wert Erklärung
Keyboard_Mode KEYBOARD_ALPHA stellt eine alphanumerische Tastatur dar
KEYBOARD_NUMERIC stellt eine numerische Tastatur dar
KEYBOARD_DRAW stellt eine Tastatur ohne Beschriftung dar
Min, Max Integer-Werte von -32767 bis +32767 Diese Werte haben nur Bedeutung, wenn KEYBOARD_NUMERIC gewählt wurde. Dann muss Min <= eingegebener Wert <= Max sein, ansonsten akzeptiert die Tastatur die Eingabe nicht
caption Überschrift String-Wert

Bei KEYBOARD_NUMERIC ist der Rückgabewert der eingetippte Wert, bei KEYBOARD_ALPHA wird der eingegebene String in der globalen Variable „Value_Buffer“ abgelegt. Wenn der Knopf „Abbrechen“ getippt wurde, ist der Rückgabewert „KEYBOARD_CANCELLED“.

MessageBox

Diese Funktion zeigt eine Dialogbox an. Sie dient zur Beantwortung von geschlossenen Fragen oder für Hinweise.

unsigned char MessageBox(char mode, const char *caption, const char *line1, const char *line2, const char *line3)

Die Überschrift wird in doppelt breiter Schrift dargestellt und bietet daher nur Platz für 20 Zeichen. Die drei Zeilen darunter bieten Platz für je 40 Zeichen.

Die Dialogbox kann auch mit den drei Tasten auf dem Schaltpult bedient werden.

Es können die Modi gemäß der oben im Bereich „MESSAGEBOX“ dargestellten Beschreibung ausgewählt werden; sie führen zur Anzeige unterschiedlicher Kombinationen der Schaltflächen. Gemäß diesen Kombinationen sind dann auch die Rückgabewerte der Funktion gestaltet:

Rückgabewert Bedeutung
MR_OK OK-Knopf wurde gedrückt
MR_CANCEL Abbrechen-Knopf wurde gedrückt
MR_YES Ja-Knopf wurde gedrückt
MR_NO Nein-Knopf wurde gedrückt
MR_NEXT „->“ Knopf wurde gedrückt
MR_BACK „<-“ Knopf wurde gedrückt
MR_ERROR Ungültiger Wert für „mode“ wurde übergeben

Schieberegler-Funktion

Es wird ein Schieberegler mit Knöpfen zur Einstellung des Wertes dargestellt. Die Funktion kann auch mit den drei Tasten der Pulttastatur ausgelöst werden.

int Slider(const char *caption, int min, int value, int max)

Die Werte für „min“ und „max“ geben die gewünschten Minimal- und Maximalwerte an, die der Schieberegler erreichen soll. „value“ gibt den Wert an, der anfangs eingestellt sein soll. Die Funktion rechnet dabei die internen Werte des Sliders des Grafikcontrollers automatisch in die gewünschten Werte um.

Zurückgegeben wird der ausgewählte Wert des Schiebereglers. Wenn min >= max war, wird der Schieberegler nicht angezeigt und statt dessen der Wert von „value“ zurückgeliefert.

Kommandos der Tastatur und des Touchscreens

Tastaturkommandos

Mit jedem Druck auf eine der drei Hardware-Tasten auf dem Schaltpult empfängt der Hauptcontroller ein Kommando. Die Tasten sind elektronisch entprellt, so dass nicht mehrfach hintereinander das gleiche Kommando gesendet wird, sofern es nicht beabsichtigt ist.

Kommando Bedeutung
SENDKEY_OK OK-Taste wurde gedrückt
SENDKEY_LEFT Taste „Links“ wurde gedrückt
SENDKEY_RIGHT Taste „Rechts“ wurde gedrückt

Touchscreen-Kommandos

Der Touchscreen sendet Kommandos beim Berühren und beim Loslassen des Touchscreens. Er kennt verschiedene Modi und kann dann Koordinaten (passend zur Bildschirmauflösung 256×252) oder Felder (8 in x- und 6 in y-Richtung) senden. In manchen Modi (bspw. dem Terminal) sendet er nicht.

Kommando Bedeutung
SENDKEY_COORDINATES 242 Touchscreen liefert Koordinaten – diese werden nach diesem Kommando als zwei weitere Werte geliefert (x/y)
SENDKEY_TOUCH_START Touchscreen liefert Felder, und gesendet werden dann beim Berühren SENDKEY_TOUCH_START bis SENDKEY_TOUCH_START+48 für die 48 Felder
SENDKEY_TOUCH_END Touchscreen liefert Felder, und gesendet werden dann beim Loslassen SENDKEY_TOUCH_END bis SENDKEY_TOUCH_END+48 für die 48 Felder

Der Touchscreen kennt noch ein paar weitere Kommandos;

Kommando Bedeutung
SENDKEY_STARTUP gesendet beim Start des Touchscreen-Controllers, kann normalerweise ignoriert werden
SENDKEY_ERROR Overflow bei Koordinaten – wird gesendet, wenn Werte verloren gegangen sind
SENDKEY_SLEEP Wird gesendet, wenn der Controller nichts zu tun hat, kann normalerweise ignoriert werden

 

Touchscreen-Konfiguration

Dieser Sonder-Modus dient einzig zur Kalibrierung des Touchscreens. In der Bibliothek findet sich dazu eine Funktion “Calibrate”, die – einmal aufgerufen – vier rote Ecken und Hinweise auf den Bildschirm zeichnet. Die Ecken müssen nacheinander angetippt werden und werden bei Erfolg grün dargestellt. Die Funktion prüft sehr genau auf Korrektheit der Ergebnisse, damit eine Fehlkalibrierung vermieden wird. Trotzdem Vorsicht! Die ermittelten Werte werden im EEPROM des Touchscreen-Controllers gespeichert, damit sie beim nächsten Einschalten wieder zur Verfügung stehen. Es wurde eine Funktion „Calibrate“ geschaffen, die Grafik und Touchscreen in sinnvoller Weise ansteuert und eine einfache Kalibrierung ermöglicht. Diese Funktion kapselt damit die hier vorgestellten Kommandos auf einfache Weise und sollte eingesetzt werden.

Kommando Bedeutung
TOUCHSCREEN_CONFIG_LEFT_TOP zeichnet links oben eine rote Ecke
TOUCHSCREEN_CONFIG_RIGHT_TOP zeichnet links oben eine grüne und rechts oben eine rote Ecke
TOUCHSCREEN_CONFIG_LEFT_BOTTOM zeichnet rechts oben eine grüne und links unten eine rote Ecke
TOUCHSCREEN_CONFIG_RIGHT_BOTTOM zeichnet links unten eine grüne und rechts unten eine rote Ecke
TOUCHSCREEN_CONFIG_OK zeichnet rechts unten eine grüne Ecke
TOUCHSCREEN_CONFIG_TERMINAL schaltet in den temporären Terminalmodus zur Textausgabe

Der Touchscreen sendet ein paar spezielle Kommandos, wenn er sich im Konfigurationsmodus befindet.

Kommando Bedeutung
SENDKEY_CONFIG_2 wird als Antwort auf korrektes Tippen der linken oberen Ecke gesendet – Konfiguration Stufe 2 kann gestartet werden
SENDKEY_CONFIG_3 wird als Antwort auf korrektes Tippen der rechten oberen Ecke gesendet – Konfiguration Stufe 3 kann gestartet werden
SENDKEY_CONFIG_4 wird als Antwort auf korrektes Tippen der linken unteren Ecke gesendet – Konfiguration Stufe 4 kann gestartet werden
SENDKEY_CONFIG_COMPLETE Konfiguration erfolgreich beendet
SENDKEY_RESTART_CONFIG_X Konfiguration neu starten, Fehler aufgetreten, x im falschen feld
SENDKEY_RESTART_CONFIG_Y Konfiguration neu starten, Fehler aufgetreten, y im falschen Feld
SENDKEY_RESTART_CONFIG_POSITION Konfiguration neu starten, Abweichung zwischen links/rechts oder oben/unten zu groß

Der Aufruf der Funktion Calibrate aus der mclib.c ist sehr einfach; sie erwartet keine Eingaben und liefert auch nichts zurück.

void Calibrate(void)

Die Konfiguration wird dann durchgeführt und kann durch Drücken des „OK“-Knopfes auf der Pulttastatur jederzeit abgebrochen werden.

Zurück zur Hauptseite

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.