====== 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é [[#vypocty|výpočty]] hodnot, definice a nastavení hodnot proměnných. Druhou sekcí je vlastní obsah jednotlivých [[#stranky|stránek]] displaye a nastavení funkcí ovládacích tlačítek displaye.
{{http://mypower.cz/docs/ulog/t4-display1602.png?600}}
===== Ukázky programu =====
* [[mmdl:examples:helloworld|Hello World!]]
* [[mmdl:examples:clock|Datum a čas na displayi]]
* [[mmdl:examples:numberformat|Test formátu čísel]]
* [[mmdl:examples:defaulttest|Test všech základních funkcí obsluhy displaye]].
===== 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.
Příklad **korektního** komentáře v programu
// soucet vykonu
$win = $win1 + $win2
===== 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. Může následovat číslo 0 .. 4 nebo písmeno R.
* **#** 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
V názvech proměnných jsou rozdílně vnímána malá a velká písmena. Proměnné $UFV a $uFV jsou dvě zcela odlišné proměnné
==== 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í, nebo také č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
Další příklady pro [[mmdl:examples:clock|datum a čas na displayi]].
==== 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** zobrazí 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.
[[mmdl:examples:numberformat|Test formátu čísel]]
===== 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 a následuje bezprostředně za sekcí určenou pro výpočty. 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.
=== Definice stránky ===
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....
Poznámka: V případě, že se v programu vyskytne více stránek s definicí pro jedno a totéž tlačítko, bude zobrazena ta stránka, která je umístěna v programu nejdříve. Ostatní jsou ignorovány ((TODO: v případě více stránek se stejným označením by mohly stránky rotovat. Dvě stránky označené R by byly stiskem každým RIGHT přepínány .... hmmm... ? :) ))
=== Zarovnání textu ===
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é ===
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.
=== Formát čísel ===
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
=== Datum a čas ===
Příklady pro datum a čas (od verze 2.04)
#
Menic:| $wAC3k.2W
Cas: | $@TH:$@Ti
Výsledek:
Menic: 0.00W
Cas: 17:29