Teddy Bear mp3

In was für einer Schule/Klasse, bekommt man eigentlich so eine "große" Aufgabe mit so wenig Vorkenntnissen übermittelt?
Ich kann mir kaum vorstellen, dass ihr die Shields selber dazu kaufen sollt. Mit vorhandenen Mitteln klappt es auf jedenfall nicht.

da2001:
In was für einer Schule/Klasse, bekommt man eigentlich so eine "große" Aufgabe mit so wenig Vorkenntnissen übermittelt?

Der Threadstarter schreibt ja dazu:

In der Schule müssen wir selbstständig ein Arduino Projekt planen und zum laufen bringen. Deshalb hatten wir uns überlegt einen Teddybären so zu verändern., dass dieser, wenn man ihm auf die Hand drückt eine Melodie abspielt.

Also Projekt selbst überlegt, nun muss man das beste draus machen...

da2001:
Ich kann mir kaum vorstellen, dass ihr die Shields selber dazu kaufen sollt. Mit vorhandenen Mitteln klappt es auf jedenfall nicht.

Das "nicht" klingt so hart. Wie gesagt geht es ja, wenngleich in bescheidener Qualität:

Ah okay, vielen Dank euch allen :slight_smile:
Wir haben ein Arduino Uno und jetzt auch noch einen kleinen Lautsprecher dazu bekommen.
Wir haben versucht ein Programm zu schreiben, wissen aber nicht wie man eine "Library" erstellt wo das Lied reinmuss.
Außerdem sind wir uns nicht sicher wie man das auf die SD Karte macht. Muss man da das Arduino Programm noch mal extra draufinstalliern oder nur die Library draufspeichern?

IrgendJemand:
Ah okay, vielen Dank euch allen :slight_smile:
Wir haben ein Arduino Uno und jetzt auch noch einen kleinen Lautsprecher dazu bekommen.
Wir haben versucht ein Programm zu schreiben, wissen aber nicht wie man eine "Library" erstellt wo das Lied reinmuss.

"Das Lied" muß nicht in eine "Library" rein.
"Das Lied" sind programmtechnisch "Daten", also einfach nur Zahlenwerte. Und davon eine ganze Menge hintereinander weg.

Und Daten können entweder im RAM-Speicher, im Programmspeicher oder auf SD-Karte gespeichert sein. Die Daten für "Echtklang-Musik" sind so umfangreich, die können rein von der Menge her nur auf SD-Karte gespeichert werden. Kurze Piepston-Melodien kann man dagegen auch im RAM unterbringen.

Eine "Library" ist Programmcode. Z.B. Programmcode zum Abspielen von Daten, beispielsweise Musikdaten.

Was wollt ihr denn als erstes?

Erstmal einfach nur mit Lautsprecher eine Melodie aus Piepstönen abspielen?
Sowas wie früher die "Handy-Klingeltöne" als Melodie wie man sie vor 10 bis 15 Jahren hatte?
Habt ihr einen Kondensator im Wertebereich 1 ... 100 µF, um den Lautsprecher vernünftig am Board anzukoppeln?

IrgendJemand:
Außerdem sind wir uns nicht sicher wie man das auf die SD Karte macht. Muss man da das Arduino Programm noch mal extra draufinstalliern oder nur die Library draufspeichern?

Eine SD-Karte braucht ihr nur, wenn ihr "echte Lieder" spielen wollt, also wenn ihr jetzt irgenein MP3-Lied vorliegen habt, als Download oder von CD gerippt. Und auf die SD-Karte kommen dann nur die Daten, kein Programm.

Also:

  • SD-Karte raus aus dem Arduino
  • SD-Karte rein in den Kartenleser am PC
  • Karte mit "FAT" Formatieren
  • WAV-Datei draufkopieren (Achtung*)
  • SD-Karte raus aus dem PC
  • SD-Karte rein in Arduino

Achtung*=
Ihr könnt nur "8-Bit WAV-Dateien verwenden". Falls Ihr Euer Lied als MP3 vorliegen habt, müßt ihr es erst ins WAV-Format konvertieren. Das WAV-Format müßt ihr dann nochmals mit einem geeigneten Tool in ein "8-Bit WAV mono" mit bestimmter, maximaler Datenrate konvertieren. Was als maximale Datenrate geht, hängt auch von der verwendeten Library ab. Ein geeignetes Kommandozeilen-Tool zum Konvertieren der WAV in 8-Bit WAV ist "sox". Und darauf achten: Als Dateinamen sind nur 8.3-Dateinamen erlaubt, also maximal acht Zeichen, ein Punkt, nochmal drei Zeichen. Keine langen Dateinamen, damit kann die ganz kleine Arduino-SD-Library nicht umgehen!

Von SD-Karte kann ein Arduino kein Programm laden und ausführen. Daher muss das Programm zum Abspielen des Lieds IMMER aus der Arduino-Software auf das Arduino-Board draufgeladen werden.

Wieso könnt ihr nicht einfach ne Ampel machen ?
So wie ich das hier so mitbekommen habe, sind eure
Vorkenntnisse doch sehr sehr beschränkt.

Aber gut...

Als Lib braucht ihr nur die für die SD Karte. Auf die SD Karte kopiert ihr dann das WAV File in 8Bit und 22kHz.
Dann schickt ihr die Daten mit dem Arduino von der SD Karte Bit für Bit auf einen Analogen Pin.
Dabei solltet ihr darauf achten, den Takt von 22050 Bits pro sec. einzuhalten. Sonst wird der Sound
zu schnell oder zu langsam abgespielt.

Ich weiss nicht so genau wie das mit Arduino geht. Aber mit BASCOM ging das auf jeden Fall und ich denke
mit Arduino auch.

Das lesen von der SD Karte benötigt Zeit und und lässt kaum Platz für mehr kHz. Aber mit Bascom konnte ich
das mit dem Interrupt machen, der im 44100 Mhz die Daten auf den analogen Pin schaufelt. Dafür brauchte ich
aber nen doppelten Buffer von 1Kb ( 2 x 512 byte ) der abwechselnd die Daten von der SD Karte ließt.
Allerdings habe ich die SD Karte im raw Modus gelesen. Mit Fat braucht der Arduino wohl noch etwas mehr Zeit.
Also nur 22 kHz.....

sven1977:
Aber mit Bascom konnte ich das mit dem Interrupt machen, der im 44100 Mhz die Daten auf den analogen Pin schaufelt.

Wow, 44100 Mhz! Also über 44 Gigahertz zaubert Bascom aus einem einfachen Controller!

Mit solchen Super-Fähigkeiten wie Dein BASCOM kann ARDUINO natürlich überhaupt nicht mithalten!
:wink:

Anyway, weil das hier ein ARDUINO und kein BASCOM-Forum ist, poste ich dann hier mal zum Testen ein bischen was zum Töne machen für eines der schlappen ARDUINO-Boards, die bei 44100 Mhz nicht mithalten können.

Ohne SD-Karte.
Ohne Library.
Nur die tone()-Funktion von Arduino.

// Arduino-Code zum Abspielen von Melodien
// ueber Kopfhoerer oder Kleinlautsprecher per PWM
// frei nach "Tuerklingel von M. Baudisch 12/2008"

// Benoetigte Bauteile: 
// 1. Arduino-Board
// 2. Kleinstlautsprecher 8 Ohm
// 3. Elektrolytkondensator 1 ... 100 uF (Mikrofarad)
// Reihenschaltung vom LAUTSPRECHERPIN am Board, Kondensator, Lautsprecher zu Ground
// Achtung: Elektrolytkondensator immer polrichtig anschließen!
// Pluspolseite des Kondensators zum Ausgangspin am Board
// Minuspolseite des Kondensators zur GND-Seite
// Falls kein Kondensator zur Hand, ggf. 100 KOhm Widerstand verwenden
// (mit Widerstand statt Kondensator ist die Lautstaerke aber deutlich geringer)
// Alternative Beschaltung: 
// Statt eines Lautsprechers Anschluss am Line-In Eingang eines Verstaerkers

#define LAUTSPRECHERPIN 9

uint16_t ton[]=
{
262, // c 	 Timerwerte fuer die enspr. Tonhoehen in Hz
277, //cis
294, //d
311, //dis
330, //e
349, //f
370, //fis
392, //g
416, //gis
440, //a
466, //b
495, //h
524, //c'
554, //cis'
588, //d'
622, //dis'
660, //e'
698, //f'
740, //fis'
784, //g'
831, //gis'
880, //a'
929, //b'
992, //h'
1050, //c''
1106, //cis''
1179, //d''
1244, //dis''
1316, //e'
1397, //f''
1562, //g'' auf position von fis'' verschoben
};

