行空板K10 | 大屏真香之电子鱼缸
本帖最后由 怀若谷 于 2024-12-5 14:44 编辑【本系列目录】
1.行空板K10 | 大屏真香之模拟时钟
2.行空板K10 | 大屏真香之温湿度计
3.行空板K10 | 大屏真香之电子鱼缸
file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps1.png今天跟大家分享一个用行空板K10制作的电子鱼缸作品。其功能是模拟一个电子鱼缸,有水草、沙石等环境,里面有鱼在游动,按下行空板自带的按键可以给鱼喂食。希望这个作品能给大家带来一点“闲趣”!
演示视频↓https://www.bilibili.com/video/BV1azz1YHEuG/?vd_source=a4f536040db8a6e7c6050fc475e0b8a4
【实现原理】
file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps2.jpg 使用一张图片作为鱼缸的整体背景,图片可以通过网上查找、实物拍摄、AI生成等方式获得。再找一张背景为透明的鱼的PNG图片,通过程序控制图片左右移动呈现鱼游动的效果。需要注意的是,透明背景的PNG图片需存在TF卡上进行加载才有透明效果。当按下按键B后,在屏幕上不断画小圆,作为“鱼食”。“鱼”感知到有“鱼食”后,不断改变调整自己的坐标已接近“鱼食”。当两者挨近时,“鱼食”消失,呈现被吃掉的效果。
制作步骤
【硬件准备】file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps3.png行空板K10 × 1 USB线 × 1file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps4.png TF卡 × 1
【软件准备】1.下载、打开软件file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps5.jpg Mind+ V1.8.1 RC1.0(公测版) ——上传模式
2.加载扩展模块file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps6.jpg主控板——行空板K10【图片素材】1. 背景图片file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps7.jpg将获取的鱼缸图片进行旋转和裁剪,得到分辨率为240*320的PNG图片。2. 鱼的图片file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps8.jpg将获取的鱼的图片进行旋转、去除背景和翻转,得到两张分辨率为30*54的PNG图片。3. 存入TF卡file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps9.jpg 将三张图片存入TF卡中,然后将卡插入行空板K10的卡槽中。
【编写程序】一、主程序(一)初始化部分file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps10.jpg1. 设置变量“dirc”,记录鱼游动的方向。2. 设置变量“fish_x”,记录鱼的X坐标值,初始值为30-120的随机数。3. 设置变量“fish_y”,记录鱼的y坐标值,初始值为20-270的随机数。4. 设置变量“eaten”,记录鱼食是否被吃或者触底,初始值为0,表示未吃/未触底。5. 设置变量“forgea”,记录鱼是否处于觅食过程,初始值为0,表示不在觅食。6. 启动子线程1,子线程1负责执行鱼的觅食指令。
(二)主循环部分file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps11.jpg1. 将TF卡内的背景图片bg.png显示在(0,0)处。2. 运行函数“fish( )”,参数为变量“dirc”,具体功能待后面进行定义。3. 将设置的缓存内容显示出来。4. 设置等待时长。
file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps12.png运行结果 二、函数“fish()”(一)向右游动file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps13.jpg1. 建立一个带数字值输入项的函数“fish(a)”。2. 当方向参数a=0时,代表方向向右,执行以下指令:(1)将TF卡内的鱼向右的图片f1.png显示在(fish_x,fish_y)处。(2)将变量“fish_y”的值增加3,实现向右移动的效果。(3)如果变量“fish_y”的值大于260,代表鱼接近右边缘,则将变量“dirc”的值设为1,实现改变方向,向左移动。(二)向左移动file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps14.jpg 3. 当方向参数a=1时,代表方向向右,执行以下指令:(1)将TF卡内的鱼向左的图片f2.png显示在(fish_x,fish_y)处。(2)将变量“fish_y”的值减少3,实现向左移动的效果。(3)如果变量“fish_y”的值小于20,代表鱼接近左边缘,则将变量“dirc”的值设为0,实现改变方向,向右移动。 file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps15.png运行结果 三、按键B触发file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps16.jpg1.设置变量“ food_x”,记录鱼食X坐标,初始值为为236。2.设置变量“ food_y”,记录鱼食Y坐标,初始值为为60。3.设置变量“ forage”的值为1,表示正在觅食。4.运行函数“food”,具体功能待后面进行定义。
四、函数“food”file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps17.jpg 1. 当鱼食没有被吃掉时即变量“eaten”的值为0),重复执行以下指令:(1)将变量“food_x”的值减少2,实现鱼食向下落的效果。(2)如果鱼和鱼食的相对位置很接近,则将变量“eaten”的值设置为1,表示被吃掉了。(3)如果变量“food_x”的值小于50,也将变量“eaten”的值设置为1,表示鱼食触底消失。(4)以(food_x,food_y)为圆心画一个半径为2的圆,作为“鱼食”。(5)设置等待时长,用以控制鱼食的下落速度。2. 如跳出循环,则意味着变量“eaten”的值为1,重新设置变量“eaten”的值为0,进入无鱼食状态,停止画圆。3. 设置变量“forage”的值为0,进入无鱼食状态,鱼恢复左右游动状态。file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps18.png运行结果 五、子线程1file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps19.jpg1. 子线程1启动后,需循环执行全部指令。2. 根据变量“forage”的值判断是否进入觅食状态,当其值为1时,执行以下指令:(1)根据鱼食和鱼的X坐标值的大小比较结果,来调整鱼的X坐标值,实现向上向下游动。(2)将鱼的X坐标值约束在20-190的范围内。(3)根据鱼食和鱼的y坐标值的大小比较结果,来调整鱼的Y坐标值,实现向左向右游动,同时改变方向。(4)将鱼的Y坐标值约束在10-270的范围内。3.设置一定的等待时长,控制鱼游动的速度。file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps20.png运行结果 【完整程序】file:///C:/Users/ruogu/AppData/Local/Temp/ksohtml13440/wps21.jpg
页:
[1]