用遥控器播放音乐
组件和用品
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
应用和在线服务
![]() |
|
关于这个项目
你好黑客社区!
我是 Simone Adobs,这是我在本网站上发布的第二个项目。
这个项目的逻辑很简单:
- 拿起你的遥控器,选择你想播放的旋律;
- 带有蜂鸣器的 Arduino 将播放旋律;
- 在 LCD 屏幕上,您可以看到播放的音符。
部分代码解释:
这是一个旋律的例子,所有的旋律都是这样写的:
void melody_example() { lcd.clear(); lcd.setCursor(0,0); lcd.print("歌曲名");延迟(1000);液晶显示器(); nota_mi(持续时间,暂停); //音符 nota_do(duration,pause); //音符lcd.clear();延迟(100); Reset_AVR(); //此命令用于在不按任何按钮的情况下重置Arduino}
要使用“Reset_AVR()”命令,您必须将此代码放在草图的顶部:
#include #include #define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
这就是 Arduino 如何理解必须播放的旋律:
if (result==12495) { //12495 是你按下按钮 1 时我的遥控器发送的代码 melody_1(); } else if (result==6375) { //6375是按钮2的代码melody_2(); } else if (result==31365) { //31365是按钮3的代码melody_3(); } else if (result==4335) { //4335是按钮4的代码melody_4(); } }
void nota_example(int duration, int pause) { 关闭(); //这个命令调用了一个我会往下解释的函数lcd.setCursor(0, 0); lcd.print("示例"); //打印音符名称 NewTone(11,262,duration); //11->蜂鸣器引脚-262->音符代码延迟(暂停); //等待几毫秒}
您想在播放时停止旋律吗?
没问题,借助“shut()”功能,您可以随时停止播放旋律。
这是“shut()”函数:
void Shut() { if (irrecv.decode(&results)) { //接收按钮按下的代码 result=results.value, HEX; //保存收到的代码 Serial.println(result); if (result==-23971) { //-23971 在我的遥控器上代表关机按钮 Reset_AVR(); //重置Arduino } }irrecv.resume(); //允许Arduino从远程接收新代码}
我希望你会喜欢这个项目,如果是的话,试着看看我以前的项目。
祝你有美好的一天..
来自意大利的西蒙<3
代码
- 播放旋律
播放旋律C/C++
将此代码复制到 Arduino IDE#include#include #include #include #include #define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {} #define buzzer 11 LiquidCrystal lcd(9, 8, 7, 6, 5, 4);int result;int RECV_PIN=2;IRrecvirrecv(RECV_PIN);decode_results results;无效设置(){ Serial.begin(9600);液晶显示器。开始(16,2); lcd.setCursor(0,0); lcd.print("-----选择-----"); lcd.setCursor(0,1); lcd.print("----一首歌!!----"); pinMode(蜂鸣器,输出); irrecv.enableIRIn();} void loop() { if (irrecv.decode(&results)) { result=results.value, HEX; Serial.println(结果);如果(结果==12495){ ode(); } else if (result==6375) { 伦敦(); } else if (result==31365) { fur(); } else if (result==4335) { 海盗(); }irrecv.resume(); } 延迟(100);} 空毛(){ lcd.clear(); lcd.setCursor(0,0); lcd.print("毛皮伊莉丝");延迟(1000);液晶显示器(); nota_mi(150,200); nota_rez(150,200); nota_mi(150,200); nota_rez(150,200); nota_mi(150,200); nota_si(150,200); nota_rez(150,200); nota_do(150,200); nota_la(450,300); nota_do(150,200); nota_mi(150,200); nota_la(150,200); nota_si(450,300); nota_mi(150,200); nota_solz(150,200); nota_si(150,200); nota_do(450,300); nota_mi(150,200); nota_mi(150,200); nota_rez(150,200); nota_mi(150,200); nota_rez(150,200); nota_mi(150,200); nota_si(150,200); nota_rez(150,200); nota_do(150,200); nota_la(450,300); nota_do(150,200); nota_mi(150,200); nota_la(150,200); nota_sol(450,300); nota_mi(150,200); nota_do(150,200); nota_si(150,200); nota_la(600,800); nota_mi(150,200); nota_rez(150,200); nota_mi(150,200); nota_rez(150,200); nota_mi(150,200); nota_si(150,200); nota_rez(150,200); nota_do(150,200); nota_la(450,300); nota_do(150,200); nota_mi(150,200); nota_la(150,200); nota_si(450,300); nota_mi(150,200); nota_solz(150,200); nota_si(150,200); nota_do(450,300);液晶显示器();延迟(100); Reset_AVR();}void london() { lcd.clear(); lcd.setCursor(0,0); lcd.print("伦敦桥"); lcd.setCursor(0,1); lcd.print("正在掉下来");延迟(1000);液晶显示器(); nota_sol(450,600); nota_la(150,200); nota_sol(300,400); nota_fa(300,400); nota_mi(300,400); nota_fa(300,400); nota_sol(600,800); nota_re(300,400); nota_mi(300,400); nota_fa(600,800); nota_mi(300,400); nota_fa(300,400); nota_sol(600,800); nota_sol(450,600); nota_la(150,200); nota_sol(300,400); nota_fa(300,400); nota_mi(300,400); nota_fa(300,400); nota_sol(600,800); nota_re(600,800); nota_sol(600,800); nota_mi(300,400); nota_do(450,600);液晶显示器();延迟(100); Reset_AVR();}void ode() { lcd.clear(); lcd.setCursor(0,0); lcd.print("欢乐颂");延迟(1000);液晶显示器(); nota_mi(300,400); nota_mi(300,400); nota_fa(300,400); nota_sol(300,400); nota_sol(300,400); nota_fa(300,400); nota_mi(300,400); nota_re(300,400); nota_do(300,400); nota_do(300,400); nota_re(300,400); nota_mi(300,400); nota_mi(450,600); nota_re(150,200); nota_re(600,800); nota_mi(300,400); nota_mi(300,400); nota_fa(300,400); nota_sol(300,400); nota_sol(300,400); nota_fa(300,400); nota_mi(300,400); nota_re(300,400); nota_do(300,400); nota_do(300,400); nota_re(300,400); nota_mi(300,400); nota_re(450,600); nota_do(150,200); nota_do(600,800); nota_re(300,400); nota_re(300,400); nota_mi(300,400); nota_do(300,400); nota_re(300,400); nota_mi(150,200); nota_fa(150,200); nota_mi(300,400); nota_do(300,400); nota_re(300,400); nota_mi(150,200); nota_fa(150,200); nota_mi(300,400); nota_re(300,400); nota_do(300,400); nota_re(300,400); nota_sol(600,800); nota_mi(300,400); nota_mi(300,400); nota_fa(300,400); nota_sol(300,400); nota_sol(300,400); nota_fa(300,400); nota_mi(300,400); nota_re(300,400); nota_do(300,400); nota_do(300,400); nota_re(300,400); nota_mi(300,400); nota_re(450,600); nota_do(150,200); nota_do(600,800);液晶显示器();延迟(100); Reset_AVR();}void 海盗() { lcd.clear(); lcd.setCursor(0,0); lcd.print("他是海盗");延迟(1000);液晶显示器(); nota_mi(150,200); nota_sol(150,200); nota_la(300,400); nota_la(300,400); nota_la(150,200); nota_si(150,200); nota_do(300,400); nota_do(300,400); nota_do(150,200); nota_re(150,200); nota_si(300,400); nota_si(300,400); nota_la(150,200); nota_sol(150,200); nota_sol(150,200); nota_la(450,600); nota_mi(150,200); nota_sol(150,200); nota_la(300,400); nota_la(300,400); nota_la(150,200); nota_si(150,200); nota_do(300,400); nota_do(300,400); nota_do(150,200); nota_re(150,200); nota_si(300,400); nota_si(300,400); nota_la(150,200); nota_sol(150,200); nota_la(300,400);延迟(400); nota_mi(150,200); nota_sol(150,200); nota_la(300,400); nota_la(300,400); nota_la(150,200); nota_do(150,200); nota_re(300,400); nota_re(300,400); nota_re(150,200); nota_mi(150,200); nota_fa(300,400); nota_fa(300,400); nota_mi(150,200); nota_re(150,200); nota_mi(150,200); nota_la(450,600); nota_la(150,200); nota_si(150,200); nota_do(300,400); nota_do(300,400); nota_re(300,400); nota_mi(150,200); nota_la(450,600); nota_la(150,200); nota_do(150,200); nota_si(300,400); nota_si(300,400); nota_do(150,200); nota_la(150,200); nota_si(900,1200); nota_si(300,400); nota_si(300,400); nota_do(150,200); nota_la(150,200); nota_si(900,1200); nota_si(300,400); nota_si(300,400); nota_la(150,200); nota_sol(150,200); nota_la(600,800);液晶显示器();延迟(100); Reset_AVR();}void Shut() { if (irrecv.decode(&results)) { result=results.value, HEX; Serial.println(结果); if (result==-23971) { Reset_AVR(); } }irrecv.resume();}void nota_do(int duration, int pause) { 关闭(); lcd.setCursor(0, 0); lcd.print("做"); NewTone(11,262,持续时间); //做延迟(暂停); }void nota_doz(int 持续时间,int 暂停){ 关闭(); lcd.setCursor(0, 0); lcd.print("做#"); NewTone(11,277,持续时间); //做延迟(暂停); }void nota_re(int 持续时间,int 暂停){ 关闭; lcd.setCursor(0, 0); lcd.print("重新"); NewTone(11,294,持续时间); //RE延迟(暂停); }void nota_rez(int 持续时间,int 暂停) { 关闭; lcd.setCursor(0, 0); lcd.print("重新#"); NewTone(11,311,持续时间); //RE延迟(暂停); }void nota_mi(int 持续时间,int 暂停){ 关闭(); lcd.setCursor(0, 0); lcd.print("米"); NewTone(11,330,持续时间); //MI延迟(暂停); }void nota_fa(int 持续时间,int 暂停){ 关闭(); lcd.setCursor(0, 0); lcd.print("发"); NewTone(11,349,持续时间); //FA延迟(暂停); }void nota_faz(int 持续时间,int 暂停){ 关闭(); lcd.setCursor(0, 0); lcd.print("发#"); NewTone(11,370,持续时间); //FA延迟(暂停); }void nota_sol(int 持续时间,int 暂停) { 关闭(); lcd.setCursor(0, 0); lcd.print("溶胶"); NewTone(11,392,持续时间); //SOL延迟(暂停); }void nota_solz(int 持续时间,int 暂停) { 关闭(); lcd.setCursor(0, 0); lcd.print("溶胶#"); NewTone(11,415,持续时间); //SOL延迟(暂停); }void nota_la(int 持续时间,int 暂停) { 关闭(); lcd.setCursor(0, 0); lcd.print("拉"); NewTone(11,440,持续时间); //LA延迟(暂停); } void nota_laz(int 持续时间,int 暂停) { 关闭(); lcd.setCursor(0, 0); lcd.print("啦#"); NewTone(11,466,持续时间); //LA延迟(暂停); }void nota_si(int 持续时间,int 暂停) { 关闭(); lcd.setCursor(0, 0); lcd.print("Si"); NewTone(11,494,持续时间); //SI延迟(暂停); }
示意图
canzoni_con_tastiera_fQS3978roa.fzz
制造工艺