本帖最后由 A布 于 2013-3-17 11:42 编辑
网上购买了一个WT5001播放MP3的模块,价格30元,能插手机用的那种SD卡播放MP3,在论坛找了下没有相关的教程,无奈只有自己写代码了。苦逼的我第一次玩Arduino,还没学会走就先跑了。
先看看播放效果:
这也是第一次发帖,不会画那些图纸,就简单说下。arduino(小熊板)连接一个红外接收头,使用UART连接WT5001模块。
代码也是东拼西凑的,我自己都不知道什么意思,见笑了,大家将就看看,也希望大神给予指导。坛子里好像没有人使用这个模块,要是有人用的话希望可以一起交流,我本是打算还买一个ASR语音识别模块,由语音控制播放MP3的,但是语音识别模块也是没有ARDUINO的示例代码,并且是SPI接口的,看上去很复杂,没敢下手。
MP3播放模块代码如下:
- #include <IRremote.h> // 使用IRRemote函数库
-
- const int irReceiverPin = 2; // 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口
- IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
- decode_results results; // 定义results变量为红外结果存放位置
-
- void setup()
- {
- Serial.begin(9600); // 开启串口,波特率为9600
- irrecv.enableIRIn(); // 启动红外解码
- }
- int mp3_send(int code[], int length)
- {
- Serial.write(0x7e);
- for (int i = 0; i < length; i++)
- {
- Serial.write(code[i]);
- }
- Serial.write(0x7e);
-
- //返回操作码
- if (Serial.available())
- {
- return int(Serial.read());
- }
-
- return 0;
- }
- int mp3_read()
- {
- int data = 0;
- while (Serial.available() > 0)
- {
- data += Serial.read();
- delay(2);
- }
- return data;
- }
-
- void loop()
- {
- if (irrecv.decode(&results))
- {
- long value = results.value;
- Serial.println(value);
- if (value == 16720605)
- {
- //上一曲
- int code[] = {0x02, 0xa6};
- mp3_send(code, 2);
- }
- else if (value == 16712445)
- {
- //下一曲
- int code[] = {0x02, 0xa5};
- mp3_send(code, 2);
- }
- else if (value == 16761405)
- {
- //暂停
- int code[] = {0x02, 0xa3};
- mp3_send(code, 2);
- }
- else if (value == 16754775)
- {
- //音量加
- int code[] = {0x02, 0xc4};
- mp3_send(code, 2);
- int value = mp3_read();
- if (value > 0 && value < 31)
- {
- value+=5;
- if (value >= 31) value = 31;
- int val[] = {0x03, 0xa7, value};
- mp3_send(val, 3);
- }
- }
- else if (value == 16769055)
- {
- //音量减
- int code[] = {0x02, 0xc4};
- mp3_send(code, 2);
- int value = mp3_read();
- if (value > 0)
- {
- value-=5;
- if (value <= 0) value = 0;
- int val[] = {0x03, 0xa7, value};
- mp3_send(val, 3);
- }
- }
- else if (value == 16736925)
- {
- //循环播放
- int code[] = {0x03, 0xa9, 0x02};
- mp3_send(code, 3);
- }
- else
- {
- int code[2] = {0x02, 0xc1};
- mp3_send(code, 2);
- int value = mp3_read();
- Serial.println(value, DEC);
- }
- /**/
-
- irrecv.resume(); // 继续等待接收下一组信号
- }
- delay(600); //延时600毫秒,做一个简单的消抖
- }
复制代码 |