Hallo zusammen, ich bastele gerade an einem MP3 Player auf Basis des ASA1 Shields von ELV. Dieser greift auf eine VS1011 Bibliothek zu. Gesteuert wird das Ganze über ein Tastenpad mit 11 Knöpfen. Diese sind alle über einen analogen Anschluss am Arduino, welcher entsprechend der anliegenden Spannung den Wert "Button" auf eine Zahl zwischen 1 und 11 setzt, bzw. auf 99, solange keine Taste gedrückt wird. Jetzt würde ich es gerne so einrichten, dass pro Taste genau ein Lied (von mir aus Taste 1 = MP3 001.mp3) abgespielt wird. Ich scheitere derzeit aber schon daran, die Wiedergabe eines laufenden Stückes zu unterbrechen, sobald eine Taste gedrückt wird, da er offensichtlich den Button-Wert während des MP3 pufferns nicht abfragt. Könnt ihr mir hier weiter helfen? Anbei der Code: #include <SD.h> #include <SPI.h> #include <AudioShield.h> //Variable für Dateinamen anlegen char filename[13] = "001.mp3"; //Zähler für Dateien unsigned char filenumber = 1; int Button=99; int Volume; void setup() { Serial.begin(9600); Serial.println("Los geht's"); Volume = analogRead(A4); //SD-Karte initialisieren //SD_CS als parameter übergeben, da hier ChipSelect anders belegt if( SD.begin( SD_CS ) == false ) { Serial.println("Karte fehlt oder ist fehlerhaft"); // Programm beenden, da keine SD-Karte vorhanden return; } Serial.println("Karte initialisiert."); //MP3-Decoder initialisieren VS1011.begin(); } void loop() { Button = Keypad(); //Puffer für MP3-Decoder anlegen //MP3-Decoder erwartet Daten immer in 32 Byte Blöcken unsigned char buffer[32]; //Datei öffnen und abspielen if( File SoundFile = SD.open( filename ) ) { //Verstärker einschalten VS1011.UnsetMute(); //Datei bis zum Ende abspielen while( (SoundFile.available()) && (Button = 99)) { //Puffer mit Daten aus der Datei füllen SoundFile.read( buffer, sizeof(buffer) ); //Daten aus Puffer an MP3-Decoder senden VS1011.Send32( buffer ); Volume = analogRead(A4); Volume = map(Volume, 0, 1023, 0, 255); VS1011.SetVolume(Volume,Volume); } //Internen Datenpuffer vom MP3-Decoder mit Nullen füllen //damit sicher alles im Puffer abgespielt wird und Puffer leer ist //MP3-Decoder besitzt 2048 Byte großen Datenpuffer VS1011.Send2048Zeros(); //Verstärker deaktivieren VS1011.SetMute(); } else { } //Dateizähler auf 100 begrenzen und zurücksetzen if( filenumber >= 100 ) { filenumber = 0; } //nächste Datei auswählen sprintf(filename, "%03d.mp3", ++filenumber); //Wartezeit zwischen Durchläufen 500ms delay( 500 ); } int Keypad(){ int Button = 0; int Tastenwert = 470; Tastenwert = analogRead(A5); if (Tastenwert>870) { Button=4; } else if (Tastenwert>700) { Button=5; } else if (Tastenwert>670) { Button=6; } else if (Tastenwert>610) { Button=1; } else if (Tastenwert>550) { Button=2; } else if (Tastenwert>500) { Button=3; } else if (Tastenwert>460) { Button=99; } else if (Tastenwert>410) { Button=9; } else if (Tastenwert>360) { Button=8; } else if (Tastenwert>300) { Button=7; } else if (Tastenwert>200) { Button=11; } else if (Tastenwert>120) { Button=10; } return Button; }
Bei dem Murkscode wundert dich das? Wenn die Keypad() in der whileschleife nicht aufgerufen wird, kann das auch ned klappen. Hier kannste dir ne inspiration holen: http://www.fritzler-avr.de/HP/soundm.php
Es ist zwar schon etwas älter, aber ich frage trozdem mal: Welche Hardware verwendest du? Und wie hast du die Taster angeschlossen? Ich habe hier einen Arduino Uno und auch das ASA1. Aber wenn ich das ASA1 auf den Uno gesetzt habe, habe ich garkein Platz mehr für Eingänge, oder?
Er hat einen analogen Eingang verwendet, daran Taster mit unterschiedlichen Spannungsteilern.
Hallo Cornelius, ich bin auf dein kannst du mir die Firmware für Hörbert Nachbau schicken? vitalitr gmail.com Danke dir im Voraus Gruß Vitali
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.