Department of InformatiX
Microsoft .NET Micro Framework Tools & Resources

Funkční třídy k dalšímu použití

ButtonTextBoxDemo.zip 6. prosince 2008; .zip; 25,4 kB

Screenshot ButonTextBoxu

První ovládací prvek, který umožňuje uživatelům zadávat do aplikace textové informace, a to pomocí tlačítek. Má událost TextChanged, podporuje výběr, režim vkládání/přepisu, omezení vstupu na čísla nebo délku, nebo třeba maskování znaků pro zadávání hesel. Text lze sice zarovnat i doprostřed a zprava, ale v takovém případě si zatím neporadí s vykreslováním textu delším než je rámeček. Rovněž nepodporuje víceřádkový text ani zalamování. Projekt obsahuje zdrojový, plně okomentovaný kód text boxu a pomocných tříd, a demo aplikaci pro standardní emulátor od Microsoftu. Na samotnou třídu ButtonTextBox se můžete podívat také zde.

Aktualizace: podpora 3.0 i 2.x, demo projekt upraven pro 3.0.

DayTime.cs 16. dubna 2008; .cs; 29,4 kB

Tato struktura je určena k reprezentaci denního času, v rozsahu 00:00 - 24:00 s přesností na milisekundy. Metody pro jednoduché operace jako AddHour() ji dělají snadno použitelnou při ovládání malým počtem tlačítek. Obsahuje XML dokumentaci.

Dcf77Decoder.zip 6. prosince 2008; .zip; 5,5 kB

Většina dostupných desek nemá zálohovaný zdroj času, a proto při každém spuštění je systémový čas (Utility.GetMachineTime()) nastaven na 1.1.2004. V současné době lze sehnat aktuální čas dvěma způsoby - buď pomocí GPS, nebo z některého ze signálu vysílaném na rádiových vlnách (kompletní seznam na wikipedii). Pokud jste někdy zkoušeli spustit GPS modul v budově, natož bez externí antény a nejlépe v podzemním podlaží, nejspíš víte, že u tohoto systému existují drobné potíže se signálem.

Abyste mohli svá zařízení provozovat i uvnitř budov a v husté zástavbě, nezbývá tedy, než si vystačit se signálem rádiovým. Jedním z takových signálů je právě kód DCF-77, vysílaný z vysílače poblíž Frankfurtu (dosah asi 2500 km). Firma Conrad prodává malou desku s demodulátorem tohoto signálu, který lze připojit rovnou na vstup procesoru se zapnutým pull-up rezistorem (a to výstup invertovaný). Tato třída je schopna signál dekódovat, včetně kontroly parity. Jako bonus umožňuje na výstupním portu zobrazovat přijímaný signál, čímž lze snadno ověřit funkčnost zapojení samotného modulu.

Aktualizace: upraveno pro 3.0, implementována možnost volby pull-up rezistorů.

Logaritmus 22. července 2008; .cs; 4,4 kB

(budete ještě potřebovat IEEE.Single.cs) Ačkoliv máme dvě třídy Math, ani jedna neobsahuje logaritmus. Po několika náročných dnech se mi podařilo implementovat algoritmus, který popsal Keith Larson v dokumentu Fast Logarithms on a Floating-Point Device. Využívá binárního zápisu desetinného čísla a floating-point jednotky procesoru k urychlení výpočtu. Třída obsahuje metody Log2, Log, Log10 pro počítání logaritmů dvojkových, přirozených resp. desítkových, a FastLog2 k velmi rychlému odhadu dvojkového logaritmu (v konstantním čase). Bohužel jelikož nemáme k dispozici unsafe kód, musel jsem ho nahradit trikem se serializací, který doufám, že není příliš pomalý. Logaritmus je nyní počítán s jednoduchou přesností (tj. typ float), který je pro procesory nativní. Přesnost lze ještě dále upravit oddefinováním smybolu HIGH_PRECISION, čímž se výpočet zkrátí zhruba o čtvrtinu a přesnost klesne z možných 23 bitů na 21 bitů. Pokud někdo bude potřebovat logaritmovat double k, dejte vědět, ale jelikož je tento typ emulován prostředím, budou výpočty nejspíš pomalejší.

Maticová klavesnice 6. prosince 2008; .zip; 6,4 kB

Jednoduchý ovladač a input manager pro připojení maticové klávesnice. Třídy zatím nejsou bohužel okomentovány, ale jejich základní funkčnost je shrnuta v tomto článku.

Aktualizace: upraveno pro 3.0.

NoritakeDisplay.zip 6. prosince 2008; .zip; 10,6 kB

Firma Noritake-Itron vyrábí vakuové fluorescenční displeje (VFD, u nás zastoupená firmou Quittner & Schimek). Mají různá rozlišení, schopnosti a rozhraní, můžete jich zapojit i více najednou. Nejlepší je, že příkazy jsou pro všechny displeje stejné. Zpřístupnil jsem většinu z nich v této třídě, chybí akorát uživatelská nastavení, podpora maker a GPIO, což mají až dražší řady displejů. Pokud by někdo měl o implementaci zájem, rád dopíši. Obsahuje XML dokumentaci v angličtině odpovídající datasheetům.

Aktualizace: upraveno pro 3.0.

Panels.zip 8. dubna 2008; .zip; 4,1 kB

Jak jste si již možná všimli, .NET Micro Framework přicházi pouze s minimálním vybavením, co se týče panelů. Mám takové podezření, že je to kvůli absenci pravých DependencyProperties a AttachedProperties.

