| title | Using RGB LEDs with the microbit |
|---|---|
| layout | text-width-sidebar |
| meta-description | Drive an RGB LED with the microbit |
| share | true |
| author | jez |
| about | Connect a RGB LED to make any colour you wish! |
| cats | external |
| simple-description | RGB LEDs |
| acknowledgements | RGB LED teaser image by Oomlout (CC-BY-2.0). RGB spectrum image public domain. |
| date | 2016-12-23 10:20:00 UTC |
| date-updated | 2016-12-23 10:20:00 UTC |
An RGB LED is essentially a red, green and blue LED combined into one package.
An RGB LED has four legs: an anode to drive each of the three component colours and a common cathode. The longest pin is the common cathode (-) and is used by all other LEDs in the package.
Each of the colours---red, green and blue---can be made my supplying current to the shorter pins. Usually the order of the pins is the same as the diagram above; but occassionally they can change, and sometimes it's even a common anode.
Any coloured light can be made by varying how bright the red, blue and green LEDs are lit. This can be done with pin0.write_analog(n) where n is a value between 0 (off) and 1023 (on full).
{:.ui .dividing .header}
220Ω resistors are placed before the each of the anode pins. 220Ω is a safe choice and will cover all RGB LEDs. You can consult the datasheet of the LED if you have it; you may not even need a resistor but it's better safe than sorry!
{% include box.html content="which-resistor" %}
{:.ui .dividing .header}
Code to show a yellow light for two seconds then show a red light slowly turning magenta
{% highlight python %} from microbit import *
red = pin0 blue = pin1 green = pin2
while True:
# Make Yellow
red.write_digital(1)
green.write_digital(1)
sleep(2000) # Show yellow for 2 seconds
# Turn off Yellow
red.write_digital(0)
green.write_digital(0)
# turn on red
# slowly increment the intensity of blue to make magenta
red.write_digital(1)
for i in range(0,1023):
blue.write_analog(i)
sleep(10)
# turn off pins before repeating
red.write_digital(0)
blue.write_digital(0)
{% endhighlight %}
{:.ui .dividing .header}
pin0.analog_write(512)is half as bright aspin0.analog_write(1023).
{% include box.html content="digital-vs-analog" %}
- Use
random.randrange(start, stop, step)to generate a random colour every few seconds - Use three potentiometers to mix the colours