uint8_t zeit[] =  // Notenlaengen
// beim Abspielen werden die Notenlaengen mit einem Faktor
// multipliziert, um die Notenlaenge im Millisekunden zu erhalten
{
2, //1/32 Note
3, //1/32. dito punktiert
4, //1/16 Note
6, //1/16. dite punktiert
8, //1/8 Achtelnote
12,//1/8.
16,//1/4 Viertelnote
24,//1/4.
};

//Format Lied :
//1. Byte: speed 2 schnell, 3..5 normal
//2. Byte - n Byte Noten

//Aufbau eines Notenbytes:

//Bit
// 7  6  5  4  3  2  1  0
// |__|__|  |__|__|__|__|_Tonhoehe ( 1..31 (C..G'') incl. aller Halbtonschritte
//    |                                             ausser 31: G'' statt FIS''
//    |                                     wenn 0, kein Ton sondern Pause
//    |
//    |___________________________________________Tonlaenge
//
//                                                7: 1/4.
//                                                6: 1/4
//                                                5: 1/8.
//                                                4: 1/8
//                                                3: 1/16.
//                                                2: 1/16
//                                                1: 1/32.
//                                                0: 1/32
//




void playTeddy(byte *lied, byte anzNoten)
// Parameter *lied ==> Bytepointer auf die Noten des Lieds
// Parameter anzNoten ==> Anzahl der Noten im Lied
{
  byte lspeed=0;
  byte dauer;
  byte hoehe;
  byte note ;
  byte i;
  lspeed= pgm_read_byte(lied); // im ersten Byte die Abspielgeschwindigkeit lesen
//  Serial.print("Speed: ");Serial.print(lspeed);Serial.println();
//  Serial.print("Anzahl Noten: ");Serial.print(anzNoten);Serial.println();
  for (i=1;i<anzNoten;i++)
  {
    note=pgm_read_byte(lied+i); //Note holen
//    Serial.println(note);
    hoehe=note & 0x1f; //Tonhöhe ausmaskieren (5 Bit)
    dauer= zeit[(note >> 5)]; // 5 Bit nach rechts schieben und Zeit holen
    if (hoehe) //wenn keine Pause 
    {
       tone(LAUTSPRECHERPIN,ton[hoehe-1]);
       delay(int(dauer)*int(lspeed)*int(25));
       noTone(LAUTSPRECHERPIN);
       delay(25);
    }
    else
     delay(dauer);
  }    
  noTone(LAUTSPRECHERPIN);
}


// Ein paar wenige kurze Melodien, 
// um RAM-Speicher zu sparen als "PROGMEM"-Variablen deklariert
byte lied_1[] PROGMEM={3,13,82,22,82,13,76,148,18,81,20,81,13,74,146,13,82,22,82,13,76,148,18,81,13,79,17,210};
byte lied_2[] PROGMEM={2,10,8,202,202,8,6,3,5,194,0,163,192,10,8,202,202,101,102,98,195};
byte lied_3[] PROGMEM={4,65,65,3,6,5,3,72,72,8,10,5,6,67,67,3,6,5,3,1,12,10,8,6,5,3,129};
byte lied_4[] PROGMEM={3,5,106,5,113,10,78,12,14,74,69,74,83,81,14,15,177,0,5,74,83,81,14,15,81,12,14,74,69,74,14,15,108,10,138};
byte lied_5[] PROGMEM={4,100,3,1,3,4,8,107,10,8,10,11,15,178,64,102,5,3,5,6,10,109,12,10,12,13,17,180,128};
byte lied_6[] PROGMEM={3,70,6,6,70,6,6,6,6,6,6,6,10,1,1,70,6,6,70,6,6,6,6,6,6,3,1,64,70,6,6,70,6,6,6,6,6,6,6,10,64,173,74,13,10,6,64,128};
byte lied_7[] PROGMEM={2,8,74,8,69,77,74,168,8,10,8,10,72,77,172,64,6,72,6,67,76,74,168,8,10,8,10,72,74,165};
byte lied_8[] PROGMEM={2,1,1,65,1,1,65,1,1,6,72,74,0,1,1,65,1,1,65,10,10,8,69,65,0,1,1,65,1,1,65,1,1,6,72,74,0,6,10,77,13,13,13,11,10,8,6,106,6};
byte lied_9[] PROGMEM={3,81,17,17,17,17,17,81,74,77,81,79,15,15,15,15,15,15,8,0,76,79,81,17,17,17,17,17,17,19,20,22,0,84,81,15,12,0,74,0,74};
byte lied_10[] PROGMEM={5,6,8,8,6,72,0,8,6,8,10,8,6,5,6,6,5,70,0,6,5,6,8,6,69,0,3,5,5,3,69,0,3,5,6,5,3,0,139};

void setup() {
  Serial.begin(9600); // Serielle Schnittstelle initialisieren
}

void loop() 
{
  // Spielt die 10 kurzen Melodien in Endlosschleife
  playTeddy(lied_1,sizeof(lied_1));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_2,sizeof(lied_2));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_3,sizeof(lied_3));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_4,sizeof(lied_4));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_5,sizeof(lied_5));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_6,sizeof(lied_6));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_7,sizeof(lied_7));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_8,sizeof(lied_8));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_9,sizeof(lied_9));
  delay(2000); // Kurze Pause nach der Melodie
  playTeddy(lied_10,sizeof(lied_10));
  delay(2000); // Kurze Pause nach der Melodie
}

Damit ihr Euren Lautsprecher wenigstens mal etwas testen könnt, bevor ihr anfangt, etwas mit der SD-Karte zu machen.

Ups.... 44100 Mhz ist natürlich Quatsch... hab mich verschrieben... Hz natürlich.
Ich arbeite auch gerade daran das mit Arduino zu machen. Die ersten Tests
laufen schon prima :smiley:

HAHA 44100 Mhz .... WOW bin ich gut... Das soll mit mal einer nachmachen... :wink:

Vielen, vielen Dank!! <33
Also wir haben den Lautsprecher so angeschlossen, dass das Programm das jurs gepostet hat läuft. Aber wir hatten ja schon so ein ähnliches gemacht gehabt das genauso läuft:

/*
Jojo und Fani Arduino Harry Potter Melodie~
*/

#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

int pin=8;


int note[] = {
  NOTE_B4, NOTE_E5,NOTE_G5, NOTE_FS5, NOTE_E5, NOTE_B5, NOTE_A5, NOTE_FS5, NOTE_E5, NOTE_G5, NOTE_FS5, NOTE_D5, NOTE_F5, NOTE_B4, NOTE_B4, NOTE_E5, NOTE_G5, NOTE_FS5, NOTE_E5, NOTE_B5, NOTE_D6, NOTE_CS6, NOTE_C6, NOTE_GS5, NOTE_C6, NOTE_B5, NOTE_AS5, NOTE_AS5, NOTE_G5, NOTE_E5};


int noteDurations[] =                               // tonlänge: 4 = viertel note 8 = achtel note, etc.:
  {4, 4, 7, 4, 2, 3, 1, 1, 3, 7, 4, 2, 4, 1, 4, 3, 8, 4, 2, 4, 2, 4, 2, 4, 3, 8, 3, 6, 4, 2, 3, 0.5};

void setup() {                                      

  for (int i = 0; i <= 29; i= i+1) {

    int noteDuration = 1000/noteDurations[i];
    tone(8, note[i],noteDuration);

    // kurze Pause zwischen den einzelnen Noten
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stopt die Melodie
    noTone(8);
  }
}

void loop() {
}

Wir wollten ja "nur" anstatt von der Melodie ein Lied einbauen und dass es auf Knopfdruck funktioniert. Außerdem haben wir das ganze jetzt an einen 9 Volt Block angeschlossen damit wir es vom Computer weg in den Teddy kriegen.
Wir verstehen nur nicht ganz wie man das Programm dazu bekommt statt der Melodie das Lied abzuspielen.

IrgendJemand:
Wir verstehen nur nicht ganz wie man das Programm dazu bekommt statt der Melodie das Lied abzuspielen.

Also nochmal der Hinweis:
http://hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio

Wo hakt es denn genau?

Das Lied passend in eine 8-Bit Mono WAV-Datei zu konvertieren?

Eine SD-Karte mit FAT16 zu formatieren und die Datei im 8.3-Format auf die Karte zu kopieren?

Die SD-Karte (wohl aus der Fassung auf dem EthernetShield?) mit der SimpleSDAudio-Library anzusprechen?

Oder ist das Problem, einen Tastschalter so anzusprechen, dass das Drücken des Tasters die Abspielfunktion startet?

Also wir haben die Datei von mp3 in wav umgewandelt und jetzt auf die Mikro SD Karte getan nachdem wir die mit FAT 16 formatiert haben (wir mussten sie halt zweiteilen weil sie zu groß war, aber es sollte ja eigentlich funktionieren, da es ja trotzdem FAT 16 ist).

Außerdem sind wir uns nicht sicher, wie man die Datei nennen muss, da wir sie ja 8 Zeichen lang machen sollten nen Punkt und nochmal 3 Zeichen aber wenn wir die Datei wibbly.wav nennen kommt ja wibbly.wav.wav raus. Sollen wir das erste .wav dann einfach weglassen?

Und die SD Karte haben wir ins Ethernetshield getan und den Lautsprecher und den Knopf angeschlossen so dass zumindets die Melodie schonmal funktioniert.

Aber wir verstehen nicht, wie man den Arduino zum Abspielen der Datei bringt und wie man das mit den ganzen Librarys macht.

Also das Programm spielt jetzt halt die Melodie auf Knopfdruck aber weiter kommen wir nicht, da wir das mit den Libraries nicht verstehen.
Die Noten sind ja in der Datei "pitches", die wir mit hochgeladen haben.

/*
  Spielt nach Tastendruck die Melodie von Levels (Avicii).
*/
// Einfügen der Notenliste:
 #include "pitches.h"

// Noten der Medlodie:
int melody[] = {
  NOTE_CS5, NOTE_B4, NOTE_GS4, NOTE_FS4, NOTE_E4, NOTE_E4, 0, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_DS4, NOTE_DS4, NOTE_E4, NOTE_E4, 0,
  NOTE_CS5, NOTE_B4, NOTE_GS4, NOTE_FS4, NOTE_E4, NOTE_E4, 0, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_CS4, NOTE_CS4, NOTE_B3, NOTE_B3, 0};

// Notenlänge: 4 = Viertelnote, 8 = Achtelnote, etc.:
int noteDurations[] = {
  4, 4, 4, 4 ,4 ,4 ,4 ,4 ,4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4};

void setup() {
}
void loop() 
{
 int messwert = analogRead(0);
 if(messwert < 500) // Wenn der Konpf gedrückt wird wird die Melodie abgespielt.
 {
    for (int thisNote = 0; thisNote < 32; thisNote++) {
     
      int noteDuration = 700/noteDurations[thisNote];
      tone(8, melody[thisNote],noteDuration);
     
      int pauseBetweenNotes = noteDuration * 1.30;
      delay(pauseBetweenNotes);
      noTone(8);
    }
  }
}

pitches.h (1.96 KB)

Du wurdest doch auf diese Bibliothek verwiesen: SimpleSDAudio – Hackerspace Ffm
Dort gibt es das Beispiel BareMinimum.ino:

/*
 Simple SD Audio bare minimum example, plays file EXAMPLE.AFM from root folder of SD card.
 
 This example shows how to use the SimpleSDAudio library for audio playback.
 You need: 
 - An Arduino with ATmega168/ATmega368 or better
 - An SD-Card connected to Arduinos SPI port (many shields will do)
   -> copy EXAMPLE.AFM on freshly formated SD card into root folder
 - A passive loudspeaker and resistor or better: active speakers (then stereo output will be possible)
 
 Audio signal output is at the following pin:
 - Arduino with ATmega168/328   (many non-mega Arduinos): Pin 9
 - Arduino with ATmega1280/2560 (many mega Arduinos)    : Pin 44
 
 Using passive speaker:	
    Audio-Pin --- -[100 Ohm resistor]- ---- Speaker ---- GND
    
 Using amplifier / active speaker / line-in etc.:
    Audio-Pin --||--------------[10k resistor]----+----[1k resistor]---- GND
              100nF capacitor                   to amp
 
 See SimpleSDAudio.h or our website for more information:
 http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio
 
 created  23 Jun 2012 by Lutz Lisseck
 */
#include <SimpleSDAudio.h>

void setup()
{ 
  // If your SD card CS-Pin is not at Pin 4, enable and adapt the following line:
  // SdPlay.setSDCSPin(10);
  
  // Init SdPlay and set audio mode
  if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO)) {
    while(1); // Error while initialization of SD card -> stop.
  } 
  
  // Select file to play
  if(!SdPlay.setFile("EXAMPLE.AFM")) {
    while(1); // Error file not found -> stop.
  }   
  
  // Start playback
  SdPlay.play();
  
  // Let the worker work until playback is finished
  while(!SdPlay.isStopped()) {
    SdPlay.worker();
  }
}

