/*Abspielen von Songs, die auf einer micro SD-Card gespeichert sind.
Maximal 21 Songs, sonst keine Funktion mehr.
Die Songs muessen als .wav-Datei gespeichert sein (Details siehe "Tutorial").
Der Aufruf des jeweiligen Songs erfolgt per Sprachsteuerung von einem Smartphone mit der App "AMR_Voice".
Der gesprochene Text wird von der App in eine Zeichenfolge umgewandelt und auch angezeigt und muss exakt
der im Sketch hinterlegten Zeichenfolge entsprechen, auch Gross-Kleinbuchstaben (zum Beispiel "Spiele Song 1").
Siehe auch: https://www.electronicshub.org/music-player-using-arduino/
Uebertragen werden die Zeichenfolgen per Bluetooth vom Phone zu einem Modul HC-05 und weiter zum Arduino.
Als Baudrate zum HC-05 wird 9600 verwendet, siehe auch unten HC_Serial.begin(9600).
Im allgemeinen ist das im HC-05 so voreingestellt.
Wenn nicht, muss die Baudrate mit AT-Befehlen umgestellt werden.
Konfiguration des HC-05 siehe Mechatronik Teil 4 "Sketch 85 Bluetooth Modul HC-05 konfigurieren".
Die Ausgabe erfolgt von Pin D9 als PWM-Signal (keine Analog-Sinus-Schwingungen) ueber einen
Transistor-Verstaerker an den Lautsprecher.
Mit tmrpcm.setVolume(3) kann die Lautstaerke eingestellt werden (bei >5 verzerrt)*/
/*fuer micro SD Karten-Leser:*/
#include <SD.h> // SD.h ist standardmaessig vorhanden
#include <TMRpcm.h> // TMRpcm muss geladen werden
#include <SPI.h> // SP.h ist standardmaessig vorhanden
#define SD_ChipSelectPin 4 // Pin D4 muss hier verwendet werden
TMRpcm tmrpcm;
/*fuer Bluetooth-Modul HC-05:*/
#include <SoftwareSerial.h>
SoftwareSerial HC_Serial(6,7); // Pin D6 wird RxD (an TxD des HC-05) und Pin D7 wird TxD (an RxD des HC-05)
/*fuer Spracherkennung, als Signal ueber HC-05:*/
String voice;
void setup()
{
tmrpcm.speakerPin = 9; // Pin D9 muss hier verwendet werden
tmrpcm.setVolume(5); // bei >5 verzerrt
Serial.begin(9600); // Initialisierung Serial Monitor
if (!SD.begin(SD_ChipSelectPin)) // Prueft, ob eine SD-Karte eingesteckt ist
{
Serial.println("SD fail");
return;
}
Serial.println("Bereit");
HC_Serial.begin(9600); // Baudrate zum HC-05 auf 9600
}
void loop()
{
while (HC_Serial.available())
{
delay(10);
char c = HC_Serial.read();
if (c == '#') {break;} // “#“ zeigt das Ende eines Befehls an, deshalb soll der Loop verlassen werden
voice += c;
}
if (voice.length() > 0)
{
Serial.println(voice);
if(voice == "*Spiele Song 1")
{
tmrpcm.play("Song1.wav");
}
if(voice == "*Spiele Song 2")
{
tmrpcm.play("Song2.wav");
}
if(voice == "*Spiele Song 3")
{
tmrpcm.play("Song3.wav");
}
if(voice == "*Spiele Song 4")
{
tmrpcm.play("Song4.wav");
}
if(voice == "*Spiele Song 5")
{
tmrpcm.play("Song5.wav");
}
if(voice == "*Spiele Song 6")
{
tmrpcm.play("Song6.wav");
}
if(voice == "*Spiele Song 7")
{
tmrpcm.play("Song7.wav");
}
if(voice == "*Spiele Song 8")
{
tmrpcm.play("Song8.wav");
}
if(voice == "*Spiele Song 9")
{
tmrpcm.play("Song9.wav");
}
if(voice == "*Spiele Song 10")
{
tmrpcm.play("Song10.wav");
}
if(voice == "*Spiele Song 11")
{
tmrpcm.play("Song11.wav");
}
if(voice == "*Spiele Song 12")
{
tmrpcm.play("Song12.wav");
}
if(voice == "*Spiele Song 13")
{
tmrpcm.play("Song13.wav");
}
if(voice == "*Spiele Song 14")
{
tmrpcm.play("Song14.wav");
}
if(voice == "*Spiele Song 15")
{
tmrpcm.play("Song15.wav");
}
if(voice == "*Spiele Song 16")
{
tmrpcm.play("Song16.wav");
}
if(voice == "*Spiele Song 17")
{
tmrpcm.play("Song17.wav");
}
if(voice == "*Spiele Song 18")
{
tmrpcm.play("Song18.wav");
}
if(voice == "*Spiele Song 19")
{
tmrpcm.play("Song19.wav");
}
if(voice == "*Spiele Song 20")
{
tmrpcm.play("Song20.wav");
}
if(voice == "*Spiele Song 21")
{
tmrpcm.play("Song21.wav");
}
else
{
}
voice="";
}
}