Sabtu, 10 Februari 2018

MENGGABUNGKAN BEBERAPA SKETCH PROGRAM ARDUINO 3 (MODUL MP3 DAN BUTTON)

Modul MP3 yang banyak beredar di sekitar kita adalah modul DFPlayer Mini. Penggunaan librarynya pun gampang. Bro and bray dapat download di https://github.com/DFRobot/DFRobotDFPlayerMini Kendalanya juga g banyak. Kita langsung cobain yuk...
Salah satu sample librarynya seperti di bawah.
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
 
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
 
  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  static unsigned long timer = millis();
 
  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
 
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

Dari sepanjang sample library di atas kita cuma ambil beberapa sketch program saja untuk memplay file MP3 di dalam memory yang kita selipkan dimodulnya, yaitu deklarasi program dan setup. Ijinkan Uda memenggal programnya ya...

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo")); //Pesan ini tampilkan saat inisialisasi modul oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); //Pesan ini tampilkan saat inisialisasi modul oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
 
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:")); //ini untuk menampilkan pesan saat modul tidak terbaca oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
    Serial.println(F("1.Please recheck the connection!")); //ini untuk menampilkan pesan saat modul tidak terbaca oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
    Serial.println(F("2.Please insert the SD card!")); //ini untuk menampilkan pesan saat modul tidak terbaca oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online.")); //Pesan ini tampilkan jika ardino berhasil membaca modul MP3 secara serial. Pesan ini tampil di Serial Monitor arduino IDE

 
  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3. “Intinya adalah ini!!!”
}

void loop()
{
  static unsigned long timer = millis();
 
  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
 
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}


Setelah dapat intinya, yuk dibikin lebih simple lagi

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini Siap digunakan.")); //*Pesan ini tampilkan jika ardino berhasil membaca modul MP3 secara serial. Pesan ini tampil di Serial Monitor arduino IDE
 
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30
}

void loop()
{
  myDFPlayer.play(1);  //Play the first mp3. “Intinya adalah ini!!!”
  delay(3000);  //undur looping program selama 3 detik (3000 mili detik)
}

Nah kita cukup mengganti nomornya ke file yang akan kita play di dalam sketch program kita. Misalnya kita membaca temperatur dari angka yang di dapat dari sensor temperatur. Atau membaca tegangan di pin analog. Atau menyebutkan “welcome” saat alat pertama kali di nyalakan. Bro and bray tentu lebih bisa berkreasi sesuai dengan yang diinginkan. Sebelumnya pada postingan menggabungkan-beberapa-sketch-program 1 kita membahas tentang penggabungan modul MP3, sensor Suhu DHT11, Modul LCD 20x4, dan sensor PIR dan memplay file temperatur yang terbaca serta penambahan pernak-pernik suaranya. Mungkin sekarang kita buat contoh yang lebih simple. Memplay file x saat tombol x di tekan. 
Persiapannya adalah rekam lah suara dari 1 sampai 5 dan masing-masing file di tempatkan pada nomornya. File suara “satu” di simpan pada file 001. Begitu selanjutnya.  Kemudian pada file 006 rekamlah suara “tombol yang ditekan adalah”. Sekarang pasang sesuai pin yang kita deklarasikan. 
Sebenarnya memang sedikit lebih enak jika di jelasin dengan gambar. Yaitu bagian antara pin Tx Arduino dengan pin Rx Modul MP3 dipasang resistor antara 2K2 - 4K7, tujuannya agar suara krek..krek..krek.. di speakernya ilang. Tapi sayang kompi Uda lagi sakit, pemulihannya lama kayaknya xixixixi(gambarnya menyusul ya bro and sis)

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

const int tombol1 = 2;
const int tombol2 = 3;
const int tombol3 = 4;
const int tombol4 = 5;
const int tombol5 = 6;

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true){
      delay(0);
    }
  }
  Serial.println(F("DFPlayer Mini Siap digunakan."));   
  myDFPlayer.volume(20);   

  pinMode(tombol1, INPUT);
  pinMode(tombol2, INPUT);
  pinMode(tombol3, INPUT);
  pinMode(tombol4, INPUT);
  pinMode(tombol5, INPUT);
}

void loop()
{
  if (digitalRead(tombol1) == HIGH) // jika tombol 1 di pencet maka
    {     
      myDFPlayer.play(6);  //play file 006 yang rekamannya “ tombol yang di tekan adalah”
      delay(3000);                 // tunggu 3 detik atau di set sendiri. Maksudnya sampai file 006 selesai di putar.
      myDFPlayer.play(1);  // kemudian play file 001 yang isi rekamannya “satu”
      delay(1000);                  // tunda 1 detik
    }
  if (digitalRead(tombol2) == HIGH// keterangannya sama dengan di atas hanya yang di play adalah file 002 yang isi rekamannya “dua”. Begitu selanjutnya
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(2); 
      delay(1000);
    }

  if (digitalRead(tombol3) == HIGH)
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(3); 
      delay(1000);
    }

  if (digitalRead(tombol4) == HIGH)
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(4); 
      delay(1000);
    }

  if (digitalRead(tombol5) == HIGH)
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(5); 
      delay(1000);
    }
  delay(10);
}

Begitulah penggunaan modul MP3 yang lebih tepat guna pada arduino(aduh bahasamu Udaaaa... xixixixi).

baca juga: Menggabungkan Beberapa Sketch Program Arduino 2

Sekiranya ada pertanyaan atau pun saran bisa diisi dikolom komentar deh. Jika ada pertanyaan seputar modul MP3 dan kendalanya juga boleh kok isi di kolom komentar, Uda pasti dengan senang hati membantu 


3 komentar:

TANGI WANGI mengatakan...

Gan mau nanya, kalo sketch program sensor ph, lcd, motor servo dan relay bisa gak?(MOHON) Terimakasih..

rg tech mengatakan...

maaf om... telat balasnya. coba pahami konsep penggabungan beberapa sensor dulu deh om

Robby mengatakan...

Mas. Kalo buat sketch MDFPlayer pakai folder gimana ya.
Supaya pakai button 4 biji,
Button 1 dan 2 untuk jalankan play mp3 .. dan button untuk mode next dan button 4 untuk mode kembali. Saya mau buat kendang elektrik 5 mode. 10 suara.

Mohon di balas ya mas. Semoga sukses selalu