pdf-icon

Arduino入門

2. デバイス&サンプル

Unit AudioPlayer Arduino チュートリアル

1. 準備

2. 基本構成を再生します

Unit AudioPlayer はコマンドを受け取ることでオーディオ再生機能を実現し、 3.5mm ソケットから出力される信号でクリアなオーディオ出力を実現し、現在のコマンドに対応した動作情報をシリアルで返すループ再生やコンボ再生にも対応します。Unit AudioPlayer を使用することで、オーディオの再生と柔軟な制御が可能になります。

初期化と再生パターンです

  • 1. 初期化制御シリアルポートです

    audioplayer.begin() を使用して、ホストとユ Unit AudioPlayer に接続されたシリアルポートを設定し、戻り状態フラグを初期化します。着信パラメータはシリアル番号、信号受信ピン番号、信号送信ピン番号の順です。

  • 2. 播放模式

    audioplayer.setplaymode() で曲の再生モードを設定できます。Unit AudioPlayer は 7 つの再生モードに対応しています,詳細は次の表の通りです:

パターン 説明 数値
AUDIO_PLAYER_MODE_ALL_LOOP 全ての曲を順番に回していきます 00
AUDIO_PLAYER_MODE_SINGLE_LOOP シングルループ現在の曲です 01
AUDIO_PLAYER_MODE_FOLDER_LOOP 現在のフォルダーの全曲を順番にループ再生していきます 02
AUDIO_PLAYER_MODE_RANDOM 現在のディスクの曲をランダムに再生します 03
AUDIO_PLAYER_MODE_SINGLE_STOP 現在の曲を 1 回再生します 04
AUDIO_PLAYER_MODE_ALL_ONCE 順番に全曲を 1 回ずつ再生します 05
AUDIO_PLAYER_MODE_FOLDER_ONCE 現在のフォルダの全曲を 1 回で再生します 06

歌のインデックスです

audioplayer.selectaudionum() を使用すると、指定した音楽を再生できます,現在の Unit AudioPlayer では、インデックス番号による曲選択のみサポートされています。

特別説明
インデックス番号は、SD カードに保存された時間順(古いものから新しいものへ) に割り当てられます。保存時間が新しいほど番号が大きく、ファイル名ではなく保存時間に基づいています。

サンプルプログラム:

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
#include <M5Unified.h>
#include <M5GFX.h>
#include <unit_audioplayer.hpp>

AudioPlayerUnit audioplayer;
m5::touch_detail_t touchDetail;
LGFX_Button button_pre, button_play, button_next;

void setup()
{
    auto cfg            = M5.config();
    cfg.serial_baudrate = 115200;
    M5.begin(cfg);
    M5.Power.setExtOutput(true);
    M5.Lcd.fillScreen(WHITE);
    M5.Lcd.setTextFont(&fonts::DejaVu18);
    M5.Lcd.setTextColor(TFT_BLACK);
    M5.Display.drawString("Unit AudioPlayer Example", 0, 0);

    int8_t port_a_pin1 = -1, port_a_pin2 = -1;
    port_a_pin1 = M5.getPin(m5::pin_name_t::port_a_pin1);
    port_a_pin2 = M5.getPin(m5::pin_name_t::port_a_pin2);
    Serial.printf("getPin: RX:%d TX:%d\n", port_a_pin1, port_a_pin2);
    //To change the serial port, please modify this section.
    while (!audioplayer.begin(&Serial1, port_a_pin1, port_a_pin2)) {//Default UART Num: 1,
        delay(1000);
    }
    Serial.println("Unit AudioPlayer is ready");
    audioplayer.setPlayMode(AUDIO_PLAYER_MODE_SINGLE_STOP);//Default Play Mode: single stop
    audioplayer.playAudio();
    audioplayer.selectAudioNum(1);//Default Audio Num: 1
    M5.Display.drawString("Audio Num:1", 0, 80);
    audioplayer.setVolume(25);

    button_pre.initButton(&M5.Lcd, 47, 215, 60, 60, TFT_WHITE, TFT_PINK, TFT_BLACK, "<", 1, 1);
    button_pre.drawButton();
    button_play.initButton(&M5.Lcd, 157, 215, 60, 60, TFT_WHITE, TFT_PINK, TFT_BLACK, ">\\||", 1, 1);
    button_play.drawButton();
    button_next.initButton(&M5.Lcd, 267, 215, 60, 60, TFT_WHITE, TFT_PINK, TFT_BLACK, ">", 1, 1);
    button_next.drawButton();
}

