项目介绍&总结
这个大一暑期和大二上学期做的一个合作项目。
我们希望做一个硬件来实现对音游的实体化,所采用了音乐楼梯的形式——检测人的位置来击打掉落的光快,从而发出音乐。
硬件上使用了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