Wednesday, February 25, 2015

Audino - Arduino MP3-Player (15) - Sketch 1 (setup-Methode)

Um das MP3 Shield ansteuern zu können wird die zur Verfügung gestellte Bibliothek verwendet. Der Beispielcode, der hier (Das MP3 Shield) zum Laufen gebracht worden ist, ist ein erster Startpunkt. Die benötigten Bibliotheken werden hinzugefügt und ein Adafruit_VS1053_FilePlayer-Objekt angelegt.

#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
 
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)
#define DREQ          3      // VS1053 Data request, ideally an Interrupt pin
#define CARDCS        4      // Card chip select pin
Adafruit_VS1053_FilePlayer musicPlayer =
    Adafruit_VS1053_FilePlayer(SHIELD_CSSHIELD_DCSDREQCARDCS);

In der setup() Methode werden musicPlayer und SD-Karte initialisiert.

// initialise the music player
if (!musicPlayer.begin())
{
    Serial.println("VS1053 not found");
    while (1);  // don't do anything more
}
 
// initialise the SD card
SD.begin(CARDCS);

Damit das Abspielen der MP3-Dateien im Hintergrund ablaufen kann, wird Interrupt verwendet.

// If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
// audio playing
musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);  // DREQ int

Um zu überprüfen, dass das MP3 Shield erfolgreich initialisiert worden ist, wird ein Ton ausgegeben.

musicPlayer.sineTest(0x44, 100);    // Make a tone to indicate VS1053 is working 

Als nächstes wird analysiert wie viele MP3s in welchen Ordnern abgelegt sind. Die Anzahl der Dateien wird in einem Array abgelegt. Jeder Eintrag im Array entspricht einem Ordner auf der SD-Karte.

unsigned int numberOfFiles[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

Es wird davon ausgegangen, dass auf der SD-Karte 10 Ordner angelegt sind, die von 0 bis 9 durchnummeriert sind. In den Ordnern 1 bis 9 liegen jeweils beliebig viele MP3-Dateien. Diese sind ebenfalls durchnummeriert (1.mp3, 2.mp3, 3.mp3, ...). Im Ordner 0 sind Konfigurationsdateien abgelegt. Es wird durch alle Ordner durchiteriert

// read the number of tracks in each folder
for (byte i = 0; i < 10; i++)
{
    String temp = "/";
    temp.concat(i);
    char filename[3];
    temp.toCharArray(filename, sizeof(filename));
    numberOfFiles[i] = countFiles(SD.open(filename));
    Serial.print(filename);
    Serial.print(": ");
    Serial.println(numberOfFiles[i]);
}

und die Anzahl der Dateien im Ordner bestimmt.

// counts the number of files in directory
unsigned int countFiles(File dir)
{
    unsigned int counter = 0;
    while (true)
    {
        File entry = dir.openNextFile();
        if (!entry)
        {
            // no more files
            break;
        }
 
        counter++;
        entry.close();
    }
    dir.close();
 
    return counter;
}

Damit nach einem erneuten Einschalten der zuletzt gespielte Titel gespielt wird, wird dieser aus einer Datei ausgelesen. Aktueller Ordner und aktuelle Datei werden abgespeichert. Als aktuelle Datei wird der Vorgänger abgespeichert, da beim Start der nächste Track abgespielt wird.

char currentTrackFileName[] = "/0/current.txt";
byte currentFolder = 1;
unsigned int currentFile = 0;
// read remembered track
if (SD.exists(currentTrackFileName))
{
    File file = SD.open(currentTrackFileName, FILE_READ);
    if (file)
    {
        currentFolder = file.readStringUntil('\n').toInt();
        currentFile = file.readStringUntil('\n').toInt() - 1;
    }
    file.close();
}

Nachdem jetzt die setup() Methode abgehandelt worden ist, schauen wir uns als nächstes die loop() Methode an.


Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software

Tuesday, February 17, 2015

Audino - Arduino MP3-Player (14) - Das Gehäuse

Nachdem jetzt die Elektronik fertig ist, an dieser Stelle vielen Dank an Florian, der hier fachkundig zur Hilfe war und auch das Löten übernommen hat, kann die Elektronik in ein Gehäuse eingebaut werden. Auch bei der Erstellung des Gehäuses hatte ich Hilfe, großen Dank an Klaus, der in kürzester Zeit das Gehäuse erstellt hat.

Und so sieht das Gehäuse aus. Front und Rückseite können geöffnet werden.


Der Potentiometer und der Kippschalter können am Gehäuse befestigt werden.


Die Punkt-Streifenrasterplatine und der Lautsprecher mit dem Schutzgitter sind an der Front befestigt worden.


Über die Rückseite kann auf die verschraubten Komponenten zugegriffen werden.


Und so sieht der fertiggestellte MP3-Player aus.


Als nächstes ist die Software (Sketch) dran, die auf das Arduino-Board drauf gespielt wird.



Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software