Pulsating LED - Fading with PWM
Eine LED mit Pulsweitenmodulation heller und dunkler werden lassen
Choose a microcontroller
Pins, schematic, and sketch in the steps change with your selection. It remains saved.
Warum es PWM braucht
Verkabeln und programmieren
Pin assignment Arduino UNO
Beim Arduino UNO schreibst du die Pin-Nummer direkt in den Sketch, also 5 und 7 ohne Zusatz.
int LED = 6; // Das Wort "LED" steht jetzt für den Pin 6
// Fadeschritte bestimmt die Geschwindigkeit des Fadens.
int Fadeschritte = 5;
// "Helligkeit" steht für den Wert, der bei der PWM ausgegeben wird.
// Die 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;
void setup()
{
// Für analogWrite ist kein Setup notwendig.
}
void loop()
{
/*
analogWrite aktiviert an der LED die PWM-Funktion. Ausgegeben wird der Wert,
der unter dem Namen "Helligkeit" gespeichert ist - beim ersten Durchlauf also 0.
*/
analogWrite(LED, Helligkeit);
/*
Nun wird der Wert für die Ausgabe verändert: Zur bisherigen Helligkeit kommen
die Fadeschritte dazu, beim ersten Mal also 0 + 5 = 5. Der loop-Teil wiederholt
sich, danach beträgt die Helligkeit 10, dann 15 und so weiter.
*/
Helligkeit = Helligkeit + Fadeschritte;
// Die LED behält die Helligkeit 25 Millisekunden lang, also nur ganz kurz.
// Ein kleinerer Wert lässt die LED schneller pulsieren.
delay(25);
/*
Hat die Helligkeit den Wert 0 oder (||) 255 erreicht, wechselt das Vorzeichen
der Fadeschritte. Die LED wird also zuerst bei jedem Durchlauf ein bisschen
heller, bis der Höchstwert 255 erreicht ist. Danach zählt der Sketch in
Fünferschritten rückwärts, bis die Helligkeit wieder bei 0 ist - und von vorn.
*/
if (Helligkeit == 0 || Helligkeit == 255)
{
Fadeschritte = -Fadeschritte;
}
}Download: sketch-fuer-den-arduino-uno.ino
Board in the Arduino IDEArduino Uno
Ein zusätzliches Board-Paket brauchst du dafür nicht. Der UNO ist in der Arduino IDE ab Werk dabei.
Pin assignment Wemos D1 Mini
Den Pin-Nummern muss das D vorangestellt werden. Du schreibst also D6 und D7 in den Sketch, nicht 6 und 7.
int LED = D5; // Das Wort "LED" steht jetzt für den Pin D5
// Fadeschritte bestimmt die Geschwindigkeit des Fadens.
int Fadeschritte = 5;
// "Helligkeit" steht für den Wert, der bei der PWM ausgegeben wird.
// Die 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;
void setup()
{
// Für analogWrite ist kein Setup notwendig.
}
void loop()
{
/*
analogWrite aktiviert an der LED die PWM-Funktion. Ausgegeben wird der Wert,
der unter dem Namen "Helligkeit" gespeichert ist - beim ersten Durchlauf also 0.
*/
analogWrite(LED, Helligkeit);
/*
Nun wird der Wert für die Ausgabe verändert: Zur bisherigen Helligkeit kommen
die Fadeschritte dazu, beim ersten Mal also 0 + 5 = 5. Der loop-Teil wiederholt
sich, danach beträgt die Helligkeit 10, dann 15 und so weiter.
*/
Helligkeit = Helligkeit + Fadeschritte;
// Die LED behält die Helligkeit 25 Millisekunden lang, also nur ganz kurz.
// Ein kleinerer Wert lässt die LED schneller pulsieren.
delay(25);
/*
Hat die Helligkeit den Wert 0 oder (||) 255 erreicht, wechselt das Vorzeichen
der Fadeschritte. Die LED wird also zuerst bei jedem Durchlauf ein bisschen
heller, bis der Höchstwert 255 erreicht ist. Danach zählt der Sketch in
Fünferschritten rückwärts, bis die Helligkeit wieder bei 0 ist - und von vorn.
*/
if (Helligkeit == 0 || Helligkeit == 255)
{
Fadeschritte = -Fadeschritte;
}
}Download: sketch-fuer-den-wemos-d1-mini.ino
Board in the Arduino IDELOLIN(WEMOS) D1 R2 & mini
Dafür muss die ESP8266-Boardverwaltung installiert sein. Du fügst sie einmalig über die Einstellungen der Arduino IDE hinzu.
Pin assignment ESP32-Wroom
Beim ESP32 schreibst du die GPIO-Nummer direkt in den Sketch, also 26 und 27 ohne D davor.
int LED = 26; // Das Wort "LED" steht jetzt für den Pin 26
// Fadeschritte bestimmt die Geschwindigkeit des Fadens.
int Fadeschritte = 5;
// "Helligkeit" steht für den Wert, der ausgegeben wird.
// Die 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;
void setup()
{
// Für dacWrite ist kein Setup notwendig.
}
void loop()
{
/*
dacWrite gibt an Pin 25 oder 26 eine echte analoge Spannung aus. Ausgegeben
wird der Wert, der unter dem Namen "Helligkeit" gespeichert ist - beim ersten
Durchlauf also 0.
*/
dacWrite(LED, Helligkeit);
/*
Nun wird der Wert für die Ausgabe verändert: Zur bisherigen Helligkeit kommen
die Fadeschritte dazu, beim ersten Mal also 0 + 5 = 5. Der loop-Teil wiederholt
sich, danach beträgt die Helligkeit 10, dann 15 und so weiter.
*/
Helligkeit = Helligkeit + Fadeschritte;
// Die LED behält die Helligkeit 25 Millisekunden lang, also nur ganz kurz.
// Ein kleinerer Wert lässt die LED schneller pulsieren.
delay(25);
/*
Hat die Helligkeit den Wert 0 oder (||) 255 erreicht, wechselt das Vorzeichen
der Fadeschritte. Die LED wird also zuerst bei jedem Durchlauf ein bisschen
heller, bis der Höchstwert 255 erreicht ist. Danach zählt der Sketch in
Fünferschritten rückwärts, bis die Helligkeit wieder bei 0 ist - und von vorn.
*/
if (Helligkeit == 0 || Helligkeit == 255)
{
Fadeschritte = -Fadeschritte;
}
}Download: sketch-fuer-den-esp32-wroom-dacwrite.ino
Board in the Arduino IDEESP32 Dev Module
Dafür muss die ESP32-Boardverwaltung installiert sein. Du fügst sie einmalig über die Einstellungen der Arduino IDE hinzu.
Pin assignment NodeMCU
Auch beim NodeMCU steht vor der Pin-Nummer ein D. D1 entspricht GPIO 5, D2 entspricht GPIO 4.
int LED = D1; // Das Wort "LED" steht jetzt für den Pin D1
// Fadeschritte bestimmt die Geschwindigkeit des Fadens.
int Fadeschritte = 5;
// "Helligkeit" steht für den Wert, der bei der PWM ausgegeben wird.
// Die 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;
void setup()
{
// Für analogWrite ist kein Setup notwendig.
}
void loop()
{
/*
analogWrite aktiviert an der LED die PWM-Funktion. Ausgegeben wird der Wert,
der unter dem Namen "Helligkeit" gespeichert ist - beim ersten Durchlauf also 0.
*/
analogWrite(LED, Helligkeit);
/*
Nun wird der Wert für die Ausgabe verändert: Zur bisherigen Helligkeit kommen
die Fadeschritte dazu, beim ersten Mal also 0 + 5 = 5. Der loop-Teil wiederholt
sich, danach beträgt die Helligkeit 10, dann 15 und so weiter.
*/
Helligkeit = Helligkeit + Fadeschritte;
// Die LED behält die Helligkeit 25 Millisekunden lang, also nur ganz kurz.
// Ein kleinerer Wert lässt die LED schneller pulsieren.
delay(25);
/*
Hat die Helligkeit den Wert 0 oder (||) 255 erreicht, wechselt das Vorzeichen
der Fadeschritte. Die LED wird also zuerst bei jedem Durchlauf ein bisschen
heller, bis der Höchstwert 255 erreicht ist. Danach zählt der Sketch in
Fünferschritten rückwärts, bis die Helligkeit wieder bei 0 ist - und von vorn.
*/
if (Helligkeit == 0 || Helligkeit == 255)
{
Fadeschritte = -Fadeschritte;
}
}Download: sketch-fuer-den-nodemcu.ino
Board in the Arduino IDENodeMCU 1.0 (ESP-12E Module)
Dafür muss die ESP8266-Boardverwaltung installiert sein. Du fügst sie einmalig über die Einstellungen der Arduino IDE hinzu.