UNO met MP3shield v1053

Vandaag bezig geweest om een MP3shield aan de praat te krijgen, dit icm een Uno.
Ik probeer heel basic te beginnen zodat ik de programma’s kan begrijpen.

Het shield wat ik aangeschaft heb is V1053 shield. Wat ik ook geprobeerd heb , ik krijg geen geluid uit. (urenland lopen bleren in de microfoon, koptelefoongeluid op maximaal maar helaas geen geluid, zelfs geen kraakje :wink: ).

Wat heb ik gedaan:
Het shield op de Uno geplaatst.
Het sd kaartje geformateerd op FAT32 (via de pc).
2 mp3 files erop gezet met de naam track001.mp3 en track002.mp3.
Vervolgens diverse libraries geinstalleerd.

sdFatUtil krijg ik niet gevonden.
Als ik een ander programma laadt, krijg ik foutmeldingen van error 1.
Ik krijg het idee dat ik langszaam van de regen in de drup raak.
Ook diverse standaard programma’s geladen o.a. (player_simple).

Na een dag surfen krijg ik het idee dat er misschien ook iets met de pin “verdeling” fout kan zitten.
Het is voor me lastig of het nu een “hardware” of software probleem is.

Kunnen jullie me vooruit helpen?

ps bewust een nieuwe topic aangemaakt zodat dit mogelijk voor anderen ook makkelijk te vinden is.

Hoi.