S pomocí Reflectoru dávám dohromady základní panely, které v .NET Micro Frameworku chybí. Zatím je k dispozici DockPanel a WrapPanel, další můžeme zkusit podle zájmu. Důležitá poznámka pro práci s DockPanelem: HorizontalAlignment a VerticalAlignment nastavené na Stretch nejsou vždy brány v potaz (což považuji tak trochu za bug). Pokud tedy chcete využívat zaplnění zbývající plochy ovládacím prvkem, pravděpodobně jej budete muset zdědit a upravit ArrangeOverride.

SerialInterruptPort.cs (2.x runtime) 11. května 2008; .cs; 36,6 kB

Detailně okomentovaná (zatím jen anglicky) třída, která se snaží vyplnit nedostatky SerialPortu ve frameworku verze 2.5. Implementuje:

Pokud potřebujete jen číst a psát po řádkách, doporučuji Pavlovu třídu. V nadcházející verzi frameworku snad již nebude podobných tříd za potřebí.

UrlDecode 20. července 2008; .cs; 2,9 kB

I téměř na tom nejjednodušším serveru je při zpracovávání webových požadavků potřeba dekódovat URL, jelikož prohlížeče adresy a hodnoty formulářů kódují. V .NET Frameworku je na to třída System.Web.HttpUtility, kterou ovšem nemáme. Nabízím tedy odlehčenou verzi metody UrlDecode. Funkčně je totožná s plnou verzí, ale podporuje pouze kódování UTF8 a konverze pro jednoduchost probíhá bez pomoci UrlDecoderu.

Experimentální třídy - pracovní nápady

AnimatedCanvas.cs 17. června 2009; .cs; 2,5 kB

Jednoduchá třída ukazující jak animovat pozadí ovládacích prvků bez pozadí obrázkami z resources. Do konstruktoru nastavíte interval mezi snímky a ID prvního a posledního snímku. ID snímků mezi nimi musí být popořadě, v tomto článku najdete jak toho docílit. A nezapomeňte zavolat metodu Play()! Pokud ovšem máte více snímků v jedné bitmapě, Pavlův příklad bude pro vás asi užitečnější.

WPF emulátor s podporou displeje 29. března 2009; .zip; 102,2 kB

Při tvorbě emulátoru je snad jen jediný prvek, který je třeba implementovat výrazně jinak než v případě Windows Forms - a tím je LCD displej. Ukázkový projekt WPF emulátoru (jen) s displejem, plně okomentovanou třídou a náznakem, jak je ve WPF možné využít data binding. Tento příklad není implementovan dle žádného sofistikovaného modelu, zkrátka to nejjednodušší fungující řešení. Emulátor se sám neregistruje, je spíše pro příklad - ve vlastnosteh projektu je ke spuštění třeba nastavit parametry příkazové řádky k načtení nějakého .NET Micro Framework projektu.

Konzolové okno 11. ledna 2008; .zip; 96,3 kB

Pokud vyvíjíte aplikaci pro zařízení bez displeje, ale máte k dispozici displej na vývojové desce, nebo pokud ji potřebujete vyzkoušet bez připojeného Visual Studia, můžete využít toto konzolové okno i s hodinami. Stačí přidat referenci a použít Console.WriteLine(string). Soubor obsahuje zdrojový kód a příklad použití. Upozornění: zatím není možné "konzoli" používat současně v jiné grafické aplikaci.

Ovládací prvek Oscilloscope 6. prosince 2008; .zip; 13,2 kB

Screenshot Oscilloscope

Příklad toho, jak vykreslovat signály na displej. Ovládací prvek umožňuje automaticky signál překreslovat, posouvat jej a měnit přiblížení nezávisle v obou osách, stanovit počátek os, interval mřížky a zobrazovat popisky. Jako zdroj signálu lze použít cokoliv, co zdědí třídu abstraktní třídu SignalSource a implementuje metodu GetValue(float x). Každému signálu lze přiřadit název, barvu/pero, viditelnost a obor jak hodnot, tak definiční. Implementoval jsem pro vás čtyři typy takových signálů:

V souboru je testovací projekt, ze kterého obrázek pochází. Ovládání na standardním emulátoru od Microsoftu:

Aktualizace: demo projekt upraven pro 3.0.

ParallelOutputPort.cs 6. prosince 2008; .cs; 2,5 kB

Umožňuje sdružit několik pinů do jednoho "paralelního" portu, a zapisovat na ně tak čísla v bitové reprezentaci (bez úprav používá třídu PortStore). Bohužel zápis na jednotlivé piny v managed kódu je tak pomalý, že i se sériovým rozhraním se vám podaří dosáhnout vyšší propustnosti dat. Navíc od ostatních implementací (např. Pavla Banského zde) umožňuje tato třída jednak speciálním vstupem přerušit zapisování hodnot (busySignal), a pak na speciálním výstupu indikovat, že je již hodnota zapsána na všech pinech (dataReady). Pokud potřebujete z více pinů data číst, zkuste např. Pavlovu MultiInputPort.

Aktualizace: upraveno pro 3.0, přidán ekvivalentní kód bez PortStore v komentáři.

PortStore.cs 15. dubna 2008; .cs; 3,7 kB

Pokud vám nevyhovuje filosofie deklarování a uvolňování portů během programu, můžete využít principu naznačeného v této statické třídě. V praxi jsou vstupy a výstupy na hardware většinou předem pevně dány po celou dobu provozu. Tato třída má metody GetInput(Cpu.Pin), GetOutput(Cpu.Pin) a GetTristate(Cpu.Pin) která buď vrátí instanci vstupního, výstupního resp. obousměrného portu, pokud byl již použit, nebo vytvoří novou. Analogicky lze přidat i porty s přerušením, u kterých to však většinou není nutné. Třídu lze velmi dobře použít k manipulaci s porty z více vláken současně.

Comments
Sign in using Live ID to be able to post comments.