PWM Fade
Tento příklad demonstruje použití funkce PwmOut ke stmívání LED diody. PwmOut využívá pulzně šířkovou modulaci (PWM), pomocí, které lze modulovat analogovou hodnotu napětí na digitálním výstupu.
Použitý hardware
IODA
1000Ω rezistor
LED
kabely
nepájivé kontaktní pole
Schéma zapojení
Anoda LED je zapojena na pin X01 přes 1000Ω resistor. Katoda je připojena k zemi (pinu GND).

Funkce
U PWM lze nastavit dva parametry - frekvenci a střídu. Frekvence nastavuje periodu pulzů a v tomto příkladě jí nastavíme dostatečně vysokou, aby lidské oko nebylo schopné zaznamenat rychlé blikání s LED diodou. Střída nastavuje poměr mezi zapnutím a vypnutím, tedy dobou, kdy je během jedné periody digitální výstup nastaven na logickou úroveň 1 a logickou 0. Tato hodnota určuje stmívání LED. V následujícím programu je nastavena fixní perioda na 0,01s (100Hz) a postupnou změnou střídy se LED dioda nejprve rozsvěcí a poté stmívá.
Code
/**Fade
*This example shows how to fade an LED on pin X01 using the
*PWM function.
*/
#include "byzance.h" // Include libraries for IODA
Serial pc(SERIAL_TX, SERIAL_RX); // Defines the comunication interface if the serial line , SPI, CAN is needen in the program.
PwmOut aout(X01); // Set pin X01 for led.
void init(){ // The init routine runs only once when you press reset.
pc.baud(115200); // Set baud rate.
aout.period(0.01f); // Set the period(frequency) of PWM output to 0,01s (100Hz)
}
void loop(){ // The loop routine runs over and over agin forever
for(float offset=0.0; offset<=1; offset+=0.01) {
aout.write(0.005 + offset);
Thread::wait(25);
}
for (float offset = 1.0 ; offset >= 0 ; offset -= 0.01) {
aout.write ( 0.005 + offset );
Thread::wait(10);
}
}
V hlavičce programu je nutné importovat knihovny Byzance Hardware API a Mbed API. pomocí
#include "byzance.h"
Poté nasleduje konstruktor definující objekt sériové linky.
Serial pc(SERIAL_TX, SERIAL_RX);
Nastavení PWM výstupu na pinu Y25 .
PwmOut aout(Y25); // Set pin Y25 for led.
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 inicializujeme rychlost komunikace sériové linky a nastavujeme frekvenci PWM na 100Hz.
void init(){ // The init routine runs only once on the begin of the program
pc.baud(115200); // Set baud rate.
aout.period(0.01f); // Set the period(frequency) of PWM output to 0,01s (100Hz)
}
v hlavní smyčce loop()
poté definujeme cyklus for, ve kterém postupně zvyšujeme střídu PWM na výstupu aout, čímž rozsvěcíme LED diodu. Obdobný cyklus později využíváme i ke zmenšování střídy (stmívání LED).
for(float offset=0.0; offset<=1; offset+=0.01) {
aout.write(0.005 + offset);
Thread::wait(25);
}
Změnu hodnoty střídy PWM aout provádíme pomocí příkazu
aout.write(0.005 + offset);
Last updated