Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4305|回復: 1
打印 上一主題 下一主題

Mp3擴張板-音樂播放問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2013-8-13 10:37:31 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
使用的為這一塊ELECHOUSE Arduino Mp3 Shield
然後以感應Senser來控制音樂播放


現在想在一首音樂播放完之前,重複感應時不會再觸發播放
暫時以delay來做控制,但考慮到之後可能會更換音樂,時間長短不一
因此想請教大家,是否有程式碼可以得到音樂檔案的時間長度呢?

或者有其他建議的方法,可以在播完一首音樂後再開始判定下一次感應呢?
謝謝!


板子的函式如下:
https://github.com/elechouse/Mp3Shield
2#
 樓主| 發表於 2013-8-20 18:08:30 | 只看該作者
大家好~又有問題要來向大家請教囉

目前想以紅外線sensor來控制mp3擴張板的播放,感應到人時播放音樂,以及延時感應這兩種狀況都沒問題,但當我想要在播放音樂的狀態下,使紅外線感應的值不被讀取,讓音樂在播放結束前不重複撥放,就遇到難題了。

http://www.elechouse.com/elechou ... %20User%20Guide.pdf

向人請教過後,得到的方法是得先得到音樂播放的狀態
因此寫了底下的程式碼在MP3.cpp裡
void MP3::checkWorkState()
{
cmd_buf[1]=0x02;
cmd_buf[2]=0xC2;
send_cmd(cmd_buf);
}

然後Arduino的程式碼如下,可以請大家幫我看看是哪邊出問題嗎?
或是有其他寫法可以得到我需要的效果呢? 謝謝!

‪#‎include‬ <SoftwareSerial.h>
#include <MP3.h>

MP3 mp3;
const int PIRSensor = 2; // 紅外線動作感測器連接的腳位
const int ledPin = 13; // LED 腳位
int sensorValue = 0; // 紅外線動作感測器訊號變數
int state = 0;

void setup() {
/** begin function */
mp3.begin(); // select software serial
// mp3.begin(); // select hardware serial(or mp3.begin(MP3_HARDWARE_SERIAL);)

Serial.begin(9600);

/** set volum to the MAX */
mp3.volume(0x1F);

/** set MP3 Shield CYCLE mode */
mp3.set_mode(MP3::SINGLE);

pinMode(PIRSensor, INPUT);
pinMode(ledPin, OUTPUT);
}

void loop(){
sensorValue = digitalRead(PIRSensor); // 讀取 PIR Sensor 的狀態
mp3.checkWorkState(); //檢查播放狀態
while(Serial.available() > 0 ) {
state = Serial.read(); //讀取播放狀態
}

switch (state) {
case '0x02' : //音樂停止時
if (sensorValue == HIGH) {
mp3.play_usb_disk(0x0001); // 有人,放音樂
digitalWrite(ledPin, HIGH); // 有人,開燈
}
case '0x01' : //音樂播放時
sensorValue == LOW;
}
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-7-3 17:26 , Processed in 0.339276 second(s), 10 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表