音乐盒三(红外遥控)

来自Microduino Wikipedia
跳转至: 导航搜索
Language English

目的

搭建一个音乐盒,可播放TF卡中的音乐文件,用遥控器进行选歌,及音量操作,同时也可以用Joystick进行控制。

原理

检测是否有对应的红外遥控信号,根据不同红外信号控制播放音乐。同时检测摇杆X-Y方向的动作,通过读取模拟值来判断。同时判断停留时间长短来选择控制方式。

设备

模块 数量 功能
mCookie-CoreUSB/zh 1 核心板
mCookie-Hub/zh 1 传感器转接板
mCookie-Audio/zh 1 音频模块
mCookie-Amplifier/zh 1 功率放大模块
mCookie-OLED/zh 1 显示屏
mCookie-BM/zh 1 电池管理
Microduino-Joystick/zh 1 摇杆传感器
Microduino-IR receiver/zh 1 红外接收
  • 其他设备:
    • 喇叭两个
    • 电池1个
    • TF存储卡
    • 红外遥控器

加载代码

  • Setup 1:用USB线将CoreUSB模块与PC/Mac相连,并打开Arduino IDE。
  • Setup 2:点击Files > Examples > mCookie > _302_MusicBox_Remote, 加载程序。
  • Setup 3:选择好板卡和COM端口下载程序。出现上传成功(Done Uploading)提示,表示程序已经写进CoreUSB模块中了。

软件调试

  • 红外控制
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;
}
  • OLED显示界面,用户可以改
 //主界面,可自由定义
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));
}

搭建硬件

  • Setup 1:用连接线将OLED接到Hub模块的IIC接口上,Joystick传感器安装到A0,A1。IR receiver传感器接到D6。
  • Setup 2:将TF卡装在AudioShield模块的卡槽中。
MusicBox Joystick TF.jpg
  • Setup 3:将Audio和AudioShield模块堆叠并连接PC,就可以将想要播放的MP3文件储存在TF卡根目录下,最多储存9首。
MusicBox Joystick song.jpg
  • Setup4:将两个喇叭接到Amplifier上
MusicBox Joystick song speak.JPG
  • Setup5:将Audio,Audio shield,Amplifier三个叠堆到一块。
MusicBox Joystick 3 speak.JPG
  • Setup6:将激活后的电池盒与BM模块相连
CoreUSB Ble steup2.jpg
  • Setup7:将所有模块堆叠在一起,顺序随意(除了Audio,AudioShield和Amplifier三个要挨在一起),电路部分搭建完成了!

如何操作

你可以通过点按遥控器的相应按钮控制音乐盒的歌曲切换以及音量。

你也可以通过Joystick对音乐盒进行控制,方法如下。

也可以选择Duo-V进行堆叠,这样OLED就不需要连接在Hub上,整个应用的高度也会降低。

结果

通过红外遥控器或Joystick摇杆来控制音乐的播放、暂停与切歌。你也可以通过乐高搭建一个漂亮的外观。

视频