{"id":2524,"date":"2013-05-30T13:24:58","date_gmt":"2013-05-30T11:24:58","guid":{"rendered":"http:\/\/www.brennecke.org\/?page_id=2524"},"modified":"2013-05-30T18:45:00","modified_gmt":"2013-05-30T16:45:00","slug":"die-funktionen-im-einzelnen","status":"publish","type":"page","link":"https:\/\/www.brennecke.org\/?page_id=2524","title":{"rendered":"Die Funktionen im Einzelnen"},"content":{"rendered":"<h2>Grunds\u00e4tzliches<\/h2>\n<p>Die Grafikschnittstelle besitzt zwei Ebenen:<\/p>\n<ul>\n<li>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\u00e4hlen.<\/li>\n<li>Jede Unterebene besitzt eigene Kommandos, die nur hier gelten. Sie sollten &#8211; obwohl m\u00f6glicherweise \u00e4hnlich &#8211; nicht in anderen Modi benutzt werden<\/li>\n<li>Manche Modi besitzen tempor\u00e4re Untermodi &#8211; so kann man beim Modus f\u00fcrs freie Zeichnen auch in den Terminalmodus wechseln, um Texte ausgeben zu k\u00f6nnen. Solange der tempor\u00e4re Modus aktiv ist, gelten dessen Kommandos. Tempor\u00e4re Modi kann man ebenfalsl durch &#8222;MODE_QUIT&#8220; oder besser &#8222;MODE_END_INTERMEDIATE&#8220; verlassen und befindet sich danach wieder im eigentlichen Modus, dessen Einstellungen und Bildschirm danach auch noch zur Verf\u00fcgung stehen und nicht zerst\u00f6rt sind.<\/li>\n<\/ul>\n<h2>Hauptebene<\/h2>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>MODE_TERMINAL<\/td>\n<td>Terminalmodus<\/td>\n<\/tr>\n<tr>\n<td>MODE_BALKENGRAFIK<\/td>\n<td>Balkengrafik<\/td>\n<\/tr>\n<tr>\n<td>MODE_MESSWERTE<\/td>\n<td>Messwerte<\/td>\n<\/tr>\n<tr>\n<td>MODE_MENU<\/td>\n<td>Menue<\/td>\n<\/tr>\n<tr>\n<td>MODE_KEYBOARD_ALPHA<\/td>\n<td>Bildschirmtastatur f\u00fcr Texteingabe<\/td>\n<\/tr>\n<tr>\n<td>MODE_KEYBOARD_NUMERIC<\/td>\n<td>Bildschirmtastatur f\u00fcr Zahleneingabe<\/td>\n<\/tr>\n<tr>\n<td>MODE_MESSAGEBOX<\/td>\n<td>Auswahlfenster Ja-Nein \/ Ok-Abbrechen<\/td>\n<\/tr>\n<tr>\n<td>MODE_8COLOR_LED<\/td>\n<td>8fach-LED-Bildschirm<\/td>\n<\/tr>\n<tr>\n<td>MODE_3COLOR_LED<\/td>\n<td>3fach-LED in Ampelanordnung und -farbe<\/td>\n<\/tr>\n<tr>\n<td>MODE_DRAW<\/td>\n<td>Freie Grafiken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>MODE_COLORPALETTE<\/td>\n<td>Farbpalette &#8211; Rechtecke mit Farbe aufsteigend von 0..255<\/td>\n<\/tr>\n<tr>\n<td>MODE_SLIDER<\/td>\n<td>Schieberegler<\/td>\n<\/tr>\n<tr>\n<td>MODE_TOUCHSCREEN_CONFIG<\/td>\n<td>Touchscreen-Konfiguration<\/td>\n<\/tr>\n<tr>\n<td>MODE_KEYBOARD_DRAW<\/td>\n<td>Tastatur ohne Beschriftungen<\/td>\n<\/tr>\n<tr>\n<td>MODE_QUIT<\/td>\n<td>beendet den aktuellen Modus<\/td>\n<\/tr>\n<tr>\n<td>MODE_END_INTERMEDIATE<\/td>\n<td>beendet einen tempor\u00e4ren Modus<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Unterebenen<\/h2>\n<h3>Terminalmodus<\/h3>\n<p>Im Terminalmodus werden Zeichen hintereinander am Bildschirm ausgegeben. Farbe und Hintergrundfarbe k\u00f6nnen festgelegt werden, ebenso die Ausgabeposition. Zur Wahl stehen drei Fonts, von denen der mittlere der zum Lesen angenehmste ist. Mit ihm k\u00f6nnen bis zu 30 Zeilen a 40 Zeichen ausgegeben werden. Durch die Wahl der Ausgabeposition k\u00f6nnen auch einfache Textbildschirme umgesetzt werden. Text wird von links nach rechts und oben nach unten ausgegeben. Wenn der Bildschirm voll ist, wird er gel\u00f6scht.<\/p>\n<p>Alle Zeichen mit einem Wert gr\u00f6\u00dfer 32 (Leerzeichen) werden als Text interpretiert. Nur die Zeichen bis 127, dazu die deutschen Sonderzeichen werden ausgegeben, alle anderen Werte f\u00fchren zur Ausgabe des Leerzeichens 32.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>TERMINAL_CURSORHOME<\/td>\n<td>Textausgabeposition nach links oben setzen<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_CURSORHOME<\/td>\n<td>Textausgabeposition nach links oben setzen<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_CLEARSCREEN<\/td>\n<td>Bildschirm l\u00f6schen<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_TEXTCOLOR<\/td>\n<td>Textfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_BKCOLOR<\/td>\n<td>Hintergrundfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_LINEFEEED<\/td>\n<td>Line Feed &#8211; Zeilenvorschub (Standard-Steuerzeichen)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_CARRIAGERETURN<\/td>\n<td>Carriage Return &#8211; Wagenr\u00fccklauf (Standard-Steuerzeichen)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_SETCURSOR<\/td>\n<td>Cursor-Position setzen (weitere 2 Werte f\u00fcr x, y erforderlich)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_FONT_SMALL<\/td>\n<td>Fontgr\u00f6\u00dfe 0 (Kleine Schrift)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_FONT_MEDIUM<\/td>\n<td>Fontgr\u00f6\u00dfe 1 (doppelt hohe Schrift, Standardschrift)<\/td>\n<\/tr>\n<tr>\n<td>TERMINAL_FONT_BIG<\/td>\n<td>Fontgr\u00f6\u00dfe 2 (doppelt hohe und doppelt breite Schrift)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Balkengrafikanzeige<\/p>\n<p>Hier k\u00f6nnen ein bis acht Balken in zweihundert Stufen dargestellt werden. Die Farben der Balken k\u00f6nnen 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\u00fcgt. Balkenewerte m\u00fcssen gr\u00f6\u00dfer oder gleich BALKENGRAFIK_BAROFFSET sein.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_1<\/td>\n<td>1 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_2<\/td>\n<td>2 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_3<\/td>\n<td>3 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_4<\/td>\n<td>4 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_5<\/td>\n<td>5 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_6<\/td>\n<td>6 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_7<\/td>\n<td>7 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_NUMACHSEN_8<\/td>\n<td>8 Balken zeichnen<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_1<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_2<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_3<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_4<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_5<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_6<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_7<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BALKEN_8<\/td>\n<td>Farbe f\u00fcr Balken 1 setzen &#8211; ein zus\u00e4tzlicher Wert zwischen 0 und 255 f\u00fcr die Farbe erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_BLUE<\/td>\n<td>Farbe dunkelblau f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_LTBLUE<\/td>\n<td>Farbe dunkelblau f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_GREEN<\/td>\n<td>Farbe dunkelgruen f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_LTGREEN<\/td>\n<td>Farbe hellgruen f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_YELLOW<\/td>\n<td>Farbe dunkelgelb f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_LTYELLOW<\/td>\n<td>Farbe hellgelb f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_RED<\/td>\n<td>Farbe rot f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_ORANGE<\/td>\n<td>Farbe orange f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_COLOR_WHITE<\/td>\n<td>Farbe wei\u00df f\u00fcr alle Balken<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_1<\/td>\n<td>Zeichne Balken 1 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_2<\/td>\n<td>Zeichne Balken 2 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_3<\/td>\n<td>Zeichne Balken 3 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_4<\/td>\n<td>Zeichne Balken 4 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_5<\/td>\n<td>Zeichne Balken 5 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_6<\/td>\n<td>Zeichne Balken 6 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_7<\/td>\n<td>Zeichne Balken 7 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_DRAWBAR_8<\/td>\n<td>Zeichne Balken 8 &#8211; ein zus\u00e4tzlicher Wert zwischen 52 und 251 f\u00fcr die H\u00f6he erforderlich<\/td>\n<\/tr>\n<tr>\n<td>BALKENGRAFIK_BAROFFSET<\/td>\n<td>= 52, Hilfswert f\u00fcr BALKENGRAFIK_DRAWBAR_X<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Messwert-Modus<\/h3>\n<p>Hier wird ein Raster auf den Bildschirm gezeichnet, das von links nach rehts durch \u00fcbergebene Werte \u00fcberschrieben 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\u00dferdem kann unterhalb der Grafik ein Text dargestellt werden. Diese Funktion ist damit f\u00fcr 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 \u00fcbergebene Wertebereich liegt zwischen 32..255, wobei 255 oben und 32 unten ist<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>MESSWERTE_RASTER<\/td>\n<td>zeichnet ein Raster<\/td>\n<\/tr>\n<tr>\n<td>MESSWERTE_CLEARSCREEN<\/td>\n<td>Bildschirm l\u00f6schen (zeichnet auch ein Raster)<\/td>\n<\/tr>\n<tr>\n<td>MESSWERTE_TEXTCOLOR<\/td>\n<td>Textfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)<\/td>\n<\/tr>\n<tr>\n<td>MESSWERTE_START<\/td>\n<td>Mindestwert f\u00fcr anzuzeigende Werte<\/td>\n<\/tr>\n<tr>\n<td>MESSWERTE_WERTE<\/td>\n<td>folgende Werte gr\u00f6\u00dfer oder gleich 32 werden als Messwerte interpretiert<\/td>\n<\/tr>\n<tr>\n<td>MESSWERTE_TEXT<\/td>\n<td>folgende Werte gr\u00f6\u00dfer oder gleich werden als Text interpretiert<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Tastatur-Modus<\/h3>\n<p>Zeigt ein Tastenfeld mit 26 Zeichen und 10 Ziffern, dazu zwei Schaltern f\u00fcr \u201cOK\u201d und \u201cAbbrechen\u201d. Wozu auch immer man Text eingeben mag \u2013 hier ist die M\u00f6glichkeit dazu. Ungel\u00f6st ist bisher noch die Frage mach Gro\u00df-Kleinschreibung und dem Leerzeichen. Hierzu wurde in der Bibliothek eine spezielle Funktion \u201cShow_Keyboard\u201d geschaffen, die nach ihrem Aufruf mit dem eingegebenen Wert zur\u00fcckkehrt.<\/p>\n<p>Es gibt drei Tastaturmodi:<\/p>\n<ul>\n<li>alphanumerische Eingabe mit Zahlen und Buchstaben<\/li>\n<li>numerische Eingabe mit Zahlen<\/li>\n<li>keine Tastaturbeschriftung &#8211; daf\u00fcr muss das Programm dann selbst sorgen<\/li>\n<\/ul>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>KEYBOARD_RELEASE<\/td>\n<td>wird in Addition mit den anderen KEYBAORD_XXX-Konstanten benutzt &#8211; Knopf wird ungedr\u00fcckt gezeichnet<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_PRESSED<\/td>\n<td>wird in Addition mit den anderen KEYBAORD_XXX-Konstanten benutzt &#8211; Knopf wird gedr\u00fcckt gezeichnet<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_SELECT<\/td>\n<td>Taste ist selektiert (bei Tastaturauswahl<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_TEXT<\/td>\n<td>Text ist best\u00e4tigt und wird ausgegeben<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_SWITCHTERMINAL<\/td>\n<td>schaltet tempor\u00e4r in den Terminalmodus um<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_RELEASE31<\/td>\n<td>Button 31 wird ungedr\u00fcckt dargestellt<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_RESET<\/td>\n<td>setzt Textposition auf Anfang<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_0<\/td>\n<td>Tastencode f\u00fcr 0<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_A<\/td>\n<td>Tastencode f\u00fcr A<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_OK<\/td>\n<td>Tastennummer f\u00fcr OK<\/td>\n<\/tr>\n<tr>\n<td>KEYBOARD_CANCEL<\/td>\n<td>Tastennummer f\u00fcr Abbrechen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3>Men\u00fc-Modus<\/h3>\n<p>Eine typische Men\u00fcdarstellung mit \u00dcberschrift (schwarz auf wei\u00dfem Grund) und maximal f\u00fcnf Auswahlwerten, die per Touchscreen oder Tastatur (Rechts-Links-OK) ausgew\u00e4hlt werden k\u00f6nnen. Der ausgew\u00e4hlte Eintrag wird hervorgehoben dargestellt. Hierzu wurde in der Bibliothek eine spezielle Funktion \u201cShow_Menu\u201d geschaffen, die nach ihrem Aufruf mit dem Wert des ausgew\u00e4hlten Eintrags zur\u00fcckkehrt. Diese Funktion kapselt die folgenden Kommandos auf einfache Weise<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>MENU_LINE1_SELECTED<\/td>\n<td>Men\u00fc 1 selektiert<\/td>\n<\/tr>\n<tr>\n<td>MENU_LINE2_SELECTED<\/td>\n<td>Men\u00fc 2 selektiert<\/td>\n<\/tr>\n<tr>\n<td>MENU_LINE3_SELECTED<\/td>\n<td>Men\u00fc 3 selektiert<\/td>\n<\/tr>\n<tr>\n<td>MENU_LINE4_SELECTED<\/td>\n<td>Men\u00fc 4 selektiert<\/td>\n<\/tr>\n<tr>\n<td>MENU_LINE5_SELECTED<\/td>\n<td>Men\u00fc 5 selektiert<\/td>\n<\/tr>\n<tr>\n<td>MENU_TEXT_LINE1 21<\/td>\n<td>Text wird ab sofort in Zeile 1 ausgegeben (\u00dcberschrift, schwarz auf wei\ufb02)<\/td>\n<\/tr>\n<tr>\n<td>MENU_TEXT_LINE2 22<\/td>\n<td>Text wird ab sofort in Zeile 2 ausgegeben (linker Rand, wei\ufb02 auf blau)<\/td>\n<\/tr>\n<tr>\n<td>MENU_TEXT_LINE3 23<\/td>\n<td>Text wird ab sofort in Zeile 3 ausgegeben (linker Rand)<\/td>\n<\/tr>\n<tr>\n<td>MENU_TEXT_LINE4 24<\/td>\n<td>Text wird ab sofort in Zeile 4 ausgegeben (linker Rand)<\/td>\n<\/tr>\n<tr>\n<td>MENU_TEXT_LINE5 25<\/td>\n<td>Text wird ab sofort in Zeile 5 ausgegeben (linker Rand)<\/td>\n<\/tr>\n<tr>\n<td>MENU_TEXT_LINE6 26<\/td>\n<td>Text wird ab sofort in Zeile 6 ausgegeben (linker Rand)<\/td>\n<\/tr>\n<tr>\n<td>MENU_DRAWFRAME 29<\/td>\n<td>Es werden Rahmen um die 5 Men\u00fc-Elemente ausgegeben (Standard). Dabei wird ein Rahmen selektiert dargestellt<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3>Messagebox-Modus<\/h3>\n<p>eine Dialogbox, die ein Fenster darstellt mit \u00dcberschrift (in doppelter Schrifth\u00f6he) und drei Zeilen. Man kann au\u00dferdem aus den folgenden Schaltfl\u00e4chenkombinationen w\u00e4hlen:<\/p>\n<ul>\n<li>OK\/Abbrechen<\/li>\n<li>Ja\/Nein<\/li>\n<li>Zur\u00fcck\/OK\/Weiter<\/li>\n<li>Zur\u00fcck\/Weiter*OK<\/li>\n<\/ul>\n<p>Hierzu wurde in der Bibliothek eine spezielle Funktion \u201cMessagebox\u201d geschaffen, die nach ihrem Aufruf mit dem Wert des ausgew\u00e4hlten Eintrags zur\u00fcckkehrt. Diese Funktion kapselt die folgenden Kommandos auf einfache Weise.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_BACK_NEXT<\/td>\n<td>Pfeile nach links und nach rechts<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_BACK_OK_NEXT<\/td>\n<td>Pfeile nach links und nach rechts, au\ufb02erdem OK in der Mitte<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_OK_CANCEL<\/td>\n<td>OK und Abbrechen<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_YES_NO<\/td>\n<td>Ja und Nein<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_OK<\/td>\n<td>OK<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_SELECTBTN1<\/td>\n<td>linker Knopf gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_SELECTBTN2<\/td>\n<td>mittlerer Knopf gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_SELECTBTN3<\/td>\n<td>rechter Knopf gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_LINE1<\/td>\n<td>Text in Zeile 1 ausgeben<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_LINE2<\/td>\n<td>Text in Zeile 2 ausgeben<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_LINE3<\/td>\n<td>Text in Zeile 3 ausgeben<\/td>\n<\/tr>\n<tr>\n<td>MESSAGEBOX_LINE4<\/td>\n<td>Text in Zeile 4 ausgeben<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>8-LED-Modus<\/h3>\n<p>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 \u201cLED\u201d k\u00f6nnen aber in rot, gelb, gr\u00fcn, blau und wei\u00df oder in Kombination oder Regenbogenfarbe leuchten.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>LED_8COLOR_BLUE<\/td>\n<td>Alle LEDs sind blau<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_GREEN<\/td>\n<td>Alle LEDs sind gr\u00fcn<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_RED<\/td>\n<td>Alle LEDs sind rot<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_YELLOW<\/td>\n<td>Alle LEDs sind gelb<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_WHITE<\/td>\n<td>Alle LEDs sind wei\u00df<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_MIXED<\/td>\n<td>Je 2 LEDs sind blau, gr\u00fcn, gelb, rot<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_RAINBOW<\/td>\n<td>Regenbogen-Farbanordnung<\/td>\n<\/tr>\n<tr>\n<td>LED_NOBKCOLOR<\/td>\n<td>keine Hintergrundfarbe, wird durch LED_8COLOR_CLEARSCREEN aufgehoben<\/td>\n<\/tr>\n<tr>\n<td>LED_8COLOR_CLEARSCREEN<\/td>\n<td>L\u00f6scht den Bildschirm<\/td>\n<\/tr>\n<tr>\n<td>LED_1_OFF<\/td>\n<td>schaltet LED 1 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_2_OFF<\/td>\n<td>schaltet LED 2 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_3_OFF<\/td>\n<td>schaltet LED 3 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_4_OFF<\/td>\n<td>schaltet LED 4 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_5_OFF<\/td>\n<td>schaltet LED 5 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_6_OFF<\/td>\n<td>schaltet LED 6 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_7_OFF<\/td>\n<td>schaltet LED 7 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_8_OFF<\/td>\n<td>schaltet LED 8 aus<\/td>\n<\/tr>\n<tr>\n<td>LED_1_ON<\/td>\n<td>schaltet LED 1 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_2_ON<\/td>\n<td>schaltet LED 2 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_3_ON<\/td>\n<td>schaltet LED 3 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_4_ON<\/td>\n<td>schaltet LED 4 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_5_ON<\/td>\n<td>schaltet LED 5 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_6_ON<\/td>\n<td>schaltet LED 6 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_7_ON<\/td>\n<td>schaltet LED 7 ein<\/td>\n<\/tr>\n<tr>\n<td>LED_8_ON<\/td>\n<td>schaltet LED 8 ein<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3>Ampel-Modus<\/h3>\n<p>Ein Bildschirm in Ampelanordnung und -farbe, der drei farbige Rechtecke vertikal anordnet. Dieser Modus orientiert sich an den 3 farbigen LEDs des MC6400-Originals.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>LED_3COLOR_GREEN_ON 2<\/td>\n<td>gr\u00fcn hell<\/td>\n<\/tr>\n<tr>\n<td>LED_3COLOR_GREEN_OFF 3<\/td>\n<td>gr\u00fcn dunkel<\/td>\n<\/tr>\n<tr>\n<td>LED_3COLOR_YELLOW_ON 4<\/td>\n<td>gelb hell<\/td>\n<\/tr>\n<tr>\n<td>LED_3COLOR_YELLOW_OFF 5<\/td>\n<td>gelb dunkel<\/td>\n<\/tr>\n<tr>\n<td>LED_3COLOR_RED_ON 6<\/td>\n<td>rot hell<\/td>\n<\/tr>\n<tr>\n<td>LED_3COLOR_RED_OFF 7<\/td>\n<td>rot dunkel<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Freier Zeichenmodus<\/h3>\n<p>Ein leerer Bildschirm, auf dem wahlweise (auch gef\u00fcllte) Rechtecke, Linien und Punkte dargestellt werden k\u00f6nnen. Um Texte ausgeben zu k\u00f6nnen, kann zwischendurch in einen Terminalmodus geschaltet werden (siehe oben). Farben k\u00f6nnen festgelegt oder \u00fcber die eingebaute Farbpalette (siehe oben) ausgew\u00e4hlt werden.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>DRAW_CLEARSCREEN<\/td>\n<td>Bildschirm loeschen<\/td>\n<\/tr>\n<tr>\n<td>DRAW_COLOR<\/td>\n<td>Zeichenfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255)<\/td>\n<\/tr>\n<tr>\n<td>DRAW_BKCOLOR<\/td>\n<td>Hintergrundfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255), l\u00f6scht nicht automatisch den Bildschirm!<\/td>\n<\/tr>\n<tr>\n<td>DRAW_SELECTCOLOR<\/td>\n<td>Ruft eine Farbauswahl auf &#8211; Farbe muss vom aufrufenden Programm gesetzt werden!<\/td>\n<\/tr>\n<tr>\n<td>DRAW_LINE<\/td>\n<td>Linie, erfordert vier weitere Werte f\u00fcr x1\/y1 und x2\/y2<\/td>\n<\/tr>\n<tr>\n<td>DRAW_SETPIXEL<\/td>\n<td>Pixel, erfordert zwei weitere Werte f\u00fcr x\/y<\/td>\n<\/tr>\n<tr>\n<td>DRAW_DRAWRECT<\/td>\n<td>Rechteck, erfordert vier weitere Werte f\u00fcr x1\/y1 und x2\/y2<\/td>\n<\/tr>\n<tr>\n<td>DRAW_FILLRECT<\/td>\n<td>Gef\u00fclltes Rechteck, erfordert vier weitere Werte f\u00fcr x1\/y1 und x2\/y2<\/td>\n<\/tr>\n<tr>\n<td>DRAW_BUTTONFFRAME<\/td>\n<td>zeichnet einen transparenten Knopf (links oben: hell, rechts unten: dunkel)<\/td>\n<\/tr>\n<tr>\n<td>DRAW_SELBUTTONFFRAME<\/td>\n<td>zeichnet einen selektierten Knopf (links oben: dunkel, rechts unten: hell)<\/td>\n<\/tr>\n<tr>\n<td>DRAW_SWITCHTERMINAL<\/td>\n<td>schaltet tempor\u00e4r in den Terminalmodus, damit Texte ausgegeben werden k\u00f6nnen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3>Schieberegler-Modus<\/h3>\n<pre>- MODE_SLIDER<\/pre>\n<p>Ein Modus, in dem ein Regler mit dem Wertebereich 0..199 gezeichnet wird und wahlweise durch die Kn\u00f6pfe links und rechts, die Tastatur oder durch Antippen verschoben werden kann. Hierzu wurde in der Bibliothek eine spezielle Funktion \u201cSlider\u201d geschaffen, die nach ihrem Aufruf mit dem Wert des ausgew\u00e4hlten Eintrags zur\u00fcckkehrt. Diese Funktion akzeptiert beliebige Bereiche und rechnet das Ergebnis des Schiebereglers automatisch um und kapselt damit diese Kommandos auf einfache Weise.<\/p>\n<p>Eine \u00dcberschrift kann \u00fcbergeben werden &#8211; alle Zeichen gr\u00f6\u00dfer oder gleich 32 werden als Text interpretiert und hintereinander ausgegeben.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>SLIDER_REDRAW<\/td>\n<td>Neuzeichnen im unselektierten Zustand<\/td>\n<\/tr>\n<tr>\n<td>SLIDER_BTN_BACK_PRESSED<\/td>\n<td>Back-Button gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>SLIDER_BTN_NEXT_PRESSED<\/td>\n<td>Next-Button gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>SLIDER_BTN_OK_PRESSED<\/td>\n<td>OK-Button gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>SLIDER_VALUE<\/td>\n<td>Wert f\u00fcr Slider &#8211; zweiter Wert wird abgefragt, zul\u00e4ssig sind Werte von 0 bis 200<\/td>\n<\/tr>\n<tr>\n<td>SLIDER_CLEARSCREEN<\/td>\n<td>l\u00f6scht den Bildschirm inklusive des Textes<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>Funktionen der mclib.c<\/h2>\n<h3>Einfache Kommando- und Pr\u00fcffunktionen<\/h3>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>Send_Command(<i>unsigned char c<\/i>)<\/td>\n<td>\u00dcbergabe eines Kommandos an den Grafikcontroller (kapselt uart_putc)<\/td>\n<\/tr>\n<tr>\n<td>Send_Value(<i>unsigned char c<\/i>)<\/td>\n<td>\u00dcbergabe eines Wertes zwischen 0 und 255 an den Grafikcontroller (kapselt uart_putc)<\/td>\n<\/tr>\n<tr>\n<td>Send_String(<i>const char<\/i> *s)<\/td>\n<td>\u00dcbergabe eines nullbasierten Strings an den Grafikcontroller (kapselt uart_puts)<\/td>\n<\/tr>\n<tr>\n<td><i>unsigned char<\/i> Wait_For_Input()<\/td>\n<td>wartet auf eine Eingabe durch den Tastatur- und Touchscreencontroller (kapselt uart_getchar())<\/td>\n<\/tr>\n<tr>\n<td><i>unsigned char<\/i> Check_For_Input()<\/td>\n<td>pr\u00fcft auf Vorhandensein einer Eingabe durch den Tastatur- und Touchscreencontroller, kehrt aber auch zur\u00fcck, wenn keine Eingabe vorliegt (kapselt uart_getc())<\/td>\n<\/tr>\n<tr>\n<td><i>void<\/i> Send_Coordinates(<i>unsigned char<\/i> x, <i>unsigned char<\/i> y)<\/td>\n<td>sendet ein Koordinatenpaar an den Grafikcontroller<\/td>\n<\/tr>\n<tr>\n<td><i>void<\/i> Send_Double_Coordinates(<i>unsigned char<\/i> x1, <i>unsigned char<\/i> y1, <i>unsigned char x2<\/i>, <i>unsigned char y2<\/i>)<\/td>\n<td>sendet zwei Koordinatenpaare an den Grafikcontroller<\/td>\n<\/tr>\n<tr>\n<td><i>void<\/i> Send_Terminal_String(<i>unsigned char<\/i> x, <i>unsigned char<\/i> y, <i>unsigned char<\/i> delete_line, <i>const char<\/i> *s)<\/td>\n<td>Sendet einen String ans Terminal an einer bestimmten Position. Die Zeile kann vorher gel\u00f6scht werden, indem &#8222;delete_line&#8220; nicht Null ist.<\/td>\n<\/tr>\n<tr>\n<td><i>char<\/i> Point_in_Rect(<i>unsigned char<\/i> x, <i>unsigned char<\/i> y , <i>unsigned char<\/i> x1, <i>unsigned char<\/i> y1, <i>unsigned char<\/i> x2, <i>unsigned char<\/i> y2)<\/td>\n<td>Pr\u00fcft, ob ein Punkt innerhalb eines Rechtecks liegt. Es gilt x1 &lt; x &lt;= x2 und y1 &lt; y &lt;= &lt;2.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Show_Menu_Screen<\/h3>\n<p>Diese Funktion zeigt einen Men\u00fcbildschirm an und kehrt mit der getroffenen Auswahl zur\u00fcck. Die Auswahl kann gleicherma\u00dfen \u00fcber Touchscreen oder die drei Tastaturkn\u00f6pfe erfolgen.<\/p>\n<pre><i>char<\/i> Show_Menu_Screen(<i>const char<\/i> *caption, <i>const char<\/i> *menu1, <i>const char<\/i> *menu2, <i>const char<\/i> *menu3, <i>const char<\/i> *menu4, <i>const char<\/i> *menu5)<\/pre>\n<p>Es werden eine \u00dcberschrift und maximal 5 Men\u00fceintr\u00e4ge als String \u00fcbergeben. Je 40 Zeichen k\u00f6nnen dargestellt werden. Folgende R\u00fcckgabewerte sind m\u00f6glich:<\/p>\n<table>\n<tbody>\n<tr>\n<th>R\u00fcckgabewert<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>MENUITEM1<\/td>\n<td>Erster Men\u00fceintrag wurde ausgew\u00e4hlt<\/td>\n<\/tr>\n<tr>\n<td>MENUITEM2<\/td>\n<td>Zweiter Men\u00fceintrag wurde ausgew\u00e4hlt<\/td>\n<\/tr>\n<tr>\n<td>MENUITEM3<\/td>\n<td>Dritter Men\u00fceintrag wurde ausgew\u00e4hlt<\/td>\n<\/tr>\n<tr>\n<td>MENUITEM4<\/td>\n<td>Vierter Men\u00fceintrag wurde ausgew\u00e4hlt<\/td>\n<\/tr>\n<tr>\n<td>MENUITEM5<\/td>\n<td>F\u00fcnfter Men\u00fceintrag wurde ausgew\u00e4hlt<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Show_Keyboard<\/h3>\n<p>Diese Funktion zeigt die Bildschirmtastatur an. Die Tastatur kann auch mit den drei Tasten auf dem Schaltpult bedient werden. Dabei dienen die Kn\u00f6pfe f\u00fcr &#8222;Links&#8220; und &#8222;Rechts&#8220; zur Auswahl des gew\u00fcnschten Zeichens, mit &#8222;OK&#8220; w\u00e4hlt man es aus. Um die Eingabe abzuschlie\u00dfen, muss man dann den &#8222;OK&#8220;-Knopf auf der Tastatur ausw\u00e4hlen und bet\u00e4tigen.<\/p>\n<pre><i>signed int<\/i> Show_Keyboard(<i>int<\/i> Min, <i>int<\/i> Max, <i>char<\/i> Keyboard_Mode, <i>const char<\/i> *caption)<\/pre>\n<p>Folgende M\u00f6glichkeiten sind vorhanden:<\/p>\n<table>\n<tbody>\n<tr>\n<th>Eingabe<\/th>\n<th>Wert<\/th>\n<th>Erkl\u00e4rung<\/th>\n<\/tr>\n<tr>\n<td>Keyboard_Mode<\/td>\n<td>KEYBOARD_ALPHA<\/td>\n<td>stellt eine alphanumerische Tastatur dar<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>KEYBOARD_NUMERIC<\/td>\n<td>stellt eine numerische Tastatur dar<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>KEYBOARD_DRAW<\/td>\n<td>stellt eine Tastatur ohne Beschriftung dar<\/td>\n<\/tr>\n<tr>\n<td>Min, Max<\/td>\n<td>Integer-Werte von -32767 bis +32767<\/td>\n<td>Diese Werte haben nur Bedeutung, wenn KEYBOARD_NUMERIC gew\u00e4hlt wurde. Dann muss Min &lt;= eingegebener Wert &lt;= Max sein, ansonsten akzeptiert die Tastatur die Eingabe nicht<\/td>\n<\/tr>\n<tr>\n<td>caption<\/td>\n<td>\u00dcberschrift<\/td>\n<td>String-Wert<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bei KEYBOARD_NUMERIC ist der R\u00fcckgabewert der eingetippte Wert, bei KEYBOARD_ALPHA wird der eingegebene String in der globalen Variable &#8222;Value_Buffer&#8220; abgelegt. Wenn der Knopf &#8222;Abbrechen&#8220; getippt wurde, ist der R\u00fcckgabewert &#8222;KEYBOARD_CANCELLED&#8220;.<\/p>\n<h3>MessageBox<\/h3>\n<p>Diese Funktion zeigt eine Dialogbox an. Sie dient zur Beantwortung von geschlossenen Fragen oder f\u00fcr Hinweise.<\/p>\n<pre><i>unsigned char<\/i> MessageBox(<i>char<\/i> mode, <i>const char<\/i> *caption, <i>const char<\/i> *line1, <i>const char<\/i> *line2, <i>const char<\/i> *line3)<\/pre>\n<p>Die \u00dcberschrift wird in doppelt breiter Schrift dargestellt und bietet daher nur Platz f\u00fcr 20 Zeichen. Die drei Zeilen darunter bieten Platz f\u00fcr je 40 Zeichen.<\/p>\n<p>Die Dialogbox kann auch mit den drei Tasten auf dem Schaltpult bedient werden.<\/p>\n<p>Es k\u00f6nnen die Modi gem\u00e4\u00df der oben im Bereich &#8222;MESSAGEBOX&#8220; dargestellten Beschreibung ausgew\u00e4hlt werden; sie f\u00fchren zur Anzeige unterschiedlicher Kombinationen der Schaltfl\u00e4chen. Gem\u00e4\u00df diesen Kombinationen sind dann auch die R\u00fcckgabewerte der Funktion gestaltet:<\/p>\n<table>\n<tbody>\n<tr>\n<th>R\u00fcckgabewert<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>MR_OK<\/td>\n<td>OK-Knopf wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MR_CANCEL<\/td>\n<td>Abbrechen-Knopf wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MR_YES<\/td>\n<td>Ja-Knopf wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MR_NO<\/td>\n<td>Nein-Knopf wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MR_NEXT<\/td>\n<td>&#8222;-&gt;&#8220; Knopf wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MR_BACK<\/td>\n<td>&#8222;&lt;-&#8220; Knopf wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>MR_ERROR<\/td>\n<td>Ung\u00fcltiger Wert f\u00fcr &#8222;mode&#8220; wurde \u00fcbergeben<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Schieberegler-Funktion<\/h3>\n<p>Es wird ein Schieberegler mit Kn\u00f6pfen zur Einstellung des Wertes dargestellt. Die Funktion kann auch mit den drei Tasten der Pulttastatur ausgel\u00f6st werden.<\/p>\n<pre><i>int<\/i> Slider(<i>const char<\/i> *caption, <i>int<\/i> min, <i>int<\/i> value, <i>int<\/i> max)<\/pre>\n<p>Die Werte f\u00fcr &#8222;min&#8220; und &#8222;max&#8220; geben die gew\u00fcnschten Minimal- und Maximalwerte an, die der Schieberegler erreichen soll. &#8222;value&#8220; gibt den Wert an, der anfangs eingestellt sein soll. Die Funktion rechnet dabei die internen Werte des Sliders des Grafikcontrollers automatisch in die gew\u00fcnschten Werte um.<\/p>\n<p>Zur\u00fcckgegeben wird der ausgew\u00e4hlte Wert des Schiebereglers. Wenn min &gt;= max war, wird der Schieberegler nicht angezeigt und statt dessen der Wert von &#8222;value&#8220; zur\u00fcckgeliefert.<\/p>\n<h2>Kommandos der Tastatur und des Touchscreens<\/h2>\n<h3>Tastaturkommandos<\/h3>\n<p>Mit jedem Druck auf eine der drei Hardware-Tasten auf dem Schaltpult empf\u00e4ngt der Hauptcontroller ein Kommando. Die Tasten sind elektronisch entprellt, so dass nicht mehrfach hintereinander das gleiche Kommando gesendet wird, sofern es nicht beabsichtigt ist.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>SENDKEY_OK<\/td>\n<td>OK-Taste wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_LEFT<\/td>\n<td>Taste &#8222;Links&#8220; wurde gedr\u00fcckt<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_RIGHT<\/td>\n<td>Taste &#8222;Rechts&#8220; wurde gedr\u00fcckt<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Touchscreen-Kommandos<\/h2>\n<p>Der Touchscreen sendet Kommandos beim Ber\u00fchren und beim Loslassen des Touchscreens. Er kennt verschiedene Modi und kann dann Koordinaten (passend zur Bildschirmaufl\u00f6sung 256&#215;252) oder Felder (8 in x- und 6 in y-Richtung) senden. In manchen Modi (bspw. dem Terminal) sendet er nicht.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>SENDKEY_COORDINATES 242<\/td>\n<td>Touchscreen liefert Koordinaten &#8211; diese werden nach diesem Kommando als zwei weitere Werte geliefert (x\/y)<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_TOUCH_START<\/td>\n<td>Touchscreen liefert Felder, und gesendet werden dann beim Ber\u00fchren SENDKEY_TOUCH_START bis SENDKEY_TOUCH_START+48 f\u00fcr die 48 Felder<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_TOUCH_END<\/td>\n<td>Touchscreen liefert Felder, und gesendet werden dann beim Loslassen SENDKEY_TOUCH_END bis SENDKEY_TOUCH_END+48 f\u00fcr die 48 Felder<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Der Touchscreen kennt noch ein paar weitere Kommandos;<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>SENDKEY_STARTUP<\/td>\n<td>gesendet beim Start des Touchscreen-Controllers, kann normalerweise ignoriert werden<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_ERROR<\/td>\n<td>Overflow bei Koordinaten &#8211; wird gesendet, wenn Werte verloren gegangen sind<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_SLEEP<\/td>\n<td>Wird gesendet, wenn der Controller nichts zu tun hat, kann normalerweise ignoriert werden<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>Touchscreen-Konfiguration<\/h2>\n<p>Dieser Sonder-Modus dient einzig zur Kalibrierung des Touchscreens. In der Bibliothek findet sich dazu eine Funktion \u201cCalibrate\u201d, die \u2013 einmal aufgerufen \u2013 vier rote Ecken und Hinweise auf den Bildschirm zeichnet. Die Ecken m\u00fcssen nacheinander angetippt werden und werden bei Erfolg gr\u00fcn dargestellt. Die Funktion pr\u00fcft 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\u00e4chsten Einschalten wieder zur Verf\u00fcgung stehen. Es wurde eine Funktion &#8222;Calibrate&#8220; geschaffen, die Grafik und Touchscreen in sinnvoller Weise ansteuert und eine einfache Kalibrierung erm\u00f6glicht. Diese Funktion kapselt damit die hier vorgestellten Kommandos auf einfache Weise und sollte eingesetzt werden.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>TOUCHSCREEN_CONFIG_LEFT_TOP<\/td>\n<td>zeichnet links oben eine rote Ecke<\/td>\n<\/tr>\n<tr>\n<td>TOUCHSCREEN_CONFIG_RIGHT_TOP<\/td>\n<td>zeichnet links oben eine gr\u00fcne und rechts oben eine rote Ecke<\/td>\n<\/tr>\n<tr>\n<td>TOUCHSCREEN_CONFIG_LEFT_BOTTOM<\/td>\n<td>zeichnet rechts oben eine gr\u00fcne und links unten eine rote Ecke<\/td>\n<\/tr>\n<tr>\n<td>TOUCHSCREEN_CONFIG_RIGHT_BOTTOM<\/td>\n<td>zeichnet links unten eine gr\u00fcne und rechts unten eine rote Ecke<\/td>\n<\/tr>\n<tr>\n<td>TOUCHSCREEN_CONFIG_OK<\/td>\n<td>zeichnet rechts unten eine gr\u00fcne Ecke<\/td>\n<\/tr>\n<tr>\n<td>TOUCHSCREEN_CONFIG_TERMINAL<\/td>\n<td>schaltet in den tempor\u00e4ren Terminalmodus zur Textausgabe<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Der Touchscreen sendet ein paar spezielle Kommandos, wenn er sich im Konfigurationsmodus befindet.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Kommando<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<tr>\n<td>SENDKEY_CONFIG_2<\/td>\n<td>wird als Antwort auf korrektes Tippen der linken oberen Ecke gesendet &#8211; Konfiguration Stufe 2 kann gestartet werden<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_CONFIG_3<\/td>\n<td>wird als Antwort auf korrektes Tippen der rechten oberen Ecke gesendet &#8211; Konfiguration Stufe 3 kann gestartet werden<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_CONFIG_4<\/td>\n<td>wird als Antwort auf korrektes Tippen der linken unteren Ecke gesendet &#8211; Konfiguration Stufe 4 kann gestartet werden<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_CONFIG_COMPLETE<\/td>\n<td>Konfiguration erfolgreich beendet<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_RESTART_CONFIG_X<\/td>\n<td>Konfiguration neu starten, Fehler aufgetreten, x im falschen feld<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_RESTART_CONFIG_Y<\/td>\n<td>Konfiguration neu starten, Fehler aufgetreten, y im falschen Feld<\/td>\n<\/tr>\n<tr>\n<td>SENDKEY_RESTART_CONFIG_POSITION<\/td>\n<td>Konfiguration neu starten, Abweichung zwischen links\/rechts oder oben\/unten zu gro\u00df<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Der Aufruf der Funktion Calibrate aus der mclib.c ist sehr einfach; sie erwartet keine Eingaben und liefert auch nichts zur\u00fcck.<\/p>\n<pre><i>void<\/i> Calibrate(<i>void<\/i>)<\/pre>\n<p>Die Konfiguration wird dann durchgef\u00fchrt und kann durch Dr\u00fccken des &#8222;OK&#8220;-Knopfes auf der Pulttastatur jederzeit abgebrochen werden.<\/p>\n<p><a title=\"Mikrocontroller-Lab 2.0\" href=\"http:\/\/www.brennecke.org\/?page_id=2396\">Zur\u00fcck zur Hauptseite<\/a><\/p>\n<div class=\"twoclick_social_bookmarks_post_2524 social_share_privacy clearfix 1.6.4 locale-de_DE sprite-de_DE\"><\/div><div class=\"twoclick-js\"><script type=\"text\/javascript\">\/* <![CDATA[ *\/\njQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_2524')){$('.twoclick_social_bookmarks_post_2524').socialSharePrivacy({\"services\":{\"facebook\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Facebook senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"action\":\"recommend\",\"language\":\"de_DE\"},\"twitter\":{\"reply_to\":\"\",\"tweet_text\":\"Die%20Funktionen%20im%20Einzelnen%20%C2%BB%2053%20Cent\",\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Twitter senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"language\":\"de\",\"referrer_track\":\"\"},\"gplus\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Google+ senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"referrer_track\":\"\"},\"flattr\":{\"uid\":\"\",\"status\":\"on\",\"the_title\":\"Die%20Funktionen%20im%20Einzelnen\",\"the_excerpt\":\"Grunds%C3%A4tzliches%0D%0ADie%20Grafikschnittstelle%20besitzt%20zwei%20Ebenen%3A%0D%0A%0D%0A%09In%20der%20Hauptebene%20werden%20die%20einzelnen%20Funktionen%20bestimmt%20%28z.B.%20Aktivieren%20des%20Terminalmodus%29.%20Aus%20dem%20jeweils%20aktiven%20Modus%20kommt%20man%20immer%20heraus%2C%20indem%20man%20das%20Kommando%20MODE_QUIT%20sendet.%20Dann%20muss%20man%20einen%20neuen%20Modus%20w%C3%A4hlen.%0D%0A%09Jede%20Unterebene%20besitzt%20eigene%20Kommandos%2C%20die%20nur%20hier%20gelten.%20Sie%20sollten%20-%20obwohl%20m%C3%B6glicherweis%20...\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Flattr senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\"}},\"txt_help\":\"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \\u00fcbertragen und unter Umst\\u00e4nden auch dort gespeichert. N\\u00e4heres erfahren Sie durch einen Klick auf das <em>i<\\\/em>.\",\"settings_perma\":\"Dauerhaft aktivieren und Daten\\u00fcber-tragung zustimmen:\",\"info_link\":\"http:\\\/\\\/www.heise.de\\\/ct\\\/artikel\\\/2-Klicks-fuer-mehr-Datenschutz-1333879.html\",\"uri\":\"https:\\\/\\\/www.brennecke.org\\\/?page_id=2524\",\"post_id\":2524,\"post_title_referrer_track\":\"Die+Funktionen+im+Einzelnen\",\"display_infobox\":\"on\"});}});\n\/* ]]> *\/<\/script><\/div>","protected":false},"excerpt":{"rendered":"<p>Grunds\u00e4tzliches 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\u00e4hlen. &hellip; <a href=\"https:\/\/www.brennecke.org\/?page_id=2524\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2396,"menu_order":7,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2524"}],"collection":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2524"}],"version-history":[{"count":6,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2524\/revisions"}],"predecessor-version":[{"id":2533,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2524\/revisions\/2533"}],"up":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2396"}],"wp:attachment":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}