Tento tutoriál demonstruje použití dvou důležitých funkcionalit (Timeru a Tickeru), které lze využít k přesnému časování periodických i aperiodických událostí, bez toho abychom ovlivnili program vykonávaný v hlavním vlákně loop().
Použitý hardware
IODAG3E
1kΩ rezistor
LED
Schéma zapojení
Anoda LED je zapojena na pin X01. Katoda je přes resistor 1kΩ připojena k zemi (pinu GND).
Funkce
Následující program bliká LED diodou určitou frekvencí bez toho abychom omezili hlavní vlákno, můžeme přistupovat dvěma způsoby. První způsob je použít Timer (Časovač), který lze spustit a pozorovat překročení dané doby. Druhým způsobem je využít Ticker, který cyklicky danou dobu volá zadanou funkci.
Code
1. Program s Timerem
/**BlinkWithoutDelay *Turns on and off a light emitting diode (LED) connected to a digital pin, *without using the delay() function. This means that other code can run at the *same time without being interrupted by the LED code. */#include"byzance.h"// Include libraries for IODADigitalOutledPin(X01); // Set pin Y25 for led.Serialpc(SERIAL_TX,SERIAL_RX); // Defines the comunication interface if the serial line , SPI, CAN is needen in the program.Timer casovac;voidinit(){ // The init routine runs only once when you press reset.pc.baud(115200); // Set baud rate.casovac.start();}voidloop(){if(casovac.read()>2){ ledPin=!ledPin;casovac.reset(); }}
Serialpc(SERIAL_TX,SERIAL_RX); DigitalOutLedPin(X01); // Set the digital output pin.Timer casovac;
Při každém spuštění programu se nejprve provede funkce init(), která primárně slouží k inicializaci všech objektů a proměnných.V tomto programu pouze inicializujeme rychlost sériové linky a spustíme časovač.
voidinit(){ // The init routine runs only once on the begin of the programpc.baud(115200); // Set baud rate.casovac.start(); // Start timer }
V hlavní části programu je pouze podmínka, která je splněna v případě, že časovač je spuštěn déle než 2 sekundy. Jestliže je podmínka splněna, změní se stav na LED diodě (zhasnout/rozsvítit) a resetuje se časovač aby počítal opět od nuly.
/**BlinkWithoutDelay *Turns on and off a light emitting diode (LED) connected to a digital pin, *without using the delay() function. This means that other code can run at the *same time without being interrupted by the LED code. */#include"byzance.h"// Include libraries for IODADigitalOutledPin(X01); // Set pin Y25 for led.Serialpc(SERIAL_TX,SERIAL_RX); // Defines the comunication interface if the serial line , SPI, CAN is needen in the program.Ticker ticker;voidblink_led(){ ledPin=!ledPin;}voidinit(){ // The init routine runs only once when you press reset.pc.baud(115200); // Set baud rate.ticker.attach(blink_led,2); // Attach to ticker function led() and call it each 2 seconds}voidloop(){}
U tohoto programu místo Timeru definujeme Ticker.
Serialpc(SERIAL_TX,SERIAL_RX); DigitalOutLedPin(X01); // Set the digital output pin.Ticker casovac;
V programu dále definujeme novou funkci blink_led() , kterou bude Ticker volat.
voidblink_led(){ ledPin=!ledPin;}
Při každém spuštění programu se nejprve provede funkce init(), která primárně slouží k inicializaci všech objektů a proměnných.Zde inicializujeme rychlost sériové linky a nastavíme Ticker, aby volal funkci led(), každé 2 sekundy
voidinit(){ // The init routine runs only once on the begin of the programpc.baud(115200); // Set baud rate.ticker.attach(led,2);}
V hlavní smyčce loop(), se poté mohou provádět libovolně jiné operace.