Wanneer ik Google raadpleeg voor de door jou genoemde library (ik heb 'm geselecteerd uit jouw tekst, en vervolgens tegen mijn browser gezegd dat ie dat moet Googlen), dan krijg ik een Google pagina met als eerste verwijzing deze pagina (klik !) Nou kan ik me best vergissen, maar het lijkt me direct wat je zocht.

Ik snap dat het heel ingewikkeld lijkt als je jezelf in zo'n avontuur stort, maar eigenlijk valt dat best mee. Maar je moet wel stukje bij beetje werken en het lijkt er op dat je nu in 2 stappen een compleet project wil afronden. En dat gaat 'm zeker niet worden.

Als je zegt dat je sdFatUtil nodig hebt, dan heb je vast ergens gelezen dat je dat nodig hebt. Ik heb geen idee waar je dat vandaan hebt (nou ja,...). Wellicht is het een goed idee dus zoiets in je vraag er bij te vermelden; wat ben je aan het doen met die shield van je, waar heb je je voorbeelden vandaan ?

Nadat ik bovenstaande getypt heb, ben ik even gaan kijken op de pagina waar je jouw product vandaan hebt, en dan naar de feedback. De feedback nummer 2 uit Denemarken, en nummer 3 uit Frankrijk zijn wel erg interessant. Dus als je dat nog niet gezien hebt, ga daar dan eens achteraan. Ik heb zo'n donkerbruin vermoeden dat je daarmee je problemen kan oplossen.

Het is werkend. Ik heb wel de link gezien maar deze "werkte" niet. Vervolgens lees je dan dat het mogelijk met de pinsetting te maken heeft en dan wordt het voor mij lastig om de oorzaak te vinden.

Vanmorgen las ik je reply en heb op de zaak nogmaals de sparkfun geprobeerd. Nu kwam ik wel op website en heb alles gedownload en geinstalleerd. Er komt nu geluid uit en weet ik dus dat het hardware matig klopt.

Bedankt weer en op naar de volgende uitdaging!

Waar kan ik de "functions" vinden van deze shield? Ik gok dat deze wel ergens te vinden zijn maar ik vind ze niet. Natuurlijk heb ik al in diverse schetsen gekeken maar dat is niet de weg denk ik.

update . kleine "toevalstreffer, Ik kom er net achter dat ik moet zoeken op "keywords"

maar nu zoek ik nog de omschrijving hoe deze te gebruiken.

Ook nu de functions gevonden. Kan nu weer verder.....

Of gewoon in de source code kijken van de library.......

Na weer een paar avonden zitten hobbien, ben ik weer een stuk wijzer.
Ik krijg nu geluid uit mijn koptelefoon dus hardware matig lijkt het goed te zijn.
Nu probeer ik het wat uit te breiden maar dan loopt mijn programma vast.

Wat heb ik gedaan :
Ik heb een aantal track0xx.mp3 op een sd kaart gezet.
Deze kan ik afspelen in mijn testomgeving.
“copy /past” ik het programma in mijn project dan wordt het angstvallig stil uit de koptelefoon en loopt het programma vast.

Nu heb ik wederom een paar vragen :

  1. wat doet SFEMP3Shield MP3player; precies?

  2. MP3player.begin(); klopt dat hiermee alles eenmalig “gereset” wordt?

  3. tot deze regel Serial.println(d); // first decimale just a check if it is the right decimale loopt het programma goed. Daarna gebeurt er niets meer.
    Kunnen jullie me vertellen wat ik fout doe?

  4. als ik :
    MP3player.playTrack(s); // speak the seconds.
    delay (2000);
    MP3player.playTrack(d); // speak the first decimale.
    delay (2000);

weg slash en onderste regel actief maakt gebeurt er ook niets.

//MP3player.playTrack(5);
Ik denk dat het dus daar niet aanligt.
Compileren gaat verder zonder fouten.

Ik hoop dat jullie me wederom uit de brand kunnen helpen.

#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>
// analoog A4 aan SDA(oranje),  A5 aan SCL(geel).

#include <SPI.h>
#include <SdFat.h>
#include <SFEMP3Shield.h>
SdFat sd;
SFEMP3Shield MP3player; 

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
int pushbutton = 7;
int ledpin=13; // led op pin 13 voor ready to run
int val=0;
int X=0;
int start=0;
int lap1=0;
int lap2=0;
int lap3=0;
int einde=0;
int buttonState;
int s;  // seconds
int d; // first decimale
float lap1a;
float lap2a;
float lap3a;
float eindea;

void setup() {
  // put your setup code here, to run once:
//start the shield
sd.begin(SD_SEL, SPI_HALF_SPEED);
MP3player.begin();  // question 2
Serial.begin(9600);
pinMode (ledpin,OUTPUT); 
pinMode(pushbutton, INPUT);
//voor data naar de pc sturen
Serial.println("CLEARDATA"); //clears any data left from previous projects
Serial.print("DATA,TIME,lap1,lap2,lap3,eind tijd"); //writes the time in the first column A and the time since the measurements started in column 
Serial.println(",");

// screen clear
lcd.begin(20,4); 
lcd.clear();
}

void loop()
{
// put your main code here, to run repeatedly:
lcd.clear();
lcd.setCursor(0,0);
digitalWrite(ledpin, HIGH);
lcd.print("klaar  ");
lcd.setCursor(5,1);
lcd.print("next run");
lcd.setCursor(0,3);
lcd.print("to A");
int X=1;
delay(500);
while (digitalRead(pushbutton) == LOW) {
   }
delay(500);
digitalWrite(ledpin, LOW);
lcd.clear();
lcd.print("   behind A");

// stopwatch    
while(X < 6)
  {
  buttonState = digitalRead(pushbutton);
  if (buttonState == 1){
    lcd.clear();
    lcd.print("  begonnen");
    if (X == 5){
      einde=millis();
      X++;   
      lcd.clear();
      lcd.print("    Einde");
      delay (2000);
    }
    if (X == 4){
      lap3=millis();
      X++;   
      lcd.clear();
      lcd.print("    to A");
      delay (500);
    }
    if (X == 3){
      lap2=millis();
      X++;   
      lcd.clear();
      lcd.print("    to B");
      delay (500);
    }
    if (X == 2){
      lap1=millis();
      X++;   
      lcd.clear();
      lcd.print("    to A");
      delay (500);
    }
    if (X == 1){
      start=millis();
      X++;
      lcd.clear();
      lcd.print("   start");
      lcd.setCursor(3,2);
      lcd.print("    to");
      delay (500);
    }
  }
  }
lap1a=(lap1-start); lap2a=(lap2-start); lap3a=(lap3-start); eindea=(einde-start);


// screen
lcd.print("tot time : ");
lcd.print (eindea/1000);
lcd.setCursor(17,3);
lcd.print ("sec");
 
// voor data opslag naar PC met PLX prog
Serial.print("DATA,TIME");
Serial.print(",");
Serial.print(lap1a/1000);
Serial.print(",");
Serial.print(lap2a/1000);
Serial.print(",");
Serial.print(lap3a/1000);
Serial.print(",");
Serial.print(eindea/1000);
Serial.print(",");
Serial.println(""); 
delay(500);

// speech part
s=eindea/1000;
d=(eindea/100-(10*s));
Serial.println(s);  // time in seconds  just a check if i have the right digit
Serial.println(d);  // first decimale  just a check if it is the right decimale
MP3player.playTrack(s); // speak the seconds.  question 3
delay (2000);
MP3player.playTrack(d);  // speak the first decimale.
delay (2000);

//MP3player.playTrack(5); 

delay (1000);
Serial.println("mp3 played"); // just a check if it the mp3 was played
delay(500);        // delay in between reads for stability


while (digitalRead(pushbutton) == LOW) {
   }
delay(10);
  }

Ik heb geen idee want ik ken dat spul verder niet, maar:

  1. Hiermee geef je 'm een naam die je voortaan wil gebruiken. Als je het liever wat duidelijker wil maken in je code, kun je er een andere naam aan geven. Voorbeeldjes:

SFEMP3Shield Herrie; Herrie.playTrack(s); // speak the seconds.

SFEMP3Shield Stem;

Enzovoorts.

2. Daarmee initialiseer je 'm das dus zoals een reset van je mp3 speler.

3. Je stuurt een variabele in plaats van een bestandsnaam naar de MP3peler.

4. Je stuurt een getal in plaats van een bestandsnaam naar de MP3speler.

Zet de bestandsnamen in een array. De nu kun je met getallen en/of variabelen werken. Moet je wel leren omgaan met arrays, maar behalve wat koppijn doet dat verder geen zeer. Maar verder heb ik dus echt geen idee want ik heb daar nooit iets mee gedaan.

ben ik toch weer een beetje verder. Op vraag 1 heb ik de bevestiging wat ik dacht. (al weet ik niet waar ik dit zelf kan vinden).

Op vraag 4, ik had al naar de array gekeken en dat ga ik tzt ook zeker doen. Mijn achterliggende gedachte was dat ik nu zeker weet dat er de juiste mp3 gespeeld wordt. Zoals jij en Nico altijd zegt, in kleine stukje opdelen ;-)

