LED Brightness Control

As well as turning an LED on and off, you can also use it to control the brightness of the LED.

In this example, the A button will make the LED dimmer and the B button make it brighter. At the same time, the micro:bits built-in LED display will show a number between 0 and 9 indicating the brightness level.

JavaScript Block Code

To open the JavaScript Block code in a separate tab, click here.

As you can see, there is actually quite a lot going on here. Lets start with the on start block. This block is run just once when the micro:bit starts and it defines four variables:

  • min_power - the minimum output level for the LED when 0 is off and 1023 is maximum brightness
  • max_power - the maximum output level for the LED. These two variable allow you to set the possible range of brightnesses. 
  • power_step - the brighness will be changed in 10 steps and so this value is calculated from the minumum and maximum.
  • brightness - the brightness level as a number between 0 and 10.

The forever loop which runs repeatedly sets the value of a variable called power according to the brightness level.

To increase and decrease the brightness, two handlers are used. These respond to either a press of button A or button B and then display the brightness level and set the output level on pin0 using the analog write block.


Here is the MicroPython code for the LED dimmer.

Download: file
from microbit import *

min_power = 50
max_power = 1023
power_step = (max_power - min_power) / 9
brightness = 0

def set_power(brightness):
    if brightness == 0:
        pin0.write_analog(brightness * power_step + min_power)
while True:
    if button_a.was_pressed():
        brightness -= 1
        if brightness < 0:
            brightness = 0
    elif button_b.was_pressed():
        brightness += 1
        if brightness > 9:
            brightness = 9

Arduino Code

The Arduino code for using the micro:bit's display is a little different because it uses the Adafruit GFX Library.

Download: file
#include <Adafruit_Microbit.h>

const int ledPin = 0;

const int minPower = 50;
const int maxPower = 255;
const int powerStep = (maxPower - minPower) / 9;

int brightness = 0;
Adafruit_Microbit_Matrix microbit;

void setup() {
  pinMode(ledPin, OUTPUT);

void loop() {
  if (digitalRead(PIN_BUTTON_A) == LOW) {
    brightness --;
    if (brightness < 0) {
      brightness = 0;
  else if (digitalRead(PIN_BUTTON_B) == LOW) {
    brightness ++;
    if (brightness > 9) {
      brightness = 9;

void setPower(int brightness) {
  if (brightness == 0) {
    analogWrite(ledPin, 0);
  else {
    analogWrite(ledPin, brightness * powerStep + minPower);
This guide was first published on Mar 09, 2018. It was last updated on Mar 09, 2018.
This page (LED Brightness Control) was last updated on Aug 08, 2020.