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.
from microbit import * min_power = 50 max_power = 1023 power_step = (max_power - min_power) / 9 brightness = 0 def set_power(brightness): display.show(str(brightness)) if brightness == 0: pin0.write_analog(0) else: pin0.write_analog(brightness * power_step + min_power) set_power(brightness) while True: if button_a.was_pressed(): brightness -= 1 if brightness < 0: brightness = 0 set_power(brightness) elif button_b.was_pressed(): brightness += 1 if brightness > 9: brightness = 9 set_power(brightness) sleep(100)
Arduino Code
The Arduino code for using the micro:bit's display is a little different because it uses the Adafruit GFX Library.
#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); microbit.begin(); pinMode(PIN_BUTTON_A, INPUT); pinMode(PIN_BUTTON_B, INPUT); setPower(brightness); } void loop() { if (digitalRead(PIN_BUTTON_A) == LOW) { brightness --; if (brightness < 0) { brightness = 0; } setPower(brightness); delay(200); } else if (digitalRead(PIN_BUTTON_B) == LOW) { brightness ++; if (brightness > 9) { brightness = 9; } setPower(brightness); delay(200); } } void setPower(int brightness) { microbit.print(brightness); if (brightness == 0) { analogWrite(ledPin, 0); } else { analogWrite(ledPin, brightness * powerStep + minPower); } }
Page last edited March 08, 2024
Text editor powered by tinymce.