335|0

9

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第1期】基础任务二、三+创意任务三 [复制链接]

 

经过了前面入门任务和基础任务,让我们对adafruit circuit playgrand express这款开发板有了进一步的了解,同时结合基础任务二、基础任务三,以及创意任务三让我们继续深入探究开发板的有趣玩法。

 

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,水果若干,超声波传感器

【编程软件】windows自带的Microsoft MakeCode,图形化编程工具,让更多玩家更易上手

下面我将分开展示每一个任务:

【基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度】利用板载的温度传感器和光线传感器,去感知外界环境温度的变化以及环境光线的变化,以LED的颜色以及LED的点亮数量来展示不同的区别。这里我的软件逻辑是将温度分成三个区间,[-5~22][23~26][27~50],当温度为[-5~22]LED灯显示蓝色,并且随着温度降低,点亮LED灯数量越多;当温度为[23~26]时,LED灯显示绿色,并且随着温度升高,点亮LED数量越多;当温度为[27~50]时,LED灯显示红色,并且当温度升高时,点亮LED灯越多。较为适宜的温度是绿色的,并且数量越多越适宜。同时将光线判断为亮度越高,点亮的LED越多,较为适宜的是2~3个灯。展示图片如下:

在冰箱里,环境温度低,亮蓝灯,可能是开着门拍,未达到相应的环境温度,会有绿灯亮起现象。

  

环境温度合适的绿色。

 

代码的截图如下:

  具体代码如下:

let value = input.lightLevel()
let value2 = input.temperature(TemperatureUnit.Celsius)
let list = [0, 1, 2, 3, 4]
let list2 = [5, 6, 7, 8, 9]
forever(function () {
    value = Math.min(input.lightLevel() / 51.2, 5)
    for (let i = 0; i <= value; i++) {
        light.setPixelColor(list[i], 0xffff00)
    }
    for (let k = value; k <= 10; k++) {
        light.setPixelColor(list[k], 0x000000)
    }
})
forever(function () {
    if (input.temperature(TemperatureUnit.Celsius) < 22) {
        value2 = Math.min(Math.abs(input.temperature(TemperatureUnit.Celsius) - 21) / 5.4, 5)
        for (let j = 0; j <= value2; j++) {
            light.setPixelColor(list2[j], 0x0000ff)
        }
        for (let l = value; l <= 10; l++) {
            light.setPixelColor(list[l], 0x000000)
    }
    } else {
        if (input.temperature(TemperatureUnit.Celsius) >= 22 && input.temperature(TemperatureUnit.Celsius) <= 26) {
            value2 = Math.min((input.temperature(TemperatureUnit.Celsius) - 21) / 1, 5)
            for (let m = 0; m <= value2; m++) {
                light.setPixelColor(list2[m], 0x00ff00)
            }
            for (let n = value; n <= 10; n++) {
            light.setPixelColor(list[n], 0x000000)
    }
        } else {
            value2 = Math.min((input.temperature(TemperatureUnit.Celsius) - 26) / 4.8, 5)
            for (let o = 0; o <= value2; o++) {
                light.setPixelColor(list2[o], 0xff0000)
            }
            for (let p = value; p <= 5; p++) {
            light.setPixelColor(list[p], 0x000000)
    }
        }
    }
})

视频如下:

202408310037

 

【基础任务三(必做):接近检测——设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警】这个任务中需要用到当时选购的超声波传感器,来检测物体的距离,同时也需要的对采集的数据处理,根据距离的远近判断点亮相应数量的LED灯,距离越近,亮的越少,距离越远,亮的越多。同时设置报警阈值,当靠近5cm时会触发蜂鸣器响,用来警告。

以下为图形化编程界面:

 

具体实现代码如下:

let distance = 0
loops.forever(function () {
    pins.A2.digitalWrite(false)
    control.waitMicros(2)
    pins.A2.digitalWrite(true)
    control.waitMicros(10)
    pins.A2.digitalWrite(false)
    distance = pins.A1.pulseIn(PulseValue.High) / 58
    light.graph(distance, 30)
    if (distance < 5) {
        music.siren.play()
    } else {
        music.stopAllSounds()
    }
})

视频如下:

VID_20240830_003508

 

创意任务三:水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果】本次任务需要用到开发板的模拟量输入功能,将每个引脚的模拟量输入利用起来,用导线将其连接到水果上,用手触碰不同引脚连接的水果,会发出相应的音调,组合起来可以弹出“优美的”音乐,谓之水果钢琴。亮出我的干巴小柠檬,来展示水果钢琴。

 

以下是实现的图形化编程界面:

 

具体实现代码:

forever(function () {
    if (input.touchA1.isPressed()) {
        music.playTone(988, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
    if (input.touchA2.wasPressed()) {
        music.playTone(880, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
    if (input.touchA3.wasPressed()) {
        music.playTone(784, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
    if (input.touchA4.wasPressed()) {
        music.playTone(698, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
    if (input.touchA5.wasPressed()) {
        music.playTone(659, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
    if (input.touchA6.wasPressed()) {
        music.playTone(587, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
    if (input.touchA7.wasPressed()) {
        music.playTone(523, music.beat(BeatFraction.Double))
        pause(1)
        music.stopAllSounds()
    }
})

视频展示如下:

VID_20240828_044043

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表