void loop()
{
    static uint8_t lastPlayStatus = 255;
    static uint8_t lastAudioNum = 0, lastVolume = 0;
    static bool refreshAudioNum = false;

    uint8_t playStatus = audioplayer.checkPlayStatus();
    uint8_t volume     = audioplayer.getVolume();
    uint8_t audioNum   = 0;

    if (refreshAudioNum) {
        audioNum        = audioplayer.getCurrentAudioNumber();
        refreshAudioNum = false;
    } else {
        audioNum = lastAudioNum;
    }

    if (playStatus != lastPlayStatus) {
        static String playStatusStr;
        if (playStatus == AUDIO_PLAYER_STATUS_PAUSED) {
            playStatusStr = "Paused";
        } else if (playStatus == AUDIO_PLAYER_STATUS_STOPPED) {
            playStatusStr = "Stopped";
        } else if (playStatus == AUDIO_PLAYER_STATUS_PLAYING) {
            playStatusStr = "Playing";
        }

        M5.Display.fillRect(0, 40, 320, 20, WHITE);
        M5.Display.drawString("Play Status:" + playStatusStr, 0, 40);

        lastPlayStatus = playStatus;
    }

    if (volume != lastVolume) {
        M5.Display.fillRect(0, 120, 320, 20, WHITE);
        M5.Display.drawString("Volume:" + String(volume), 0, 120);
        lastVolume = volume;
    }

    if (audioNum != lastAudioNum && audioNum != AUDIO_PLAYER_STATUS_ERROR) {
        M5.Display.fillRect(0, 80, 320, 20, WHITE);
        M5.Display.drawString("Audio Num:" + String(audioNum), 0, 80);
        lastAudioNum = audioNum;
    }

    M5.update();
    touchDetail = M5.Touch.getDetail();

    if (touchDetail.isPressed()) {
        if(button_pre.contains(touchDetail.x, touchDetail.y)){
            Serial.println("Btn_pre pressed");
            audioplayer.previousAudio();
            refreshAudioNum = true;
        }
        else if(button_play.contains(touchDetail.x, touchDetail.y)){
            Serial.println("Btn_play pressed");
            if (playStatus == AUDIO_PLAYER_STATUS_PLAYING) {
                audioplayer.pauseAudio();
                Serial.println("pause_audio");
            } else {
                audioplayer.playAudio();
                Serial.println("play_audio");
            }
        }
        else if(button_next.contains(touchDetail.x, touchDetail.y)){
            Serial.println("Btn_next pressed");
            audioplayer.nextAudio();
            refreshAudioNum = true;
        }
    }
}

3. コンパイルとアップロード

  • 1. ダウンロードモード:異なるデバイスにプログラムを書き込む前に、ダウンロードモードにする必要があります。この手順は使用するメインコントロールデバイスによって異なる場合があります。詳細については、Arduino IDE の始め方チュートリアルページの下部にあるデバイス用のプログラムダウンロード方法を参照してください。

    CoreS3 では、リセットボタンを長押し(約 2 秒)して内部の緑色 LED が点灯したら、ボタンを放します。この時点でデバイスはダウンロードモードに入り、プログラムの書き込みを待機します。

  • 2. デバイスのポートを選択し、Arduino IDE の左上隅にあるコンパイルおよびアップロードボタンをクリックして、プログラムのコンパイルとデバイスへのアップロードを待ちます。

4. 簡単音楽プレーヤーです

On This Page