“音乐盒三(红外遥控)”的版本间的差异
853387039@qq.com(讨论 | 贡献) (Created page with "{{Language| 音乐盒一(红外控制)}} {| style="width: 800px;" |- | ==目的== 搭建一个音乐盒,可播放TF卡中的音乐文件,用遥控器进行选歌,及...") |
(→加载代买) |
||
(未显示1个用户的2个中间版本) | |||
第38行: | 第38行: | ||
[[File: MusicBox_Remote-module.jpg|600px|center]] | [[File: MusicBox_Remote-module.jpg|600px|center]] | ||
− | == | + | ==加载代码== |
*Setup 1:用USB线将CoreUSB模块与PC/Mac相连,并打开Arduino IDE。 | *Setup 1:用USB线将CoreUSB模块与PC/Mac相连,并打开Arduino IDE。 | ||
[[File:CoreUSB_Ble_pc.jpg|600px|center]] | [[File:CoreUSB_Ble_pc.jpg|600px|center]] | ||
第45行: | 第45行: | ||
* Setup 3:选择好板卡和COM端口下载程序。出现上传成功(Done Uploading)提示,表示程序已经写进CoreUSB模块中了。 | * Setup 3:选择好板卡和COM端口下载程序。出现上传成功(Done Uploading)提示,表示程序已经写进CoreUSB模块中了。 | ||
[[File: _ MusicBox_Remote _ino-ok.jpg|600px|center]] | [[File: _ MusicBox_Remote _ino-ok.jpg|600px|center]] | ||
+ | |||
==软件调试== | ==软件调试== | ||
− | * | + | *红外控制 |
− | |||
<source lang="cpp"> | <source lang="cpp"> | ||
− | + | if (irrecv.decode(&results)) { | |
+ | //Serial.println(results.value, HEX); | ||
+ | irrecv.resume(); // Receive the next value | ||
− | + | if (results.value == 0xFFA857) | |
− | + | { | |
− | + | music_status = !music_status; //播放或暂停 | |
+ | if (music_status == true) //播放 | ||
+ | { | ||
+ | Serial.println("play"); //串口输出 “play”(工作 | ||
+ | audio_play(); //音频工作 | ||
+ | } | ||
+ | else //暂停 | ||
+ | { | ||
+ | Serial.println("pause"); //串口输出 “pause”(暂停) | ||
+ | audio_pause(); //音频暂停工作 | ||
+ | } | ||
+ | } | ||
+ | else if (results.value == 0xFF906F)//下一曲 | ||
+ | { | ||
+ | music_num++; //歌曲序号加 | ||
+ | if (music_num > music_num_MAX) //限制歌曲序号范围,如果歌曲序号大于30 | ||
+ | { | ||
+ | music_num = 1; //歌曲序号返回1 | ||
+ | } | ||
+ | music_status = true; | ||
+ | audio_choose(music_num); | ||
+ | audio_play(); | ||
+ | eeprom_WRITE(); | ||
+ | } | ||
+ | else if (results.value == 0xFFE01F)//上一曲 | ||
+ | { | ||
+ | music_num--; //歌曲序号减1 | ||
+ | if (music_num < 1) //限制歌曲序号范围,如果歌曲序号小于1 | ||
+ | { | ||
+ | music_num = music_num_MAX; //歌曲序号为最大(9) | ||
+ | } | ||
+ | music_status = true; | ||
+ | audio_choose(music_num); //音频选择歌曲序号 | ||
+ | audio_play(); //音频工作 | ||
+ | eeprom_WRITE(); | ||
+ | } | ||
+ | else if (results.value == 0xFF02FD)//音量加 | ||
+ | { | ||
+ | music_vol++; //音量+1 | ||
+ | if (music_vol > 30) music_vol = 1; //若音量大于30,则音量为3 | ||
+ | audio_vol(music_vol); | ||
+ | music_status = true; | ||
+ | eeprom_WRITE(); | ||
+ | } | ||
+ | else if (results.value == 0xFF9867)//音量减 | ||
+ | { | ||
+ | music_vol--; //音量减1 | ||
+ | if (music_vol < 1) music_vol = 30; //如果音量小于1,音量为30 | ||
+ | audio_vol(music_vol); | ||
+ | music_status = true; | ||
+ | eeprom_WRITE(); | ||
+ | } | ||
+ | } | ||
+ | else | ||
+ | results.value = 0; | ||
</source> | </source> | ||
*检测摇杆值 | *检测摇杆值 | ||
第115行: | 第171行: | ||
[[File: _MusicBox_Joystick _song.jpg|600px|center]] | [[File: _MusicBox_Joystick _song.jpg|600px|center]] | ||
*Setup4:将两个喇叭接到Amplifier上 | *Setup4:将两个喇叭接到Amplifier上 | ||
− | [[file: MusicBox_Joystick _song_speak.JPG| | + | [[file: MusicBox_Joystick _song_speak.JPG|600px|center]] |
*Setup5:将Audio,Audio shield,Amplifier三个叠堆到一块。 | *Setup5:将Audio,Audio shield,Amplifier三个叠堆到一块。 | ||
− | [[file: MusicBox_Joystick _3_speak.JPG| | + | [[file: MusicBox_Joystick _3_speak.JPG|600px|center]] |
*Setup6:将激活后的电池盒与BM模块相连 | *Setup6:将激活后的电池盒与BM模块相连 | ||
[[File:CoreUSB_Ble_steup2.jpg|600px|center]] | [[File:CoreUSB_Ble_steup2.jpg|600px|center]] |
2015年10月30日 (五) 02:17的最新版本
Language | English |
---|
目的搭建一个音乐盒,可播放TF卡中的音乐文件,用遥控器进行选歌,及音量操作,同时也可以用Joystick进行控制。 原理检测是否有对应的红外遥控信号,根据不同红外信号控制播放音乐。同时检测摇杆X-Y方向的动作,通过读取模拟值来判断。同时判断停留时间长短来选择控制方式。 设备
加载代码
软件调试
if (irrecv.decode(&results)) {
//Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
if (results.value == 0xFFA857)
{
music_status = !music_status; //播放或暂停
if (music_status == true) //播放
{
Serial.println("play"); //串口输出 “play”(工作
audio_play(); //音频工作
}
else //暂停
{
Serial.println("pause"); //串口输出 “pause”(暂停)
audio_pause(); //音频暂停工作
}
}
else if (results.value == 0xFF906F)//下一曲
{
music_num++; //歌曲序号加
if (music_num > music_num_MAX) //限制歌曲序号范围,如果歌曲序号大于30
{
music_num = 1; //歌曲序号返回1
}
music_status = true;
audio_choose(music_num);
audio_play();
eeprom_WRITE();
}
else if (results.value == 0xFFE01F)//上一曲
{
music_num--; //歌曲序号减1
if (music_num < 1) //限制歌曲序号范围,如果歌曲序号小于1
{
music_num = music_num_MAX; //歌曲序号为最大(9)
}
music_status = true;
audio_choose(music_num); //音频选择歌曲序号
audio_play(); //音频工作
eeprom_WRITE();
}
else if (results.value == 0xFF02FD)//音量加
{
music_vol++; //音量+1
if (music_vol > 30) music_vol = 1; //若音量大于30,则音量为3
audio_vol(music_vol);
music_status = true;
eeprom_WRITE();
}
else if (results.value == 0xFF9867)//音量减
{
music_vol--; //音量减1
if (music_vol < 1) music_vol = 30; //如果音量小于1,音量为30
audio_vol(music_vol);
music_status = true;
eeprom_WRITE();
}
}
else
results.value = 0;
int uiStep() //切歌
{
if (analogRead(A0) < 100) //Y-up
{
delay(50); //延迟50毫秒输出
if (analogRead(A0) < 100) //
return 1; //回到动作1
}
if (analogRead(A1) < 100) //
{
delay(50); //延迟50毫秒输出
if (analogRead(A1) < 100) //X-Right
return 2; //回到动作2
}
if (analogRead(A1) > 900) //X-Left
{
delay(50); //延迟50毫秒输出
if (analogRead(A1) > 900) //
return 3; //回到动作3
}
return 0;
}
//主界面,可自由定义
void draw()
{
setFont_L;
u8g.setPrintPos(4, 16);
u8g.print("Music_sta:");
u8g.print(music_status ? "play" : "pause");
u8g.setPrintPos(4, 16 * 2);
u8g.print("Music_vol:");
u8g.print(music_vol);
u8g.print("/30");
u8g.setPrintPos(4, 16 * 3);
u8g.print("Music_num:");
u8g.print(music_num);
u8g.print("/");
u8g.print(music_num_MAX);
u8g.setPrintPos(4, 16 * 4);
u8g.print("....Microduino....");
//u8g.print(rtc.formatTime(RTCC_TIME_HMS));
}
搭建硬件
如何操作你可以通过点按遥控器的相应按钮控制音乐盒的歌曲切换以及音量。 你也可以通过Joystick对音乐盒进行控制,方法如下。 也可以选择Duo-V进行堆叠,这样OLED就不需要连接在Hub上,整个应用的高度也会降低。 结果通过红外遥控器或Joystick摇杆来控制音乐的播放、暂停与切歌。你也可以通过乐高搭建一个漂亮的外观。 视频 |