查看: 870|回复: 6

【12 DAYS OF TECHMAS 】micro:bit扩展板-圣诞节装饰品

[复制链接]
本帖最后由 KIKIYA 于 2019-1-16 16:23 编辑

【12 DAYS OF TECHMAS 】

Christmas Ornament-圣诞节装饰品

timg.gif

On the first day of Christmas, my true love

gave to me a partridge in a pear tree

On the second day of Christmas, my true love

gave to me two turtledoves and a partridge in a pear tree

·········

一首12days of Christmas送给这个圣诞节。祝福的音乐响起来了,

空气里处处洋溢着暖心的声音,宣告着圣诞节也已经来到身边。

micro:bit RGB 全彩LED灯环扩展板做的圣诞节饰品


      我们的一个日本用户利用micro:bit RGB 全彩LED灯环扩展板制作了一件装饰品。

      整个过程花费数个小时。
Dec-22-2018 15-00-46.gif


      按下A按钮后,圣诞装饰品会播放歌曲并呈现彩色符号,其中歌曲通过micro:bit RGB 全彩LED灯环扩展板的蜂鸣器播放,符号则通过红绿光矩阵演示。

      按下B按钮可进入K歌模式。我使用了带扩展板的麦克风。当检测到声音时,麦克风发出黄光, "Merry Xmas"会在屏幕上显示。

MakeCode

使用了MakeCode进行编码。

MakeCode模块

以下是这个圣诞装饰物的模块:

变量

变量、输入引脚、单元数和亮度的初始化模块,以用于指定的回放旋律。

A模式

按下A按钮,执行此模式。

2.按钮检测
按下A按钮,变量状态将设置为1。

3.照明设定
当变量状态为1时(按下A按钮),扩展板会交替重复闪烁红/绿光。

4. LED矩阵设置
当变量状态为1时(按下A按钮),两个音符在micro:bit上交替显示。

5. 音频播放
当变量状态为1时(按下A按钮),通过扩展板蜂鸣器重复播放这些歌曲。当变量状态变为非1的其它数值时,蜂鸣器将退出循环,并停止播放声音。


B模式

按下B按钮时执行此操作。

6. B按钮检测
按下B键,变量状态将设置为0,并重置矩阵显示。

7. 声音检测
重置扩展板,并打开MIC检测功能。

当通过MIC检测到声音(模拟值超过200)时,将变量状态设置为2,并亮起9个黄灯。

当变量状态为2时(在语音检测时),它将旋转显示9个黄灯。

8. LED矩阵设置

当变量状态为2时(当检测到语音时),字符串将显示在矩阵中。
当显示完成时,可变状态设置为0,并等待语音检测。
9.重置
同时按下A按钮和B按钮进行复位,LED矩阵将停止运行。


代码:
[AppleScript] 纯文本查看 复制代码
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
    }
}) 




运行
用该饰品装扮圣诞树可点缀节日气氛,非常可爱。


gada888  版主

发表于 2018-12-23 13:25:33

回复 支持 反对

使用道具 举报

rzyzzxw  版主

发表于 2018-12-23 21:19:40

回复 支持 反对

使用道具 举报

rzegkly  初级技匠

发表于 2018-12-24 06:33:58

真想动手制作一个
回复 支持 反对

使用道具 举报

gray6666  高级技匠

发表于 2018-12-25 08:33:25

好设备,元旦攒一个。。。。。
回复 支持 反对

使用道具 举报

cj2q  中级技匠

发表于 2018-12-29 13:47:56

真是可爱  学习
回复 支持 反对

使用道具 举报

lilei8488  初级技师

发表于 7 天前

不错啊,刚入手一块,打算玩下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail