大家好~又有問題要來向大家請教囉 目前想以紅外線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, 2025-2-28 01:39 , Processed in 0.485669 second(s), 11 queries , Apc On.
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.