单片机实现实体音游模拟器

本文介绍了作者参与的一个大一暑期和大二上学期的项目,利用stm32-f103rb单片机、音频播放模块、LED灯和超声波传感器制作了一个音乐楼梯形式的实体音游模拟器。尽管硬件设计中的超声波传感器精度问题导致最终效果不理想,但该项目展示了将创意转化为实体硬件的尝试和经验教训。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目介绍&总结

这个大一暑期和大二上学期做的一个合作项目。
我们希望做一个硬件来实现对音游的实体化,所采用了音乐楼梯的形式——检测人的位置来击打掉落的光快,从而发出音乐。
硬件上使用了XNUCLEO的stm32-f103rb单片机(主控),音频播放模块(播放音频),LED灯(阵列表示台阶),超声波传感器(障碍物位置输入)。
软件上用mbed online compiler和keil5测试程序,再使用st-link烧录进单片机。
我主要参与了开始的创意确立和方案制定,完成了代码中部分逻辑的实现和最后实物的焊接与组装。
虽然付出了很多努力,但最终效果不尽如人意。主要是因为硬件设计需要能力要求较高,我们当时的水平难以达到,走了很多弯路。而且使用的超声波传感器比较玄学,测量精度不佳。综上种种,要想快速实现idea,并且实现快速迭代,还是软件好用。或许有机会再去啃硬件的“深坑”。

效果图

效果图

代码部分

#include "mbed.h"

//define pins of LEDs(6*6 matrix)

BusOut dec0(PA_10,PB_3,PB_5,PB_4);//CN9
BusOut dec1(PB_10,PA_8,PA_9,PC_7);//CN5
BusOut dec2(PB_6,PA_7,PA_6,PA_5);//CN8
BusOut dec3(PB_9,PB_8,PC_9,PC_3);//CN7
BusOut dec4(PC_2,PA_0,PA_1,PC_13);//CN7
BusOut dec5(PB_7,PA_15,PA_14,PA_13);//CN9

//define pins of sensors
DigitalOut trig_L(PC_8);//
DigitalOut trig_R(PC_6);//
DigitalIn echo_L(PC_5);
DigitalIn echo_R(PA_12);//CN10
int position;

//define pins of audio module
BusOut aud(PC_12,PC_10,PC_11,PD_2,PC_4,PB_13);//CN10 0d000001~0d100100
//PwmOut buz(PB_13);

//define pins of song selector(switch)
DigitalIn song(PA_11);
int SongNum=0;

//define pins of start botton
DigitalIn sta(PB_12);

//define pins of response LEDs
DigitalOut red(PB_11);//?
DigitalOut green(PB_2);//?

//pc communication(for debug)
Serial pc(USBTX, USBRX);

//define buzzer frequencies of keys

/*float S_0=0;
float C_3=261.63/2,c_3=277.18/2,D_3=293.66/2,d_3=311.13/2,E_3=329.63/2,F_3=349.23/2,
f_3=369.99/2,G_3=392.00/2,g_3=415.30/2,A_3=440.00/2,a_3=466.16/2,B_3=493.88/2;
float C_4=261.63,c_4=277.18,D_4=293.66,d_4=311.13,E_4=329.63,F_4=349.23,
f_4=369.99,G_4=392.00,g_4=415.30,A_4=440.00,a_4=466.16,B_4=493.88;
float C_5=261.63*2,c_5=277.18*2,D_5=293.66*2,d_5=311.13*2,E_5=329.63*2,F_5=349.23*2,
f_5=369.99*2,G_5=392.00*2,g_5=415.30*2,A_5=440.00*2,a_5=466.16*2,B_5=493.88*2;
*/

int S_0=0;
int C_3=1,c_3=2,D_3=3,d_3=4,E_3=5,F_3=6,
    f_3=7,G_3=8,g_3=9,A_3=10,a_3=11,B_3=12;
int C_4=13,c_4=14,D_4=15,d_4=16,E_4=17,F_4=18,
    f_4=19,G_4=20,g_4=21,A_4=22,a_4=23,B_4=24;
int C_5=25,c_5=26,D_5=27,d_5=28,E_5=29,F_5=30,
    f_5=31,G_5=32,g_5=33,A_5=34,a_5=35,B_5=36;


//define combo counter
int com = 0;

//define songs
int TestSong[]={
   0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36};
int   WeightOfTheWorld[]= {
   
    S_0,S_0,S_0,S_0,S_0,A_3,E_4,D_4,G_4,A_3,E_4,D_4,G_4,A_3,E_4,D_4,A_4,A_3,E_4,D_4,A_4,
    A_3,E_4,D_4,G_4,A_3,E_4,D_4,G_4,A_3,E_4,D_4,A_4,A_3,A_4,A_4,S_0,
    A_3,A_3,A_3,A_3,A_3,B_3,C_4,S_0,A_3,A_3,A_3,A_3,A_3,B_3,C_4,S_0,
    C_4,D_4,E_4,S_0,S_0,S_0,E_4,F_4,E_4,E_4,D_4,D_4,S_0,S_0,S_0,S_0,
    A_3,A_3,A_3,A_3,A_3,B_3,C_4,S_0,A_3,A_3,A_3,A_3,A_3,B_3,C_4,S_0,
    C_4,S_0,G_4,S_0,S_0,S_0,G_4,F_4,E_4,E_4,D_4,D_4,S_0,S_0,S_0,S_0,
    D_4,C_4,B_3,C_4,S_0,S_0,D_4,S_0,S_0,E_4,S_0,S_0,F_4,E_4,C_4,S_0,
    G_3,C_4,C_4,C_4,C_4,D_4,C_4,D_4,C_4,D_4,E_4,E_4,S_0,S_0,S_0,S_0,
    C_4,S_0,S_0,D_4,S_0,S_0,C_4,E_4,F_4,E_4,C_4,S_0,S_0,//3
    C_4,G_4,G_4,G_4,g_4,G_4,F_4,d_4,F_4,D_4,S_0,S_0,S_0,S_0,S_0,//1
    C_4,D_4,E_4,S_0,S_0,E_4,D_4,S_0,S_0,//7
    B_3,S_0,C_4,C_4,B_3,C_4,S_0,G_4,G_4,S_0,S_0,S_0,//4
    B_3,S_0,C_4,C_4,B_3,G_4,S_0,A_4,G_4,S_0,S_0,S_0,//4
    C_4,D_4,E_4,F_4,E_4,F_4,E_4,D_4,C_4,D_4,S_0,S_0,S_0,B_3,C_4,S_0,
    B_3,S_0,C_4,C_4,B_3,C_4,S_0,G_4,G_4,S_0,S_0,S_0,//4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值