LEDs
RGB LED with potentiometers
This sketch demonstrates how to control an RGB LED with two potentiometers: one picks the colour (turning it sweeps through the colour wheel) and the other sets the brightness.
Hook up a common cathode RGB LED to PWM pins 9 (red), 10 (green) & 11 (blue), and two potentiometers to A0 (colour) & A1 (brightness), or A4 on classic ESP32 boards.
The code
#include <CtrlRGBLed.h>
#include <CtrlPot.h>
// Classic ESP32 boards (e.g. the ESP32 Dev Module) have no A1,
// so A4 is used there instead.
#if defined(CONFIG_IDF_TARGET_ESP32)
const uint8_t ANALOG_PIN_1 = A4;
#else
const uint8_t ANALOG_PIN_1 = A1;
#endif
CtrlRGBLed led(9, 10, 11, 255);
// The colour pot outputs a position on the colour wheel (0 - 255).
CtrlPot colorPot(A0, 255, 0.05);
// The brightness pot outputs 0 - 100.
CtrlPot brightnessPot(ANALOG_PIN_1, 100, 0.05);
// Turns a position on the colour wheel (0 - 255) into a colour,
// going from red, through green and blue, back to red.
CtrlRGB colorWheel(uint8_t position)
{
if (position < 85) {
return CtrlRGB{ static_cast<uint8_t>(255 - position * 3), static_cast<uint8_t>(position * 3), 0 };
}
if (position < 170) {
position -= 85;
return CtrlRGB{ 0, static_cast<uint8_t>(255 - position * 3), static_cast<uint8_t>(position * 3) };
}
position -= 170;
return CtrlRGB{ static_cast<uint8_t>(position * 3), 0, static_cast<uint8_t>(255 - position * 3) };
}
void setup()
{
led.turnOn();
}
void loop() {
colorPot.process();
brightnessPot.process();
led.setColor(colorWheel(colorPot.getValue()));
led.setBrightness(brightnessPot.getValue());
}