創るたのしみを応援

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

mbed版サンプルコード

#include "mbed.h"

/* UART通信オブジェクト生成 */
Serial MP3(PA_0,PA_1);
Serial pc(USBTX,USBRX);

/* プロトタイプ宣言 */
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 main()
{
    /* 初期設定 */
    wait_ms(100);
    MP3.baud(38400);
    pc.baud(9600);    
    
    int sum = get_number_of_tracks(); // 総トラック数を取得
    pc.printf("Number of all Tracks:%d\r\n",sum); // シリアルモニタに総トラック数を表示
    set_volume(200); // 音量セット
    quiet_mode(false); // クワイエットモードOFF
    
    /* メインループ */
    while(1) {
        
        /* PCのターミナルで曲を指定する */
        int i = 0;
        pc.printf("Set track number:");
        pc.scanf("%d",&i); // 入力(ターミナルのローカルエコーをオンにする)
        set_number_of_tracks(i);
        pc.printf("\r\nTrack:%d\r\n\r\n",i);
    }
}


///////////////////////////////
/* 総トラック数(曲数)を取得する関数 */
///////////////////////////////
int get_number_of_tracks(void){
    
    MP3.putc('S');
    MP3.putc('1');
    char track[5];
    int count = 1;
    int i = 2;

    /* 待機 */
    while(MP3.readable() == 0);
    track[0] = MP3.getc(); // '='を取得
    
    /* 他ラック数をASCII文字で取得 */
    while(MP3.readable() == 0);
        track[1] = MP3.getc();
    while(count <= 1000){
        if(MP3.readable() == 1){
            track[i] = MP3.getc();
            track[i+1]='\0';
            i++;
        }
        count++;
        wait_ms(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){
    MP3.putc('t');
    MP3.putc(number);
}

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

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

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

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

///////////////////////////////////////////////////////////////////////////////
/* 曲の再生の終了を確認する関数 戻り値(自然終了:1,強制終了:2,終了していない:0,エラー:999) */
///////////////////////////////////////////////////////////////////////////////
int confirm(void){
    wait_ms(200);
    if(MP3.readable() == 1){
        char val = MP3.getc();
        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でフォローする