void loop(void) {
}

Damit ist echt nichts anzufangen?

IrgendJemand:
Also wir haben die Datei von mp3 in wav umgewandelt

In WAV umgewandelt reicht nicht aus. Ihr müsst die Datei auch noch in eine 8-Bit WAV mit bestimmter Datenrate umwandeln, das Kommandozeilenprogramm "sox" dafür ist gleich mit dabei.

IrgendJemand:
und jetzt auf die Mikro SD Karte getan nachdem wir die mit FAT 16 formatiert haben (wir mussten sie halt zweiteilen weil sie zu groß war, aber es sollte ja eigentlich funktionieren, da es ja trotzdem FAT 16 ist).

FALSCH!
Nehmt eine alte 2GB Speicherkarte und formatiert sie FAT16!
Und KEINE PARTITIONIERUNG der Karte in verschiedene Bereiche, damit kann die Lib nicht umgehen!

IrgendJemand:
Außerdem sind wir uns nicht sicher, wie man die Datei nennen muss, da wir sie ja 8 Zeichen lang machen sollten nen Punkt und nochmal 3 Zeichen aber wenn wir die Datei wibbly.wav nennen kommt ja wibbly.wav.wav raus. Sollen wir das erste .wav dann einfach weglassen?

Ja. "wibbly.wav" ist als 8.3 Dateiname vollkommen in Ordnung und kann so von einer NTFS-formatierten Platte problemlos auf eine FAT16 formatierte Speicherkarte rüberkopiert werden.

IrgendJemand:
Lautsprecher und den Knopf angeschlossen so dass zumindets die Melodie schonmal funktioniert.

Na bravo, dann habt ihr ja wenigstens eine Notlösung mit Tönen, selbst wenn ihr das mit der WAV-Datei nicht mehr rechtzeitig hinbekommt.

IrgendJemand:
Aber wir verstehen nicht, wie man den Arduino zum Abspielen der Datei bringt und wie man das mit den ganzen Librarys macht.

Die Library wird so (mit derselben Ordnerstruktur) wie sie aus dem Archiv entpackt wird, in das Arduino libraries Verzeichnis reinkopiert. Beim nächsten Arduino-Programmstart kennt Arduino dann die Library und ihr könnt sie in Eurem Programm verwenden.

Hier ein Tipp we ihr es nicht mit den Bauteilen von euch arbeiten müsst:
Mit dem MSP 430 kann man über einen Piezolautsprecher die Töne ausgeben:

Addi

Wir haben jetzt die Speicherkarte und die Datei "richtig" gemacht aber wir verstehen nicht wie man die ganzen Befehle von der Seite anwendet den uns alle geben SimpleSDAudio – Hackerspace Ffm
Bis jetzt haben wir das:

boolean init(uint8_t soundMode);

boolean setFile(char wibbly.wav);        //datei wird gefunden

void setup()
{  void play();
      if {messwert<500);                   //taste gedrückt
      {                                    //Anwesungen      
      }
  } 
  
  if("wibbly.wav") {                      //wird gespielt wenn vorhanden
  }   

  }
  void stop();
    if ()
}

void loop() {
}

Wir wissen ja dass es falsch ist aber kommen einfach nicht weiter und wissen nicht mal ob das in "void loop" oder "void setup" rein muss und wie das Programm dann die Datei finden soll.
Außerdem haben wir das bisher immer mit "int" gemacht, dass das Programm weiß welcher Begriff was bedeutet aber hier soll man ja was anderes verwenden und wir blicken gar nicht mehr durch.

Zur Library gibt es einige Beispiele, das simpelste habe ich sogar hier im Thread gepostet. Warum willst du nicht auf diesen Beispielen aufbauen? Denn die Programmierung, die ihr bisher habt, ist gelinde gesagt gar nichts...

IrgendJemand:
Wir haben jetzt die Speicherkarte und die Datei "richtig" gemacht aber wir verstehen nicht wie man die ganzen Befehle von der Seite anwendet

Jede Arduino-Library kommt mit mindestens einem Beispiel.

Als erstes nehmt ihr Euch also das Beispiel vor und spielt Euer Lied mit dem Beispielcode ab.

Den Beispielcode zur Library findet ihr unter:
Datei - Beispiele - SimpleSDAudio - BareMinimum

