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.