Toto je starší verze dokumentu!
Obsah
MMDL - Mypower Microlog Display Language
Popis jayzka
MMDL je jednoduchý programovací jazyk, určený pro specifikaci chování displaye v projektu Mypower Microlog. Sestává ze dvou sekcí. První sekcí jsou matematické výpočty hodnot, definice a nastavení hodnot proměnných. Druhou sekcí je vlastní obsah jednotlivých stránek displaye a nastavení funkcí ovládacích tlačítek displaye.
Ukázky programu
Komentáře
Komentáře jsou v programu realizovány pomocí „/⁄
“ na začátku rádku. Vše s „/⁄
“ na začátku je považováno za komentář a ignorováno.
Příklad komentáře v programu
// Obrazovky displaye
Pozor! Komentáře na konci řádku nejsou funkční a jsou chápány jako syntaktická chyba
Příklad chybného komentáře v programu
$win = $win1 + $win2 // soucet vykonu
Znak „/“ je zde chápán jako operátor dělení. „/⁄
“ musí být uveden na začátku řádku.
Proměnné
Definice proměnných
- $ Začátek proměnné.
- @ Modifikátor určující že hodnota proměnné bude načtena z HW, například z analogového vstupu.
- a .. z, A .. Z, 0 .. 9, _ název proměnné.
- . Modifikátor určující počet desetinných míst v sekci pro definici obrazovek displaye.
- # Modifikátor vynucující ukončení názvu proměnné v sekci pro definici obrazovek displaye.
Základní proměnné
Proměnné začínají znakem „$“. Za tímto znakem se nachází název proměnné. V sekci pro výpočty název proměnné končí první mezerou, nebo znakem jiným než výše uvedené znaky pro název proměnné. Modifikátor pro desetinné místa i modifikátor vynucující ukončení je v sekci pro výpočty ignorován.
Příklady definice proměnných:
$uFV1 $uFV2 $iarray
Speciální proměnné
Speciální proměnné se vyznačují použitím modifikátoru „@“. Jako hodnota proměnné bude použita aktuální hodnota na vstupu HW, nebo systémová proměnná, například aktuálně naměřená hodnota analogového vstupu dle jeho aktuálního nastavení, čas, datum, atd. Znakem následujícím pro modifikátoru „@“ je typ hodnoty, která má být použita.
Analogové vstupy
Následující příklady jsou různé hodnoty pro analogový pin 11.
$@a11 => průměrná hodnota z převodníku pinu 11, například 578 $@r11 => efektivní hodnota z převodníku pinu 11, například 572 $@s11 => okamžitá hodnota z převodníku pinu 11, například 570 $@m11 => minimální hodnota z převodníku pinu 11, například 27 $@x11 => maximální hodnota z převodníku pinu 11, například 762
$@A11 => propočtená průměrná hodnota dle nastavení rozsahu pro pin 11, například 13.753 $@R11 => propočtená efektivní hodnota dle nastavení rozsahu pro pin 11, například 231.2 $@S11 => propočtená okamžitá hodnota dle nastavení rozsahu pro pin 11, například 12.302 $@M11 => propočtená minimální hodnota dle nastavení rozsahu pro pin 11, například 21.552 $@X11 => propočtená maximální hodnota dle nastavení rozsahu pro pin 11, například 325.622
Datum a čas
(od verze 2.04)
$@Td => Den včetně dodatečné nuly. 01 - 31 $@Tj => Den. 1 - 31 $@Tm => Měsíc včetně dodatečné nuly. 01 - 12 $@Tn => Měsíc. 1 - 12 $@TY => Čtyřciferný rok. 2013 $@Ty => Dvojciferný rok. 13 $@Tg => Hodiny ve dvanáctihodinovém času. 1 - 12 $@TG => Hodiny ve čtyřiadvacetihodinovém času. 0 - 23 $@Th => Hodiny ve dvanáctihodinovém času včetně dodatečné nuly. 01 - 12 $@TH => Hodiny ve čtyřiadvacetihodinovém času včetně dodatečné nuly. 00 - 23 $@Ti => Minuty včetně dodatečné nuly. 00 - 59 $@Ts => Sekundy včetně dodatečné nuly. 00 - 59
Příklad zobrazení data a času
# $@Td#.$@Tm#.$@TY $@TH:$@Ti:$@Ts
Výsledek:
12.09.2013 17:28:16
Příklad výpočtu počtu sekund od půlnoci a zobrazení času
$whrs = $@TH * 3600 $wmin = $@Ti * 60 $wx = $@Ts + $wmin + $whrs # cas:|$@TH:$@Ti:$@Ts sekund:|$wx.R
Výstup:
cas: 01:08:58 sekund: 4138
Modifikátor počtu desetinných míst
Proměnné v sekci pro stránky displaye může pomocí speciálního modifikátoru určit, kolik desetinných míst, či v jakém formátu bude číslo zobrazeno. $X je proměnná.
Pravidla
- $X.0 zobrazí pouze celou část čísla. Například 17
- $X.1 až $X.4 zobrazní 1 - 4 desetinná místa s doplněním zbývajících nul do požadovaného počtu desetinných míst. Například 17.85 pro $X.2
- $X. zobrazí automatický počet desetinných míst. 0 - 4, bez zbývajících nul.
- (od verze 2.04)
- $X.R zobrazí celou část čísla. Narozdíl od výše uvedených se neprovádí se úprava na jednotky k, M, G, T.
Příklad programu
$x1 = 17.8523 $x2 = 2000 $x3 = 975231.667 # Test desetin- nych mist # $x1 | $x1.0 $x1. | $x1.1 # $x1.2 | $x1.3 $x1.4 | $x1.5 # $x1.R | :) --- # $x2 | $x2.0 $x2. | $x2.1 # $x2.2 | $x2.3 $x2.4 | $x2.5 # $x2.R | :) --- # $x3 | $x3.0 $x3. | $x3.1 # $x3.2|$x3.3 $x3.4|$x3.5 # $x3.R | :) ---
Sekce
Výpočty
Sekce výpočtů slouží pro přípravu a kalkulaci hodnot před jejich použitím pro zobrazení na displayi. Pro výpočty se používají základní matematické rovnice s použitím matematických operátoru pro součet +
, rozdíl -
, násobení *
a dělení /
.
Příklad sekce výpočtů
$wIN1 = $@A10 * $@A11 $wIN2 = $@A12 * $@A13 $wINsum = $wIN1 + $wIN2
Popis řádků:
$wIN1 = $@A10 * $@A11
Do proměnné $wIN1 ulož součin proudu měřeného na analogovém pinu 10 a napětí měřeném na pinu 11. Použij reálné hodnoty proudu a napětí přepočtené z hodnot převodníků na reálné hodnoty dle rozsahu v nastavení pro pin 10 a 11.
$wIN2 = $@A12 * $@A13
Do proměnné $wIN2 ulož součin proudu měřeného na analogovém pinu 12 a napětí měřeném na pinu 13. Použij reálné hodnoty proudu a napětí přepočtené z hodnot převodníků na reálné hodnoty dle rozsahu v nastavení pro pin 12 a 13.
$wINsum = $wIN1 + $wIN2
Do proměnné $wINsum ulož součet výsledných výkonů $wIN1 a $wIN2
Stránky
Sekce pro definici stránek slouží pro nastavení obsahu jednotlivých stránek displaye. Stránky jsou uloženy v pořadí za sebou. Ve stejném pořadí budou zobrazeny po stisku tlačítek UP
a DOWN
na LCD Keypad Shield displayi.
Každá stránka začíná symbolem #
. Za tímto znakem může následovat jedno z písmen R
, L
, nebo S
, které značí tlačítko (Right
, Left
, nebo Select
) po jehož stisku bude stránka okamžitě zobrazena. Tlačítka Up
a Down
si zachovávají svou funkci a jsou použita pro listování mezi stránkami v pořadí tak jak jsou napsány v programu pro display.
Příklad definice stránky s možností ji vyvolat pomocí tlačítka Right
:
#R Toto je stranka po stisku RIGHT
Běžná stránka je bez definice tlačítka
# Toto je bezna stranka....
Zarovnání textu se provádí pomocí rozdělení řádku znakem „|“. Vše vlevo od znaku „|“ je zarovnáno vlevo, vše vpravo je zarovnáno vpravo. Řádek, který neobsahuje znak „|“ je zarovnán na střed.
# Centrovano Vlevo|Vpravo
Proměnné je možno použít pomocí znaku $
. Pokud je potřeba bezprostředně za proměnnou vložit text a je potřeba ukončit název proměnné, je možno použít znak #
. například pro text 12.25V potřebujeme za proměnnou vložit jednotku „V“. Proměná, do které jsme si v sekci výpočtů připravili napětí na bateriích se jmenuje $uBat
. Definice $uBat V
by vygenerovala text 12.25 V. Bez mezery dostáváme neexistující název proměnné $uBatV
. Proto v těchto případech použijeme znak #
, čímž určíme, kde končí název proměnné, tedy $uBat#V
vygeneruje text 12.25V.
Pro definici počtu desetinných míst použijeme znak .
. Pro jedno desetinné místo použijeme výraz $uBat.1
. Výsledkem může být například 12.2. Pro 0 desetinných míst použijeme $uBat.0
. Pro automatický počet desetinných míst znak .
neuvedeme. V kombinaci se specifikací počtu desetinných míst se ukončení názvu proměnné nepoužívá. Je možno použít $uBat.3V
, což vygeneruje 3 desetinná místa 12.253V.
# Baterie|$uBat.2V Spotreba|$woutSUM#W
Příklady pro datum a čas (od verze 2.04)
# Menic:| $wAC3k.2W Cas: | $@TH:$@Ti
Výsledek:
Menic: 0.00W Cas: 17:29
–
# Moje FVE $@Td#.$@Tm#.$@TY
Výsledek:
Moje FVE 12.09.2013
–
# Datum a cas $@Td#.$@Tm#.$@TY $@TH:$@Ti
Výsledek:
Datum a cas 12.09.2013 17:29
–
# Datum|$@Td#.$@Tm#.$@TY Cas|$@TH:$@Ti:$@Ts
Výsledek:
Datum 12.09.2013 Cas 17:31:15