0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DFPlayer Miniで音楽再生中はLEDを点灯するようにしてみた

Posted at

この記事では音楽が再生している間はLEDを付けるように制御してみます。このような記事はネットで見つからなかったので、自分で作成してみました。
DFPlayer Miniの音楽再生方法がわからない方はこちらの記事(https://qiita.com/ajimaru/items/dfd1e75d8de20980f665)
を参考にしていただくと、理解が深まると思います

準備

・Arduino UNO R3
・DFPlayerMini 秋月商店で購入可能
・マイクロSDカード 32GB以下でフォーマット形式がFAT16またはFAT32であること
・ジャンパワイヤ
・スピーカ
・LED 2個
・抵抗器1kΩ 2本
・抵抗器200Ω 1本

配線

配線はこのようになります。
3899B24F-865A-462C-9BC0-1DD2DA8E3C4F.jpeg

まず、df playerでは、 vccなどのピンを使ってましたが、今回は再生中にLEDをつけたいので、busyピンというのを使います。これは再生中はLOW、再生中でないときはHIGHとなるのでこれを利用して、LEDを付けたり消したりします。
スクリーンショット 2024-10-02 201307.png

また、LEDの点灯ですが、こちらは電流を安定させるために抵抗器200Ωを入れてます。

コード

コードは次のようになります。LEDとBUSYピンを追加してます。

#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>

// DFPlayer MiniとArduinoのシリアル通信用
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

const int busyPin = 4; // DFPlayer MiniのBUSYピン
const int ledPin = 9;  // LEDを接続するピン

void play_sound(int folder,int file){
 
  int end_flg = 0;
  
  myDFPlayer.playFolder(folder, file);
LOOP:
  // BUSYピンがLOWなら再生中
  if (digitalRead(busyPin) == LOW) {
    digitalWrite(ledPin, HIGH); // LEDを点灯
    Serial.println("0");
    end_flg = 1;
  } else {
    digitalWrite(ledPin, LOW);  // LEDを消灯
    Serial.println("1");
    if(end_flg == 1)  end_flg = 2;
  }
  if(end_flg != 2)  goto LOOP;
}

void setup() {
  // シリアル通信の初期化
  Serial.begin(115200);
  mySoftwareSerial.begin(9600);
  
  // DFPlayerの初期化
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println("DFPlayer Miniの初期化に失敗しました");
    while(true);
  }
  
  // LEDピンとBUSYピンのモード設定
  pinMode(ledPin, OUTPUT);
  pinMode(busyPin, INPUT);
  
  Serial.println("DFPlayer Miniの初期化が成功しました");
  
  // ボリューム設定
  myDFPlayer.volume(30);  // 音量を0-30の範囲で設定
}

void loop() {
  play_sound(1,1);
  delay(1000);
  play_sound(99,100);
  delay(1000);
  play_sound(99,103);
  delay(1000);
}

音楽を再生する関数では、音楽が鳴り終わるまでは次の音楽を再生しないようにendflagをたててます。最初は0で再生しだすと1でたてて、再生し終えると2にします。それにより、2ということは終わってるので再生関数を抜けられます。

void play_sound(int folder,int file){
 
  int end_flg = 0;
  
  myDFPlayer.playFolder(folder, file);
LOOP:
  // BUSYピンがLOWなら再生中
  if (digitalRead(busyPin) == LOW) {
    digitalWrite(ledPin, HIGH); // LEDを点灯
    Serial.println("0");
    end_flg = 1;
  } else {
    digitalWrite(ledPin, LOW);  // LEDを消灯
    Serial.println("1");
    if(end_flg == 1)  end_flg = 2;
  }
  if(end_flg != 2)  goto LOOP;
}

テスト

テストしたところ、再生中はランプが光り、再生してない場合は消えてるのでオーケーとなりました。

最後に

以上が音楽再生中でのLEDの点灯方法でした。ご意見感想などあればぜひコメントしてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?