I made a christmas ornament with DFRobot micro:bit Circular RGB LED Expansion Board.
I used MakeCode for coding.
https://makecode.microbit.org/
MakeCode Blocks
This is the MakeCode block for Christmas ornament created below.
Initialization of variable, NeoPixel input pin, cell count and brightness, BPM for melody playback are specified.
This mode is executed when the A button is pressed.
2. A button detection
Press A button on micro:bit to set the variable state to 1.
3. NeoPixel lighting setting
When the variable state is 1 (when the A button is pressed), alternately repeat red / green blinking NeoPixel on the expansion board.
4. LED Matrix Setting
When the variable state is 1 (when the A button is pressed), two notes are alternately displayed in the micro: bit LED matrix.
5. Audio playback
When the variable state is 1 (when the A button is pressed), Christmas songs are played repeatedly from the buzzer of the expansion board. When the variable state becomes a value other than 1, it exits the loop and stops sound playback.
This mode is executed when the B button is pressed.
6. B button detection
Press the B button of micro:bit to set the variable state to 0 and reset the LED matrix display.
7. Sound detection
When the variable state is 0 (when the B button is pressed), reset the NeoPixel of the expansion board and turn on MIC detection.
When voice is detected with MIC (more than 200 in analog value), set the variable state to 2, and light up 9 NeoPixels yellow.
When the variable state is 2 (at the time of speech detection), it rotates 9 NeoPixel's yellow lights.
8. LED Matrix Setting
When the variable state is 2 (when voice is detected), the character string "Merry Xmas" is displayed in the micro: bit LED matrix.
When the display is completed, the variable state is set to 0 and wait for voice detection.
Simultaneously press A button and B button to reset NeoPixel and LED matrix to stop operation.
let sound = 0
let state = 0
input.onButtonPressed(Button.A, function () {
state = 1
})
input.onButtonPressed(Button.B, function () {
state = 0
basic.showLeds(`
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
`)
})
input.onButtonPressed(Button.AB, function () {
state = 3
strip.clear()
strip.show()
basic.showLeds(`
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
`)
})
let range: neopixel.Strip = null
let strip: neopixel.Strip = null
state = 3
strip = neopixel.create(DigitalPin.P2, 24, NeoPixelMode.RGB)
strip.setBrightness(30)
music.setTempo(52)
basic.forever(function () {
while (state == 1) {
strip.clear()
for (let index = 0; index < 24; index+=2) {
range = strip.range(index, 1)
range.showColor(neopixel.colors(NeoPixelColors.Red))
}
for (let index2 = 1; index2 <= 24; index2+=2) {
range = strip.range(index2, 1)
range.showColor(neopixel.colors(NeoPixelColors.Green))
}
basic.pause(500)
for (let index3 = 0; index3 < 24; index3+=2) {
range = strip.range(index3, 1)
range.showColor(neopixel.colors(NeoPixelColors.Green))
}
for (let index22 = 1; index22 <= 24; index22+=2) {
range = strip.range(index22, 1)
range.showColor(neopixel.colors(NeoPixelColors.Red))
}
basic.pause(500)
}
})
basic.forever(function () {
while (state == 1) {
basic.showLeds(`
. . # . .
. . # # .
. . # . #
# # # . .
# # # . .
`)
basic.pause(500)
if (!(state)) {
break
}
basic.showLeds(`
. # # # #
. # . . #
. # . . #
# # . # #
# # . # #
`)
basic.pause(500)
}
})
basic.forever(function () {
while (state == 1) {
music.playTone(196, music.beat(BeatFraction.Quarter))
music.playTone(330, music.beat(BeatFraction.Quarter))
music.playTone(294, music.beat(BeatFraction.Quarter))
music.playTone(262, music.beat(BeatFraction.Quarter))
if (!(state)) {
break
}
music.playTone(196, music.beat(BeatFraction.Whole))
music.playTone(196, music.beat(BeatFraction.Quarter))
music.playTone(330, music.beat(BeatFraction.Quarter))
music.playTone(294, music.beat(BeatFraction.Quarter))
music.playTone(262, music.beat(BeatFraction.Quarter))
if (!(state)) {
break
}
music.playTone(220, music.beat(BeatFraction.Whole))
music.playTone(220, music.beat(BeatFraction.Quarter))
music.playTone(349, music.beat(BeatFraction.Quarter))
music.playTone(330, music.beat(BeatFraction.Quarter))
music.playTone(294, music.beat(BeatFraction.Quarter))
if (!(state)) {
break
}
music.playTone(247, music.beat(BeatFraction.Whole))
music.playTone(392, music.beat(BeatFraction.Quarter))
music.playTone(392, music.beat(BeatFraction.Quarter))
music.playTone(349, music.beat(BeatFraction.Quarter))
music.playTone(294, music.beat(BeatFraction.Quarter))
if (!(state)) {
break
}
music.playTone(330, music.beat(BeatFraction.Whole))
}
})
basic.forever(function () {
if (state == 0) {
strip.clear()
strip.show()
sound = pins.analogReadPin(AnalogPin.P1)
if (sound > 200) {
state = 2
strip.range(0, 9).showColor(neopixel.colors(NeoPixelColors.Yellow))
}
}
if (state == 2) {
strip.rotate(1)
strip.show()
basic.pause(50)
}
})
basic.forever(function () {
if (state == 2) {
basic.showString("Merry Xmas")
strip.clear()
strip.show()
state = 0
}
})
The entire JavaScript code is described below.
It is very cute when you put it on a Christmas tree.
micro: bit Circular RGB LED Expansion Board is equipped with a microphone and buzzer so we can quickly make something fun by further improving the usefulness of micro: bit!
This project is made by HomeMadeGarbage.