Und in diesem Minimum-Code ersetzt ihr in dieser Zeile:
if(!SdPlay.setFile("EXAMPLE.AFM"))
den Dateinamen "EXAMPLE.AFM" durch Euren Dateinamen "wibbly.wav"

Und wenn mit der Karte und der Datei darauf dann alles soweit in Ordnung ist, sollte Eure Datei vom Beispielcode abgespielt werden.

Tach zusammen,
durch Zufall stöbere ich gerade mal im deutschen Forum und sehe gerade, dass auch hier auf meine Library (SimpleSDAudio) verwiesen wird. Wenn ihr schon ein Ethernet-Shield zur Verfügung hat, dass ja einen brauchbaren SD-Slot mitbringt, empfehle ich euch, so wie bereits vorgeschlagen, für den Anfang irgendwie das BareMinimum-Beispiel (mit der Audio-Beispiel Datei, die dabei ist) ans Laufen zu bringen. Bevor das nicht klappt, macht es keinen Sinn, irgendwie die Befehle der Library ohne Verstand durchzuprobieren. Wenn ihr Schwierigkeiten habt, das Beispiel ans rennen zu bringen, schreibt es ins Forum, schreibt auch was ihr genau gemacht habt oder nicht versteht.

Ach ja, wenn eure Karte größer als 2GB ist, macht keinen Unsinn wie rumpartitionieren, sondern formatiert sie als Ganzes mit FAT32. Das unterstützt die Library nämlich auch.

Solltet ihr es geschafft haben, probiert ob ihr statt dem Beispielsound auch eure eigene Audiodatei damit abgespielt bekommt. Wichtig hierbei: Nie die Datei auf der Karte löschen oder überschreiben, immer die ganze Karte frisch formatieren und dann ein oder mehrere Dateien ins Hauptverzeichnis draufkopieren, Ordner werden auch nicht unterstützt.

Viel Erfolg!
tuttut

Wir haben versucht das Programm selbst zu schreiben, weil das Beispielprogramm immer Fehlermeldungen angezeigt hat, die wir nicht beheben konnten.
Also die Zeile hat immer ne Fehlermeldung;
if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO)) {

Außerdem hat uns unser Lehrer uns heute gesagt, dass das anscheinend nicht mit einem Arduino Uno sondern nur mit einem Arduino Due funktioniert.

Also es kommen diese Feglermeldungen;
sketch_dec18a.cpp: In function 'void setup()':
sketch_dec18a:34: error: 'Audio' was not declared in this scope
sketch_dec18a.cpp: In function 'void loop()':
sketch_dec18a:60: error: 'Audio' was not declared in this scope

und diese Zeile wird orange gekennzeichnet;
Audio.begin(88200, 100);

und das ist das ganze Programm;

/*

 Demonstrates the use of the Audio library for the Arduino Due

 Hardware required :
 *Arduino shield with a SD card on CS 4 (the Ethernet sheild will work)
 *Speaker attched to ground and DAC0

 Original by Massimo Banzi September 20, 2012
 Modified by Scott Fitzgerald October 19, 2012

*/

#include <SD.h>
#include <SPI.h>
#include <Audio.h>

void setup()
{
  // debug output at 9600 baud
  Serial.begin(9600);

  // setup SD-card
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println(" failed!");
    return;
  }
  Serial.println(" done.");
  // hi-speed SPI transfers
  SPI.setClockDivider(4);

  // 44100Khz stereo => 88200 sample rate
  // 100 mSec of prebuffering.
  Audio.begin(88200, 100);
}

void loop()
{
  int count=0;

  // open wave file from sdcard
  File myFile = SD.open("wibbly.wav");
  if (!myFile) {
    // if the file didn't open, print an error and stop
    Serial.println("error opening wibbly.wav");
    while (true);
  }

  const int S=1024; // Number of samples to read in block
  short buffer[S];

  Serial.print("Playing");
  // until the file is not finished
  while (myFile.available()) {
    // read from the file into buffer
    myFile.read(buffer, sizeof(buffer));

    // Prepare samples
    int volume = 1024;
    Audio.prepare(buffer, S, volume);
    // Feed samples to audio
    Audio.write(buffer, S);

    // Every 100 block print a '.'
    count++;
    if (count == 100) {
      Serial.print(".");
      count = 0;
    }
  }
  myFile.close();

  Serial.println("End of file. Thank you for listening!");
  while (true) ;
}