創るたのしみを応援

マイコンで制御できるMP3プレイヤー MP3 Trigger V24

Arduino版サンプルコード

#include <SoftwareSerial.h>

/* UART通信オブジェクト生成 */
SoftwareSerial MP3(A1,A0);//rx,tx

/* プロトタイプ宣言 */
int get_number_of_tracks(void);
void set_number_of_tracks(uint8_t number);
void set_number_of_directory(uint8_t number);
void control_tracks(char control);
void set_volume(uint8_t val);
void quiet_mode(bool val);
int confirm(void);

/* グローバル変数 */
int sum = 0;

/////////////////////
/* メインプログラム */
////////////////////

/* 初期設定 */
void setup(){
  
    delay(100);
    MP3.begin(38400);
    Serial.begin(9600);   

    sum = get_number_of_tracks(); // 総トラック数を取得
    Serial.print("Number of all Tracks:"); // シリアルモニタに総トラック数を表示
    Serial.print(sum);
    Serial.print("\r\n");
    set_volume(200); // 音量セット
    quiet_mode(false); // クワイエットモードOFF
}
    
/* メインループ */
void loop(){
        
        /* 曲が終了したら次の曲へ飛ぶ */
        for(int i = 1; i<= sum; i++){
            Serial.print("Track:");
            Serial.print(i);
            Serial.print("\r\n");
            set_number_of_tracks(i);
            confirm(); // 曲を変えると2が返ってくるので受け取る
            int check = 0;
            while(check != 1 && check != 2 && check != 3){
                check = confirm();
            }
            Serial.print("Next\r\n");
        }
         
        /*15秒間停止*/
        Serial.print("stop\r\n");
        control_tracks('O');       
        delay(15000);
}


///////////////////////////////
/* 総トラック数(曲数)を取得する関数 */
///////////////////////////////
int get_number_of_tracks(void){
    while(MP3.availableForWrite() != 0);
    MP3.write('S');
    while(MP3.availableForWrite() != 0);
    MP3.write('1');
    char track[5];
    
    /* 待機 */
    while(MP3.available() == 0);
    track[0] = MP3.read(); // '='取得
    
    /* 他ラック数をASCII文字で取得 */
    int count = 0;
    int i = 1;
    while(count <= 1000){ // 1秒待機
        if(MP3.available() > 0){
            track[i] = MP3.read();
            track[i+1]='\0';
            i++;
        }
        count++;
        delay(1);
    }
    
    /* ASCII文字を数値に変換 */
    for(i = 1; i<= 3; i++){
        switch(track[i]){
            case '0':
                track[i] = 0;        
                break;
            case '1':
                track[i] = 1;        
                break;
            case '2':
                track[i] = 2;        
                break;
            case '3':
                track[i] = 3;        
                break;
            case '4':
                track[i] = 4;        
                break;
            case '5':
                track[i] = 5;        
                break;
            case '6':
                track[i] = 6;        
                break;
            case '7':
                track[i] = 7;        
                break;
            case '8':
                track[i] = 8;        
                break;
            case '9':
                track[i] = 9;        
                break;
            default:
                break;
        }
    }
    
    /* 位(桁)を合わせる */
    if(track[2]=='\0'){
        return track[1];
    }
    else if(track[3]=='\0'){
        return (10*track[1] + track[2]);
    }
    else if(track[4]=='\0'){
        return (100*track[1] + 10*track[2] + track[3]);
    }
    else{
        return 999; // 受信エラー
    }
}

////////////////////////////////////
/* トラックナンバーを指定して曲を流す関数 */
////////////////////////////////////
void set_number_of_tracks(uint8_t number){
    while(MP3.availableForWrite() != 0);
    MP3.write('t');
    while(MP3.availableForWrite() != 0);
    MP3.write(number);
}

///////////////////////////////////////
/* ディレクトリのn番目を指定して曲を流す関数 */
///////////////////////////////////////
void set_number_of_directory(uint8_t number){
    while(MP3.availableForWrite() != 0);
    MP3.write('p');
    while(MP3.availableForWrite() != 0);
    MP3.write(number);
}

//////////////////////////////////////////////////////////////////////////////////
/* 音楽を再生・停止したり、次・前の曲に変える関数('O':再生・停止, 'F':次へ進む, 'R':前に戻る) */
//////////////////////////////////////////////////////////////////////////////////
void control_tracks(char control){
    while(MP3.availableForWrite() != 0);
    MP3.write(control);
}

///////////////////////////////
/* 音量を変える関数(0最小~255最大) */
///////////////////////////////
void set_volume(uint8_t val){
    while(MP3.availableForWrite() != 0);
    MP3.write('v');
    while(MP3.availableForWrite() != 0);
    MP3.write(255 - val);
}

//////////////////////////////////////////////////////////////
/* クワイエットモードをOn(true)/off(false)する関数(デフォルトはoff) */
//////////////////////////////////////////////////////////////
void quiet_mode(bool val){
    while(MP3.availableForWrite() != 0);
    MP3.write('Q');
    while(MP3.availableForWrite() != 0);
    if(val == true){
        MP3.write('1');//on 
    }
    else{
        MP3.write('0');//off(default)
    }
}

///////////////////////////////////////////////////////////////////////////////
/* 曲の再生の終了を確認する関数 戻り値(自然終了:1,強制終了:2,終了していない:0,エラー:999) */
///////////////////////////////////////////////////////////////////////////////
int confirm(){
    delay(200);
    int buf = MP3.available();
    if(buf > 0){
        char val = 0;
        for(int i = 1; i <= buf; i++){
          val = MP3.read();
        }
        switch(val){
        case 'X'://自然終了したとき
            return 1;
            break;
        case 'x'://強制終了したとき
            return 2;
            break;
        case 'E'://トラックが存在しないとき
            return 3;
            break;
        default:
            return 999;
            break;
        }
    }
    else{
        return 0;
    }
}
  1. MP3 Trigger V24
  2. Arduino版サンプルコード
  3. mbed版サンプルコード

SNSでフォローする