Als in het NL forum verder geen info komt, dan zet ik het op het engelse gedeelte vh forum. (ik wou de kennis zoveel mogelijk in het NL proberen te vergaren).

Je moet de antwoorden die je wel krijgt, wel goed lezen.

Goed lezen is niet mijn sterkste kant :wink:

De vraag is dan waarom onderstaande schets dan wel werkt wat betreft vraag 3.
(dezelfde mp3 files worden gebruikt).

#include <SPI.h>
#include <SdFat.h>
//#include <SdFatUtil.h> 
#include <SFEMP3Shield.h>

SdFat sd;
SFEMP3Shield MP3player;
int d=5;
int s=15;
int x;
void setup() {

  Serial.begin(9600);

  //start the shield
  sd.begin(SD_SEL, SPI_HALF_SPEED);
  MP3player.begin();
  x=1; 
}

//do something else now
void loop() {
if (x< 27) {
  Serial.println(s);
  Serial.println(d);
  MP3player.playTrack(s);
  delay (2000);
  MP3player.playTrack(d);
  delay (2000);
  x++;
  s++;
  d++;
  }
 
}

Ik heb jouw library opgezocht, en daar worden de tracks ook met nummers aangestuurd. Er staat in de voorbeelden dat je ook gewoon de naam kunt gebruiken. Das dan dus "track001.mp3", in z'n geheel.

