RIC-Beispiel: Voltmeter
Ein weiteres praktisches Beispiel für den Einsatz eines RIC-Datei ist die Anzeige für ein Voltmeter (oder auch Amperemeter, wenn die Beschriftung geändert wird. Für die Ausgabe der RIC-Datei wird nur ein Parameter benötigt, der für den Ausschlag des Zeigers benötigt wird. Die Skala im Display ist so gestaltet, dass sie von 0 bis 100 geht - entsprechend kann auch nur ein Wert von 0 bis 100 mitgegeben werden.
Aktiv enthält die RIC-Datei nur zwei Elemente, die etwas zeichnen - jedoch werden noch weitere Elemente benötigt, damit die Anzeige komplett dargestellt werden kann:
RIC-Element |
Realisierung |
Parameter |
Anmerkung |
Hintergrundbild für Display |
Sprite |
|
Enthält das Bild, welches im nächsten Element ausgegeben wird |
Ausgabe Display |
CopyBit |
|
Gibt das zuvor definierte Bild aus |
Umrechnungsfunktion X-Wert |
VarMap |
|
Basis für die Berechnung des Endpunktes der Linie |
Umrechnungsfunktion Y-Wert |
VarMap |
|
Basis für die Berechnung des Endpunktes der Linie |
Zeiger |
Line |
0 : Wert |
Prozentualer Wert für den Ausschlag des Zeigers |
Wird die RIC-Datei nun aufgerufen, dann wird folgende Grafik auf dem NXT-Bildschirm zu sehen sein:
Hier nun die notwendigen Schritte, um die RIC-Datei zu erstellen:
Schritt |
Beschreibung |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 |
Starten wir nun das Programm nxtRICeditV2 und beginnen mit einer neuen RIC-Datei |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 |
Einfügen eines neuen Sprite-Elements, welches die Grafik für das Hintergrundbild enthalten wird. Hierzu einfach einmal auf den Button mit folgendem Icon drücken:
Danach eine kleine Grafik mit folgendem Bild erstellen:
Wichtig ist, dass das Sprite-Element die Sprite-ID 1 bekommt!
Die Platzierung der Grafik auf der zur Verfügung stehenden Zeichenfläche ist nicht wichtig, da ohnehin nur die benutzten Punkte später abgespeichert werden. Sollten Fehler bei der Eingabe der Grafik gemacht werden, so können die Punkte einfach dadurch entfernt werden, wenn der benötigte Speicherplatz wieder minimiert wird:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 |
Für die Ausgabe des Sprites wird nun ein CopyBits benötigt, welches durch drücken des folgenden Buttons an das Ende der RIC-Liste angefügt wird:
In diesem Fall kann man es sich einfach machen, da das komplette Sprite ausgegeben werden soll. Darum können die Werte aus dem Sprite übernommen werden, indem man einfach folgenden Button drückt:
Danach wird das gesamte Sprite ausgewählt und an der relativen Position [ 0,0 ] ausgegeben. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 |
Als nächstes werden zwei VarMap-Elemente an das Ende der RIC-Elemente-Liste angehängt. Hierzu einfach zweimal auf den Button mit folgendem Icon drücken:
Die VarMap-Elemente werden dazu benutzt, den vorgegebenen Wert von 0 bis 100 in X- und Y-Koordinaten umzurechnen, so dass der Endpunkt des Zeigers bestimmt werden kann. Es ist nicht notwendig, dass man für alle 101 möglichen Positionen die X- und Y-Werte definiert. Es ist vollkommen ausreichend, wenn in 10er-Schritte die Stützwerte definiert werden. Die Positionen dazwischen werden über lineare Interpolation ermittelt.
Wichtig ist außerdem, dass die VarMap-Elemente mit 2 und 3 definiert werden, da die ID 1 bereits für das Sprite verwendet wurde. Daher sollten die beiden VarMap-Elemente wie folgt definiert sein:
Werte größer 100 werden wie der Wert 100 behandelt.
Um die Werte schneller in die Domain/Range-Liste des VarMaps eingeben zu können, kann man die 22 Werte einer VarMap-Liste markieren (Domain 0 bis 100 und die dazugehörigen Range-Werte) und in die Zwischenablage kopieren. Im VarMap-Element muss dann nur noch folgender Button gedrückt werden, der sich rechts neben der Domain/Range-Liste befindet:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 |
Als letztes RIC-Element wird Line eingefügt. Dieses Element verfügt, im Gegensatz zu den vier anderen RIC-Elementen, über einen dynamischen Teil: Dem Endpunkt für den Zeiger. Dieser Berechnet sich über die beiden zuvor definierten VarMap-Elementen. Das Line-Element wird über folgendes Icon angefügt:
Die Parameter für das RIC-Element Line müssen wie folgt gesetzt sein:
Achtung: Der Endpunkt verwendet VarMaps - die Angabe V[2:0] bedeutet, dass VarMap 2 und Parameter 0 für die Berechnung des Wertes zur Laufzeit verwendet wird! |
Nachdem nun alle notwendigen RIC-Elemente definiert wurden, kann das Ergebnis über folgenden Button betrachtet werden:
Wenn nun der Parameter 0 verändert wird, so wird das Preview sofort entsprechend aktualisiert. Entsprechend wird auch der Aufruf innerhalb eines Programms erfolgen. Das folgende Code-Fragment zeigt nun, wie das Voltmeter ausgegeben werden kann:
task main() int voltmeter[ 1 ];
voltmeter[ 0 ]= 30; // Pointer should show on value 30
// Draw complete Voltmeter-Display with one call of RIC file!
; |
Anmerkung: |
Wenn nun nicht nur ein Voltmeter, sondern ein anderes Messinstrument dargestellt werden soll, dann kann die Einblendung der Skala auch parametrisiert werden, indem das Sprite für die Skala neutral erstellt wird und die möglichen Werte für die Anzeige in einem zweiten Sprite hinterlegt werden.
Dieses zusätzliche CopyBits muss nun wie folgt definiert werden:
Achtung: Gelb markiertes Felde muss als Parameterwert definiert werden!
Somit sie die komplette RIC-Elemente-Liste wie folgt aus:
|
|
Die Verwendung des zusätzlichen Parameters sieht dann wie folgt aus:
|
|
#define
Scale_0_100_mV 0 #define Scale_Sound 36 #define Scale_Light 42
task main() int voltmeter[ 2 ];
voltmeter[ 0 ]= 30; // Pointer should show on value 30 voltmeter[ 1 ]= Scale_0_1_A; // Scale is 0 to 1 A
// Draw complete Voltmeter-Display with one call of RIC file!
; |
|
Ein ausführliches Beispiel, welches die Sensoren für Licht und Sound verwendet, findet sich im Beispielprogramm Voltmeter3.nxc
|