Ders 20 – Sd kart ile buton kontrollü müzik çalar yapımı

projeye başlamadan önce yüksek ses ile kullanmak için yukarıdaki resimde görülen PAM8403 amfi devresini almanız önerilir …..

Arkadaşlar merhaba ;

2. dönem ileri seviye uygulamalarımıza devam ediyoruz , bu uygulamamız LCD ekran SD kart okuyucu ve buton kullanarak mini bir müzik çalar yapacağız öncelikle aşşağıda verdiğim şemayı bağlayalım lütfen

bağlantıdan önce kod içerisinde kullandığımız TMRpcm kütüphanesini İNDİRİNİZ ve kütüphane olarak arduino IDE nin içerisine dahil ediniz

bağlantılarımızı yaptıktan sonra sd kart ile müzik veya ses çalabilmemiz için dosyalarımızın .wav formatında olması lazım yani mp3 olarak sd kart modülü ile kullanamayız bunun için elimizdeki MP3 dosyasını .wav formatına çevirmemiz lazım ve aynı zamanda belirtilen ayarlar ile dönüştürülmesi lazım her wav dosyasının çalışması başarılı olmuyor bu nedenle sizlere aşşağıda online olarak dönüşüm yapabileceğiniz bir site adresini veriyorum

ama ondan önce mp3 dosyasına ihtiyacınız var bilgisayarınızda dinlediğiniz bir mp3 mutlaka vardır hadi diyelimki yok size bir mp3 dosyası bulalım ve onu wav a dönüştürelim ben şöyle yapıyorum açıyorum youtuıbeyim beğendiğim parçayı açıyorum

linki kopyaladıktan sonra chrome dan youtube mp3 yazın aratın ve ister başka siteden istersenin benim kullandığım siteyi tıklayarak devam edin aşşağıdaki resimdeki gibi linki tıklayın

açılan bu sayfada az önce kopyaladığınız linki url girin denen yere yapıştırıp dönüştürün butonunu tıklayın

dönüşüm tamamlandıktan sonra indir butonunu tıklayın

indirme işlemi bittikten sonra artık istediğiniz parça mp3 formatında bilgisayarınıza inmiş olacaktır

şimdi bu mp3 parçamızı aşşağıdaki talimatları takip ederek .wav formatına dönüştürelim

https://audio.online-convert.com/convert-to-wav

bu site içerisine girdiğinizde sizden dönüştürmek istediğiniz dosyayı isteyecektir

dosyanızı ekledikten sonra wav dosyasına dönüştürmek istediğinizi de belirttikten sonra aşşağıdaki ayarları yaparak dönüşümü başlatın ve sonra işlem bitince

bu ayarlar ile dosyamızı dönüştürüp bilgisayarımıza indirdikten sonra en önemli ve can alıcı nokta parçamızın ismini ” 1 ” olarak dewğiştiriyorux yani sd kartıomızın içerisinde ” 1.wav ” olarak görünmelidir başka birtane daha ekliyecek isek “2.wav ” olarak değiştirmelisiniz ve sd kartımızın içerisine kopyalıyoruz

kopyalayıp sd kart modülünün içerisine yerleştirdikten sonra arduino kodlarımızı atıyoruz ve kodların içerisinde de parça isimlerini değiştiriyoruz kodun içerisinden

#include <SD.h>
#include <TMRpcm.h>
#include <SPI.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

#define SD_ChipSelectPin 4 
#define NEXT_BUTTON 2
#define PREV_BUTTON 3
#define PAUSE_BUTTON 5
#define STOP_BUTTON 6

TMRpcm audio;
LiquidCrystal_I2C lcd(0x27, 16, 2);

int sarkiNo = 1;
const int toplamSarki = 5; // Kaç şarkın varsa burayı güncelle

// --- ŞARKI İSİMLERİNİ BURAYA YAZ ---
// Not: LCD ekran 16 karakterdir, isimleri çok uzun tutmamaya çalış.
const char* sarkiIsimleri[] = {
  "",                     // 0. indeksi boş bırakıyoruz
  "GELIN EY ASIKLAR",          // 1.wav için isim
  "YANAGI GAMZE",           // 2.wav için isim
  "",       // 3.wav için isim
  "",          // 4.wav için isim
  ""            // 5.wav için isim
};

