Go Down

Topic: Controlling MP3 player with serial commands (Read 2 times) previous topic - next topic

mtvedten

Feb 25, 2011, 12:00 am Last Edit: Feb 25, 2011, 12:07 am by mtvedten Reason: 1
Hello!

I an trying to send serial commands to a MP3 player using the Tx and Rx pins.

http://avrcard.com/products/mp3orator.htm

I have been able to get data from the player and display it in the Serial monitor, if I trigger the player by physical connetions.

But I can't send it commands.
According to the documentation I should send "PF: 10000" to play the file "10000.mp3".
It should then send a resonse back "PLAYING 10000.mp3".


But I think i am getting confusion when trying to read and write serial data at the same time.

So how can i send a command and wait for a resonse, and write it to the serial monitor only?
I think waht happens now is, that when I try to write to the serial monitor, I also write to the MP3 player.

So how can i:
1. send a serial command to the mp3 player
2.  get a response back and
3.  write that to the serial monitor?

my code so far:


Code: [Select]

char incomingByte; // for incoming serial data


void setup() {
 

  Serial.begin(9600);


}




void loop() {

  // Send play command to MP3 via Tx
Serial.write("PF:10000");


    //READ REPSONSE FROM  MP3 player
    // send data only when you receive data:
while (Serial.available() > 0) {
             
// read the incoming byte:
incomingByte = Serial.read();
               
// say what you got:
//Serial.print("I received: ");
Serial.print(incomingByte);

}


//WAit 5 sec, and play again

delay(5000);
}

mtvedten

Hm. OK, but if I disconnect the USB, disable code that write to the monitor and use external power;  should it then automatically connect to the MP3 player?
Will the onboard Tx and Rx LEDs blink when communicating with the player?

And I just need to find a different way to indicate that I got a response?


mtvedten

#2
Feb 25, 2011, 02:31 am Last Edit: Feb 25, 2011, 02:35 am by mtvedten Reason: 1
I am using the arduino Uno. Smb version. The one with the tiny chip and not the big chip.

Thanks for your help! :-)

mtvedten

Ok I got the New Software Library working.  :)

But i often get garbage in the messages, and I think that mess up the reliability.
But generally I can read the incomming messages from the player inbetween the garbage.

It was more stable in the standard Tx an Rx pins.

How can "filter out" the garbage?

My Code
Code: [Select]
#include <NewSoftSerial.h>

#define rxPin 2
#define txPin 3


char incomingByte; // for incoming serial data
boolean isPlaying = false;
NewSoftSerial mySerial(rxPin, txPin);


void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

Serial.begin(9600);
mySerial.begin(9600);

pinMode(8, INPUT);

}




void loop() {


    if ((digitalRead(8) == HIGH) && (isPlaying==false)) {
        playAudio();
    }
   
    if ((digitalRead(8) == HIGH) && (isPlaying==true)) {
      fadeOut();
    }

   //READ RESPONSE FROM  MP3 player
    // send data only when you receive data:
  while (mySerial.available() > 0) {

// read the incoming byte:
incomingByte = mySerial.read();
               
// say what you got:
       
Serial.print(incomingByte);

}


}

void playAudio() {
mySerial.flush();
mySerial.println("PF 10007");

isPlaying = true;
delay(500);
}

void fadeOut() {
  //Fade out
   mySerial.flush();
   mySerial.println("FO");

   delay(1000);
   // Stop file
   mySerial.flush();
   mySerial.println("SP");
   
  isPlaying = false;
}



My Garbage
Code: [Select]
F`ÿnÿ
?II=I遪r­¹½Ý¹
½µµ?¹?5)Rþ ÿ
Q%=9é?¢½ÁÁ??5)
¢?õÊJ*r?½??¥±?5)Rþ@ÿ`ÿ00)ÿPLAY: 10007.MP3

ý¨H(jUÔÊJ?¢½ÁÁ??5)
¢?õÊJ*r?½??¥±?5)Rþÿ`ÿ`ÿ7
PLAY: 10007.MP3

SP

ACTION: Stopped
ACTION: End of file

@ÿ`ÿ007ÿPLAY: 10007.MP3

SP

ACTION: Stopped
ACTION: End of file

ACTION: End of file



Thanks

Go Up