非常高兴能参加这次Follow me,这是我第二次参加。这次参加的主要目的是给孩子学习用,因为Adafruit Circuit Playground Express具有各种传感器和LED,而且可以使用MakeCode进行开发,很适合小朋友学习。
项目演示视频
任务/项目介绍
项目简介
本次项目为Adafruit Circuit Playground Express(简称CPE)的体验,需要完成1个入门任务、3个基础任务、至少1个创意任务(3选1),涵盖CPE的炫彩LED、光线传感器、运动传感器、温度传感器、扬声器等的使用。
全部物料清单
本次只购买了必要器件
设计思路
各任务说明
任务说明:给板载LED输出高电平,点亮即可
软件流程图:
MakeCode实现代码:
input.buttonA.onEvent(ButtonEvent.Down, function () {
pins.LED.digitalWrite(true)
})
input.buttonA.onEvent(ButtonEvent.Up, function () {
pins.LED.digitalWrite(false)
})
代码说明:
为按钮A设置事件监听。
当按钮A按下时(Down),LED灯亮起(即设置LED为高电平)。
当按钮A释放时(Up),LED灯熄灭(即设置LED为低电平)。
效果截图:
任务说明:通过炫彩LED实现跑马灯效果和颜色变换
软件流程图:
MakeCode实现代码:
input.buttonA.onEvent(ButtonEvent.Click, function () {
for (let i = 0; i < 2; i++) {
light.showAnimation(light.colorWipeAnimation, 1000)
}
for (let i = 0; i < 10; i++) {
light.showAnimation(light.rainbowAnimation, 500)
}
light.setAll(0x000000)
})
input.buttonB.onEvent(ButtonEvent.Click, function () {
for (let i = 0; i < 2; i++) {
light.showAnimation(light.cometAnimation, 1000)
}
for (let i = 0; i < 10; i++) {
light.showAnimation(light.rainbowAnimation, 500)
}
light.setAll(0x000000)
})
代码说明:
该代码定义了两个按钮点击事件处理函数:
按下按钮A时,显示两次颜色渐变动画(每次持续1秒),接着显示十次彩虹动画(每次持续0.5秒),最后关闭所有灯光。
按下按钮B时,显示两次彗星动画(每次持续1秒),接着同样显示十次彩虹动画(每次持续0.5秒),最后关闭所有灯光。
效果截图:
任务说明:根据温度传感器和光线传感器的数值,转化为LED灯的可视化效果。把左面5颗LED灯作为光照程度的显示,右面5颗LED作为温度程度的显示。
软件流程图:
MakeCode实现代码:
let pixel_list = 0
let temp_list = 0
forever(function () {
pixel_list = Math.map(input.lightLevel(), 0, 255, 0, 5)
console.log(pixel_list)
for (let m = 0; m <= pixel_list; m++) {
light.setPixelColor(m, 0xffffff)
}
for (let n = pixel_list; n <= 4; n++) {
light.setPixelColor(n+1, 0x000000)
}
})
forever(function () {
if (input.temperature(TemperatureUnit.Celsius) < 20) {
temp_list = Math.map(input.temperature(TemperatureUnit.Celsius), 0, 20, 6, 10)
for (let i = 5; i <= temp_list; i++) {
light.setPixelColor(i, 0x007fff)
}
} else if (input.temperature(TemperatureUnit.Celsius) >= 20 && input.temperature(TemperatureUnit.Celsius) <= 26) {
temp_list = Math.map(input.temperature(TemperatureUnit.Celsius), 20, 26, 6, 10)
for (let o = 5; o <= temp_list; o++) {
light.setPixelColor(o, 0x00ff00)
}
} else if (input.temperature(TemperatureUnit.Celsius) >= 27 && input.temperature(TemperatureUnit.Celsius) <= 32) {
temp_list = Math.map(input.temperature(TemperatureUnit.Celsius), 27, 32, 6, 10)
for (let p = 5; p <= temp_list; p++) {
light.setPixelColor(p, 0xff8000)
}
} else {
temp_list = Math.map(input.temperature(TemperatureUnit.Celsius), 33, 40, 6, 10)
for (let q = 5; q <= temp_list; q++) {
light.setPixelColor(q, 0xff0000)
}
}
for (let r = temp_list; r <= 9; r++) {
light.setPixelColor(r+1, 0x000000)
}
})
代码说明:
根据环境光强度(0-255)映射到0-5范围,点亮相应数量的LED(白色),剩余LED关闭。
根据温度变化在蓝色(小于20度)、绿色(20至26度)、橙色(27至32度)和红色(33度至40度)之间变换LED颜色(位置6-10),点亮相应数量的LED。
效果截图(视频效果会更好):
任务说明:由于MakeCode暂不知道如何使用红外进行距离探测,改为根据物体靠近时光线的变化作为安全距离,发起声音报警。通过把光线强度映射为10颗LED灯,当强度小于5时进行报警音播放。
软件流程图:
MakeCode实现代码:
let pixel_list = 0
forever(function () {
pixel_list = Math.map(input.lightLevel(), 0, 32, 0, 10)
console.log(pixel_list)
for (let m = 0; m <= pixel_list; m++) {
light.graph(m, 10)
}
for (let n = pixel_list; n <= 9; n++) {
light.setPixelColor(n + 1, 0x000000)
}
if (pixel_list < 5) {
music.magicWand.play()
}
})
代码说明:
将光照值映射到 0 到 10 的范围,用10颗LED灯显示光照强度。
若强度小于5时,播放警报声。
效果截图:
白天光照强度大,10颗全亮。
手接近后发出报警声
任务说明:模拟不倒翁运动过程,在板卡倾斜在前后左右4个方向时亮起对应的LED灯,板卡旋转时显示彩虹灯光。
软件流程图:
MakeCode实现代码:
input.onGesture(Gesture.Shake, function () {
for (let i = 0; i < 10; i++) {
light.showAnimation(light.rainbowAnimation, 100)
}
})
input.onGesture(Gesture.TiltUp, function () {
light.showRing(
`white white black black black black black black white white`
)
})
input.onGesture(Gesture.TiltDown, function () {
light.showRing(
`black black black white white white white black black black`
)
})
input.onGesture(Gesture.TiltLeft, function () {
light.showRing(
`black white white white black black black black black black`
)
})
input.onGesture(Gesture.TiltRight, function () {
light.showRing(
`black black black black black black white white white black`
)
})
input.onGesture(Gesture.FreeFall, function () {
light.showRing(
`red red red red red red red red red red`
)
})
代码说明:
当检测到摇晃手势时,显示10次彩虹动画。
倾斜方向不同则显示不同的灯光图案:向上倾斜显示两端白色;向下倾斜显示中间白色;向左倾斜显示左侧白色;向右倾斜显示右侧白色。
检测到自由落体手势时,显示全红色灯光。
效果截图:
任务说明:制作手持定时器,使用按键A设定定时位置,通过声音触发开始倒数,同时播放声效。按键B重置。
软件流程图:
MakeCode实现代码:
input.onLoudSound(function () {
light.photonFlip()
light.setPhotonMode(PhotonMode.Eraser)
for (let i = 0; i < time; i++) {
music.playTone(262, 300)
pause(700)
light.photonForward(1)
}
for (let i = 0; i < 3; i++) {
music.playTone(523, 100)
pause(100)
music.playTone(523, 100)
light.showAnimation(light.sparkleAnimation, 700)
}
})
input.buttonA.onEvent(ButtonEvent.Click, function () {
if (time < 10) {
light.photonForward(1)
time += 1
}
})
input.buttonB.onEvent(ButtonEvent.Click, function () {
time = 0
light.setPhotonMode(PhotonMode.Off)
light.setAll(0x000000)
})
let time = 0
time = 1
light.photonForward(0)
代码说明:
效果截图:
本活动的心得体会
本次活动任务制作过程有小朋友参与,通过MakeCode图形化的拖拉操作和内置的多种动作,小朋友更容易理解控制流程和思路。同时CPE丰富的传感器也非常适合不同想法的实现。非常感谢EEworld和Digikey举办的活动,希望以后还能继续参与。
代码链接
https://download.eeworld.com.cn/detail/eew_4HfTi8/634245
本帖最后由 miu_miu 于 2024-9-1 21:57 编辑