bool tamamenDurduruldu = true; 
bool duraklatildi = false;
bool oynatmaBasladi = false; 

void setup() {
  pinMode(NEXT_BUTTON, INPUT_PULLUP);
  pinMode(PREV_BUTTON, INPUT_PULLUP);
  pinMode(PAUSE_BUTTON, INPUT_PULLUP);
  pinMode(STOP_BUTTON, INPUT_PULLUP);

  audio.speakerPin = 9; 
  
  lcd.begin();
  lcd.backlight();
  
  lcd.setCursor(0, 0);
  lcd.print(F("   MP3 PLAYER   "));
  lcd.setCursor(0, 1);
  lcd.print(F("    HAZIR...    "));
  
  if (!SD.begin(SD_ChipSelectPin)) {
    lcd.clear();
    lcd.print(F("SD KART HATASI!"));
    while(1);
  }
  
  audio.setVolume(5); 
}

void loop() {
  // 1. OYNAT / DURAKLAT
  if (digitalRead(PAUSE_BUTTON) == LOW) {
    delay(300);
    if (!oynatmaBasladi) {
      oynatmaBasladi = true;
      tamamenDurduruldu = false;
      playSarki(sarkiNo);
    } else {
      audio.pause();
      duraklatildi = !duraklatildi;
      ekranGuncelle(duraklatildi ? F(">> DURAKLATILDI") : F("> OYNATILIYOR"));
    }
    while(digitalRead(PAUSE_BUTTON) == LOW);
  }

  // 2. TAMAMEN DURDUR
  if (digitalRead(STOP_BUTTON) == LOW) {
    delay(300);
    audio.stopPlayback();
    tamamenDurduruldu = true;
    oynatmaBasladi = false;
    ekranGuncelle(F("X DURDURULDU"));
    while(digitalRead(STOP_BUTTON) == LOW);
  }

  // 3. İLERİ
  if (digitalRead(NEXT_BUTTON) == LOW) {
    delay(300);
    sarkiNo++;
    if (sarkiNo > toplamSarki) sarkiNo = 1;
    tamamenDurduruldu = false;
    duraklatildi = false;
    oynatmaBasladi = true;
    playSarki(sarkiNo);
    while(digitalRead(NEXT_BUTTON) == LOW);
  }

  // 4. GERİ
  if (digitalRead(PREV_BUTTON) == LOW) {
    delay(300);
    sarkiNo--;
    if (sarkiNo < 1) sarkiNo = toplamSarki;
    tamamenDurduruldu = false;
    duraklatildi = false;
    oynatmaBasladi = true;
    playSarki(sarkiNo);
    while(digitalRead(PREV_BUTTON) == LOW);
  }

  // 5. OTOMATİK SONRAKİ PARÇA
  if (!audio.isPlaying() && !tamamenDurduruldu && !duraklatildi && oynatmaBasladi) {
    delay(500);
    sarkiNo++;
    if (sarkiNo > toplamSarki) sarkiNo = 1;
    playSarki(sarkiNo);
  }
}

void playSarki(int no) {
  audio.stopPlayback();
  
  // Arka planda 1.wav, 2.wav şeklinde açar
  String dosyaAdi = String(no) + ".wav";
  char charBuf[20];
  dosyaAdi.toCharArray(charBuf, 20);
  
  lcd.clear();
  lcd.setCursor(0, 0);
  // Ekranda ise diziden çektiğimiz gerçek ismi yazar
  lcd.print(sarkiIsimleri[no]); 
  
  lcd.setCursor(0, 1);
  lcd.print(F("> OYNATILIYOR"));
  
  audio.play(charBuf);
}

void ekranGuncelle(String durum) {
  lcd.setCursor(0, 1);
  lcd.print(F("                ")); // Alt satırı temizle
  lcd.setCursor(0, 1);
  lcd.print(durum);
}