From a36ef2aea8afcb2422b48cb9508d2051a638619a Mon Sep 17 00:00:00 2001 From: Martin Sloup Date: Sun, 12 Feb 2017 16:30:12 +0100 Subject: [PATCH] Added LEDC Software Fade example (#202) * Added LEDC Fade exmaple * Renamed LEDCFade example to LEDCSoftwareFade Added valueMax parameter for ledcAnalogWrite * Remove usage of LED_BUILTIN constant to solve CI errors --- .../LEDCSoftwareFade/LEDCSoftwareFade.ino | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 libraries/ESP32/examples/AnalogOut/LEDCSoftwareFade/LEDCSoftwareFade.ino diff --git a/libraries/ESP32/examples/AnalogOut/LEDCSoftwareFade/LEDCSoftwareFade.ino b/libraries/ESP32/examples/AnalogOut/LEDCSoftwareFade/LEDCSoftwareFade.ino new file mode 100644 index 00000000..aae974ac --- /dev/null +++ b/libraries/ESP32/examples/AnalogOut/LEDCSoftwareFade/LEDCSoftwareFade.ino @@ -0,0 +1,57 @@ +/* + LEDC Software Fade + + This example shows how to software fade LED + using the ledcWrite function. + + Code adapted from original Arduino Fade example: + https://www.arduino.cc/en/Tutorial/Fade + + This example code is in the public domain. + */ + +// use first channel of 16 channels (started from zero) +#define LEDC_CHANNEL_0 0 + +// use 13 bit precission for LEDC timer +#define LEDC_TIMER_13_BIT 13 + +// use 5000 Hz as a LEDC base frequency +#define LEDC_BASE_FREQ 5000 + +// fade LED PIN (replace with LED_BUILTIN constant for built-in LED) +#define LED_PIN 5 + +int brightness = 0; // how bright the LED is +int fadeAmount = 5; // how many points to fade the LED by + +// Arduino like analogWrite +// value has to be between 0 and valueMax +void ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) { + // calculate duty + uint32_t duty = (LEDC_BASE_FREQ / valueMax) * min(value, valueMax); + + // write duty to LEDC + ledcWrite(channel, duty); +} + +void setup() { + // Setup timer and attach timer to a led pin + ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); + ledcAttachPin(LED_PIN, LEDC_CHANNEL_0); +} + +void loop() { + // set the brightness on LEDC channel 0 + ledcAnalogWrite(LEDC_CHANNEL_0, brightness); + + // change the brightness for next time through the loop: + brightness = brightness + fadeAmount; + + // reverse the direction of the fading at the ends of the fade: + if (brightness <= 0 || brightness >= 255) { + fadeAmount = -fadeAmount; + } + // wait for 30 milliseconds to see the dimming effect + delay(30); +}