![]()
| PWM made by ESP32Mit PWM-Signalen (Pulsweitenmodulation), die ein digitales Äquivalent eines analogen Signals darstellen, haben wir bereits experimentiert. Kleine Einführung in das Thema findest du hier: PWMUm bei Arduino ein solches Signal zu generieren, kommt die Funktion analogWrite() zum Einsatz. Sie erwartet zwei
Parameter: Nummer des PWM-Pins und den analogen Wert, der zwischen 0 und 255 liegt. Die Funktion kann dann ohne weitere Maßnahmen
benutzt werden.
Ob das Alles wie versprochen funktioniert, testen wir an zwei Beispielen. In dem ersten Beispiel wird jede LED,
die am Versuch teilnimmt, über einen separaten PWM-Kanal gesteuert. In dem zweiten werden mehrere LEDs über nur einen
PWM-Kanal angesprochen. Mehrere PWM-KanäleIn dem Beispiel kommt eine RGB-LED zum Einsatz. Sie besteht intern aus drei unabhängigen farbigen LEDs. Für jede
dieser LEDs wird ein PWM-Kanal aktiviert, über den die jeweilige Leuchtdiode gesteuert wird. ![]() Schaltplan A (mehrere Ausgänge, mehrere PWM-Kanäle) ![]() Testschaltung A // PWM made by ESP32 (A) // ESP32-Dev-KitC V4 // Arduino IDE 1.8.19 // *************************************************************************************
int Taster_Rot = 12; // Taster Farbe Rot ein/aus
int Taster_Gruen = 13; // Taster Farbe Grün ein/aus
int Taster_Blau = 14; // Taster Farbe Blau ein/aus
int Kanal = 3;
// ***********************************************************************************
void setup() {
ledcSetup (0, 5000, 8); // Kanal 0, Frequenz 5kHz, Auflösung 8 Bit
ledcSetup (1, 5000, 8); // Kanal 1, Frequenz 5kHz, Auflösung 8 Bit
ledcSetup (2, 5000, 8); // Kanal 2, Frequenz 5kHz, Auflösung 8 Bit
ledcAttachPin (21, 0); // GPIO 21, LED Rot
ledcAttachPin (22, 1); // GPIO 22, LED Grün
ledcAttachPin (23, 2); // GPIO 23, LED Blau
pinMode (Taster_Rot, INPUT_PULLUP);
pinMode (Taster_Gruen, INPUT_PULLUP);
pinMode (Taster_Blau, INPUT_PULLUP);
}
// ***********************************************************************************
void loop() {
for (int i=0; i < 256; i++ ) { // For-Schleife heller
ledcWrite (Kanal, i); // PWM Signal ausgeben
delay (15); // Wartezeit
PWM_Kanal (); // Kanalwahl aufrufen (Unterprogramm)
}
for (int i=255; i > -1; i-- ) { // For-Schleife dunkler
ledcWrite (Kanal, i); // PWM Signal ausgeben
delay (15); // Wartezeit
PWM_Kanal (); // Kanalwahl aufrufen (Unterprogramm)
}
delay (1000);
}
// ***********************************************************************************
void PWM_Kanal() { // Kanal Bestimmung mit Taster
if (digitalRead (12) == LOW) { // Taster_Rot betätigt ?
ledcWrite (Kanal, 0); // Bisherige Farbe AUS
Kanal = 0; } // Kanal 0, Rot
if (digitalRead (13) == LOW) { // Taster_Gruen betätigt ?
ledcWrite (Kanal, 0); // Bisherige Farbe AUS
Kanal = 1; } // Kanal 1, Grün
if (digitalRead (14) == LOW) { // Taster_Blau betätigt ?
ledcWrite (Kanal, 0); // Bisherige Farbe AUS
Kanal = 2; } // Kanal 2, Blau
}
// ***********************************************************************************
In dem Beispiel wird jeder Kanal mit einem Taster vorgewählt. So leuchtet die RGB-Leuchtdiode je nach der Auswahl,
rot, grün oder blau. Mit zwei FOR-Schleifen wird das Tastverhältnis nacheinander rauf- und runtergefahren. Die LEDs leuchten
dementsprechend mal heller, mal dunkler. Mit
1 PWM-Kanal![]() Schaltplan B (mehrere Ausgänge, Ein PWM-Kanal) ![]() Testschaltung B // PWM made by ESP32 (B) // ESP32-Dev-KitC V4 // Arduino IDE 1.8.19 // ************************************************************************************* ************************************************************************************* int Kanal = 0; int Frequenz = 5000; int Aufloesung = 8; // *********************************************************************************** void setup() { ledcSetup (Kanal, Frequenz, Aufloesung); // Kanal 0, Frequenz 5kHz, Auflösung 8 Bit ledcAttachPin (19, Kanal); // GPIO 21, LED 1 ledcAttachPin (21, Kanal); // GPIO 21, LED 2 ledcAttachPin (22, Kanal); // GPIO 22, LED 3 ledcAttachPin (23, Kanal); // GPIO 23, LED 4 } // *********************************************************************************** void loop() { for (int i=0; i < 256; i++ ) { // Dimmen heller ledcWrite (Kanal, i); delay (15); } for (int i=255; i > -1; i-- ) { // Dimmen dunkler ledcWrite (Kanal, i); delay (15); } delay (1000); } // *********************************************************************************** Es ist möglich, mit nur einem Kanal gleichzeitig mehrere Ausgänge anzusteuern. Auf diesem Weg können mehrere Ausgänge synchronisiert werden. In dem Beispiel werden vier Leuchtdioden mit einem PWM-Kanal synchron gedimmt.
|
Google-Suche auf MEINE-SCHALTUNG.de : |