De libary files zelf leggen wel een en ander uit, maar ik ga dat niet helemaal zitten bestuderen. Dat ga ik pas doen als ik het zelf nodig heb. Deze voorbeelden kunnen alleen "track000.mp3" tot en met "track009.mp3" afspelen. "track010.mp3" zou niet kunnen worden afgespeeld, meen ik te lezen maar ik ben er niet al te ver ingedoken en zou me dus kunnen vergissen. Verder moet je ook in de gaten houden dat variabelen verraderlijk kunnen zijn. Je stuurt met een variabele niet altijd een getal door, maar soms een verwijzing naar dat getal. Dat gaat niet goed.

Tot slot staat er in de library vermeld dat je aan je shield kunt vragen wat er misgegaan is door de status op te vragen als ik me niet vergis. Dus dat zou je eens kunnen doen.

Ik ben begonnen met MAS3 zijn opmerkingen te gebruiken.
Uiteindelijk heb ik mijn schets leeggemaakt en begonnen met stukje bij beetje terug te kopieren.
Hier ontstond al vrij snel het probleem.

De code die gemaakt is :

#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>
// analoog A4 aan SDA(oranje),  A5 aan SCL(geel).

#include <SPI.h>
#include <SdFat.h>
#include <SFEMP3Shield.h>
SdFat sd;
SFEMP3Shield MP3player;  // question 1

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
int pushbutton = 7;
int ledpin=13; // led op pin 13 voor ready to run
int val=0;
int X=0;
int start=0;
int lap1=0;
int lap2=0;
int lap3=0;
int einde=0;
int buttonState;
int s;  // seconds
int d; // first decimale
float lap1a;
float lap2a;
float lap3a;
float eindea;

void setup() {

  Serial.begin(9600);
  //start the shield
  sd.begin(SD_SEL, SPI_HALF_SPEED);
  MP3player.begin();
  s=MP3player.getState();
  d=MP3player.isPlaying();
  Serial.println(s);  
  Serial.println(d); 
  //[b]pinMode(pushbutton, INPUT);[/b]
  s=MP3player.getState();
  d=MP3player.isPlaying();
  Serial.println(s);  
  Serial.println(d);  


  //start playing track 1
  Serial.println("mp3 gestart");
  MP3player.playMP3("track001.mp3");
  s=MP3player.getState();
  d=MP3player.isPlaying();
  Serial.println(s);  
  Serial.println(d); 
  Serial.println("mp3 afgespeeld");
}

//do something else now
void loop() {

  Serial.println("I'm bored!");
  delay(2000);

Het resultaat is goed met onderstande reply.

1
0
1
0
mp3 gestart
5
1
mp3 afgespeeld
I’m bored!

Haal ik de // weg bij pinMode(pushbutton, INPUT); weg dan gaat het fout.
Het resultaat is dan :
1
0
1
0
mp3 gestart

en er gebeurt niets.
Ik heb al de pin 7 naar pin 10 verlegt maar dat was ook niet de oplossing.

Mijn paar hersencellen beginnen langszaam pijn te doen…
Iemand een ideetje?

Als je nu eens wat meer energie had gestoken in de verschillende interfaces. Waaronder de SPI dan had je geweten dat je verder met je tengels van de pinnen 10-13 af moet blijven. Die zijn al gereserveerd voor de SPI bus. Had je dat kunnen weten? Yep

Hallo Nico,

Dank voor je reactie want ik hierdoor ben ik weer iets wijzer ;-)

Ook al laat ik de pushbutton op 7 staan, dan heb ik nog steeds hetzelfde probleem. (Deze staat overigens weer op 7.) Blijft mijn vraag wel staan wat ik fout doe..

PS zoals je misschien al wel begrepen heb, dump ik mijn probleem niet meteen op het forum en ik ben ook geen student, meer een onervaren 50+ . Ik wil eerst zelf proberen of ik zelf wat uitsluiten en zoveel mogelijk info te geven over het probleem . Op een gegeven moment begin je door de onervarenheid van alles te proberen. ik hoop dat je dat ook begrijpt. Uieindelijk is voor mij met een Arduino werken geen doel opzich, maar een stukje van een totaal plaatje, al begin ik het wel steeds interessanter te vinden)