Dneska si ukážeme jak pomocí LED diod vytvořit běžící světlo. Pro začátek vytvoříme pole výstupních portů LedBar, nad kterými budeme provádět v cyklu změny hodnot a tím zhasínat a rozsvěcet jednotlivé ledky. Toto pole inicializujeme v metodě Init a do každé jeho buňky vytvoříme novou instanci výstupního portu. Jako parametr použijeme jednu z hodnot pole PinList, která obsahuje názvy jednotlivých pinů, ke kterým jsme ledky připojily. Na ukázku zde uvádím dvě metody WormMove a KnightRider.
WormMove posouvá rozsvícenou Led diodu zleva doprava a jakmile narazí na konec, tak začne od začátku. Metoda KnightRider na konci řady ledek otočí směr a posouvá světlo na druhou stranu. Zpoždění mezi jednotlivými změnami je možné nastavit konstantou Speed.
Zapojení:
Do nepájivého pole zapojíme osm super svítivých LED diod, tak aby jejich katoda byla zapojena do minusové lišty. Anody propojíme s NetDuinem a každou zapojíme do jednoho digitálního výstupu od D6 po D13. Nakonec propojíme zem s minusovou napájecí lištou nepájivého pole.
Sestavení tohoto zapojení Vám nezabere více než tři minuty.
Video:
Zdrojový kód:
namespace Lekce03 { using System; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware.NetduinoPlus; public class Program { private const int Speed = 100; private static readonly Cpu.Pin[] PinList = new Cpu.Pin[] { Pins.GPIO_PIN_D13, Pins.GPIO_PIN_D12, Pins.GPIO_PIN_D11, Pins.GPIO_PIN_D10, Pins.GPIO_PIN_D9, Pins.GPIO_PIN_D8, Pins.GPIO_PIN_D7, Pins.GPIO_PIN_D6 }; private static readonly OutputPort[] LedBar = new OutputPort[8]; private static DateTime nextStep; private static int idx = 0; private static bool direction = true; public static void Main() { Init(); while (true) { WormMove(); // KnightRider(); } } private static void Init() { for (int n = 0; n < LedBar.Length; n++) { LedBar[n] = new OutputPort(PinList[n], false); } nextStep = DateTime.Now; } private static void KnightRider() { if (nextStep < DateTime.Now) { if (direction) { LedBar[idx].Write(false); idx++; LedBar[idx].Write(true); } else { LedBar[idx].Write(false); idx--; LedBar[idx].Write(true); } idx = idx % LedBar.Length; if (idx == 0 || idx == LedBar.Length - 1) { direction = !direction; } nextStep = DateTime.Now.AddMilliseconds(Speed); } } private static void WormMove() { if (nextStep < DateTime.Now) { LedBar[idx].Write(false); idx++; idx = idx % LedBar.Length; LedBar[idx].Write(true); nextStep = DateTime.Now.AddMilliseconds(Speed); } } } }
V dalším díle se podíváme jak zjistit stav tlačítka.
Zdrojové kódy ze všech lekcí jsou dostupné na https://csharpduino.codeplex.com/
Budu rád za každý komentář a konstruktivní kritiku.