Gro­ve mp3-Player

# include "SoftwareSerial.h"
# include "MP3Player_KT403A.h"

// RX/TX festlegen
SoftwareSerial mp3(2, 3);

// Zuweisung nach Ablesen des Analogwerts Tastenpad
int Taster;

// gelesener Wert Tastenpad
int Analogwert;

void setup()
{
  // SoftwareSerial starten
  mp3.begin(9600);

  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial)
  {
    ;
  }

  delay(100);

  // SD-Karte zuweisen
  SelectPlayerDevice(0x02);

  // Lautstärke setzen (14 bis 30)
  SetVolume(20);             
  
  Serial.println("Steuerung:");
  Serial.println("------------------");
  Serial.println("a -> alle abspielen");
  Serial.println("n -> folgender Song");
  Serial.println("v -> vorheriger Song");
  Serial.println("a -> alle abspielen");
  Serial.println("p -> Pause");
  Serial.println("w -> weiter abspielen");
  Serial.println("a -> alle abspielen");
  Serial.println("+ -> lauter");
  Serial.println("- -> leiser");
}

void loop()
{
  // serielle Eingabe lesen
  char Kommando = 0;
  while (Serial.available())
  {
    Kommando = Serial.read();

    switch (Kommando)
    {
      case 'p':
        PlayPause();
        Serial.println("Pause");
        break;
        
      case 'w':
        PlayResume();
        Serial.println("Weiter");
        break;
        
      case 'n':
        PlayNext();
        Serial.println("Folgenden Song abspielen");
        break;
        
      case 'z':
        PlayPrevious();
        Serial.println("Vorherigen Song abspielen");
        break;
        
      case 'a':
        PlayLoop();
        Serial.println("alle Songs spielen");
        break;
        
      case '+':
        IncreaseVolume();
        Serial.println("lauter");
        break;
        
      case '-':
        DecreaseVolume();
        Serial.println("leiser");
        break;
        
      default:
        break;
    }
  }

  // gedrückte Taste abfragen
  Taster = Tasterabfrage();

  // Taste links -> voheriger Titel
  if (Taster == 1)
  {
    PlayPrevious();
    Serial.println("Vorherigen Song abspielen");
  }

  // Taste oben Mitte -> lauter
  if (Taster == 2)
  {
    IncreaseVolume();
    Serial.println("lauter");
  }

  // Taste unten Mitte -> leiser
  if (Taster == 3)
  {
    DecreaseVolume();
    Serial.println("leiser");
  }

  // Taste rechts -> nächster Titel
  if (Taster == 4)
  {
    PlayNext();
    Serial.println("Folgenden Song abspielen");
  }
  
  // Taste außen -> Pause
  if (Taster == 5)
  {
    PlayPause();
    Serial.println("Pause");
  }
}

int Tasterabfrage() 
{
  int Analogwert = analogRead(A0);

  // kurzes delay() -> doppelten Tastendruck so weit wie möglich verhindern
  delay(200);
  // Serial.println(Analogwert);

  /* für die Abfrage von Wertebereichen muss
     A0 gibt je nach Taster einen Wert aus
     über den Seriellen Monitor wird dieser Wert angezeigt
     und kann dann eventuell angepasst werden
  */
  switch (Analogwert) {
    case 0 ... 20:
      Taster = 1;
      break;
      
    case 30 ... 60:
      Taster = 2;
      break;
      
    case 70 ... 120:
      Taster = 3;
      break;
      
    case 150 ... 200:
      Taster = 4;
      break;
      
    case 300 ... 400:
      Taster = 5;
      break;
      
    default:
      return 0;
  }

  // gedrückten Taster zurückgeben
  return Taster;
}

Letzte Aktualisierung: 5. Aug 2023 @ 12:56