Mp3 Player mit dem 2.8 touchshield

Hallo zusammen,
ich würde gerne dieses Projekt machen.

Leider sind beim kombilieren des Sketches mehrere fehler aufgedreten.
Da ich mich in diesem Gebiet nicht so gut auskenne bitte ich euch um eure Hilfe.

Viele Grüße
Joel Kitzmann

Du hast in Zeile 42 das ";" mit einem Komma verwechselt.

Leider können wir nicht auf deinen Arbeitsplatz und auch nicht auf deinen PC schauen.
Daher solltest du uns deinen Sketch und die Fehlermeldung zeigen.

Setze die bitte in Code-Tags hier rein.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Dazu den Sketch markieren und die Schaltfläche klicken, oder [ code] davor und [ / code] dahinter ohne Leerzeichen.
Oder
im IDE-Fenster rechte Maustaste und für “Forum kopieren klicken”, danach hier einfügen.

Ahhhh… da war ich zu langsam. Moko hat den Fehler schon gefunden. :wink:

Vielen Dank,
für eure schnellen Antworten.
Dennoch kommt bei mir dieser Zeile folgende Fehlermeldung:

uint16_t count = mp3.getTotalTrackCount();

no matching function for call to ‘DFMiniMp3<SoftwareSerial, Mp3Notify>::getTotalTrackCount()’

Die 42 stammt aus dem Roman Per Anhalter durch die Galaxis.

Klartext: Du lieferst zu wenige Informationen, um Dir helfen zu können!

Wie sieht Dein Programm aus? So?

#include "Arduino.h"
#include <SoftwareSerial.h>
#include <DFMiniMp3.h>
#include "Adafruit_ILI9341.h" 
#include <URTouch.h>          
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPI.h>


class Mp3Notify
{
public:
  static void OnError(uint16_t errorCode)
  {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }

  static void OnPlayFinished(uint16_t globalTrack)
  {
    Serial.println();
    Serial.print("Play finished for #");
    Serial.println(globalTrack);
  }

  static void OnCardOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("Card online ");
    Serial.println(code);     
  }

  static void OnUsbOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk online ");
    Serial.println(code);     
  }

  static void OnCardInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("Card inserted ");
    Serial.println(code); 
  }

  static void OnUsbInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk inserted ");
    Serial.println(code); 
  }

  static void OnCardRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("Card removed ");
    Serial.println(code);  
  }

  static void OnUsbRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk removed ");
    Serial.println(code);  
  }
};
// instance a DFMiniMp3 object, 
// defined with the above notification class and the hardware serial class
//
//DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial1);

// Some arduino boards only have one hardware serial port, so a software serial port is needed instead.
// comment out the above definition and uncomment these lines
 SoftwareSerial mySoftwareSerial(A0, A1); // RX, TX
DFMiniMp3<SoftwareSerial, Mp3Notify> mp3(mySoftwareSerial);

#define TFT_DC 9              
#define TFT_CS 10            
#define TFT_RST 8
#define TFT_MISO 12         
#define TFT_MOSI 11           
#define TFT_CLK 13            


#define t_SCK 3              
#define t_CS 4                
#define t_MOSI 5              
#define t_MISO 6             
#define t_IRQ 7   

#define TS_MINX 204
#define TS_MINY 195
#define TS_MAXX 948
#define TS_MAXY 910  


URTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ);

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
Adafruit_GFX_Button buttons[9];

int x,y;

char NEXT[5] = {"NEXT"};
char PREV[5] = {"PREV"};
char PAUSE[5] = {"||"};
char PLAY[5] = {"PLY"};
extern uint8_t myBitmap[];

void waitfortouch(unsigned short int *x,unsigned short int *y){
  do
  {    
    delay(10);
    if (ts.dataAvailable() == true)
    {
      ts.read();
      *x = ts.getX();  //Get touch point  
      *y = ts.getY();
      return;
      }
  }while(ts.dataAvailable()==false); 
}

void setup() 
{
   mySoftwareSerial.begin(9600);//initialization for Software Serial
  Serial.begin(115200); // This is the standard baud rate for the Mp3 player

  Serial.println("initializing...");
  
  tft.begin();  //initialization for tft lcd                   
  tft.setRotation(3); // set orientation of the display rotation 3 for landscape          
  ts.InitTouch();    //initialize touch Screen               
  ts.setPrecision(PREC_EXTREME); //set precision on reading data
  tft.fillScreen(ILI9341_BLACK);
  
  drawBitmap(0,0, myBitmap,320, 240,ILI9341_WHITE);
  
  mp3.begin();

  uint16_t volume = mp3.getVolume();
  Serial.print("volume ");
  Serial.println(volume);
  mp3.setVolume(15);
  
  uint16_t count = mp3.getTotalTrackCount();
  Serial.print("files ");
  Serial.println(count);
  
  Serial.println("starting...");
 mp3.playRandomTrackFromAll();
 ControlBots();
 
  
}

void loop() 
{  
  trcknms();

   waitfortouch(&x,&y); 
   if (buttons[0].contains(x,y)) 
    {    
     mp3.nextTrack();
    
      }
      
   else if (buttons[1].contains(x,y))
    {  
        mp3.prevTrack(); 
    }
     else if (buttons[2].contains(x,y))
    {
       mp3.pause();
    }
     else if (buttons[3].contains(x,y))
    {
        mp3.start();
    } 
    
}

void ControlBots()
  {
    buttons[0].initButton(&tft,50,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      NEXT, 2); 
          buttons[0].drawButton();
  buttons[1].initButton(&tft, 260,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      PREV, 2); 
          buttons[1].drawButton();
  buttons[2].initButton(&tft,120,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      PAUSE, 2); 
          buttons[2].drawButton();  
  buttons[3].initButton(&tft,190,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      PLAY, 2); 
          buttons[3].drawButton();  
  }
void trcknms()
{
  uint16_t curr = mp3. getCurrentTrack();
  if (curr == 1)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("  DESPACITO         ");
    }
    if (curr == 2)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("THATS WHAT I LIKE");
    }
    if (curr == 3)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("  I'M THE ONE        ");
    }

   if (curr == 4)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("   HUMBLE            ");
    }
     if (curr == 5)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("  SHAPE OF YOU       ");
    }
}
void drawBitmap(int16_t x, int16_t y,
 const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {

  int16_t i, j, byteWidth = (w + 7) / 8;
  uint8_t byte;

  for(j=0; j<h; j++) {
    for(i=0; i<w; i++) {
      if(i & 7) byte <<= 1;
      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);
      if(byte & 0x80) tft.drawPixel(x+i, y+j, color);
    }
  }
}

Welche Fehlermeldungen bekommst Du? Beispielsweise so?

[sup]fatal error: DFMiniMp3.h: No such file or directory
 #include <DFMiniMp3.h>
          ^~~~~~~~~~~~~
compilation terminated.
exit status 1
DFMiniMp3.h: No such file or directory
[/sup]

joel3d:
Vielen Dank,
für eure schnellen Antworten.
Dennoch kommt bei mir dieser Zeile folgende Fehlermeldung:

uint16_t count = mp3.getTotalTrackCount();

no matching function for call to ‘DFMiniMp3<SoftwareSerial, Mp3Notify>::getTotalTrackCount()’

Warum liest du nicht alle unsere Beiträge richtig durch.
Da steht genau was du machen solltest.

Du bist doch schon länger hier, solltest das eigentlich wissen.

no matching function for call to '[... :: ]getTotalTrackCount()'

Heißt auf Deutsch : Diese Funktion (bzw. Methode) gibt es so -ohne Aufrufparameter, für dein mp3-Objekt - nicht.

Musst du (wie der Compiler auch) in die Datei DFMiniMp3.h sehen.
Oder gucken, ob du alles richtig abgetippt hast und die richtige Version der Library verwendest.

Sorry, also das ist der code den ich Benutze.

#include "Arduino.h"
#include <SoftwareSerial.h>
#include <DFMiniMp3.h>
#include "Adafruit_ILI9341.h" 
#include <URTouch.h>          
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPI.h>


class Mp3Notify
{
public:
  static void OnError(uint16_t errorCode)
  {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }

  static void OnPlayFinished(uint16_t globalTrack)
  {
    Serial.println();
    Serial.print("Play finished for #");
    Serial.println(globalTrack);
  }

  static void OnCardOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("Card online ");
    Serial.println(code);     
  }

  static void OnUsbOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk online ");
    Serial.println(code);     
  }

  static void OnCardInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("Card inserted ");
    Serial.println(code); 
  }

  static void OnUsbInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk inserted ");
    Serial.println(code); 
  }

  static void OnCardRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("Card removed ");
    Serial.println(code);  
  }

  static void OnUsbRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk removed ");
    Serial.println(code);  
  }
};
// instance a DFMiniMp3 object, 
// defined with the above notification class and the hardware serial class
//
//DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial1);

// Some arduino boards only have one hardware serial port, so a software serial port is needed instead.
// comment out the above definition and uncomment these lines
 SoftwareSerial mySoftwareSerial(A0, A1); // RX, TX
DFMiniMp3<SoftwareSerial, Mp3Notify> mp3(mySoftwareSerial);

#define TFT_DC 9              
#define TFT_CS 10            
#define TFT_RST 8
#define TFT_MISO 12         
#define TFT_MOSI 11           
#define TFT_CLK 13            


#define t_SCK 3              
#define t_CS 4                
#define t_MOSI 5              
#define t_MISO 6             
#define t_IRQ 7   

#define TS_MINX 204
#define TS_MINY 195
#define TS_MAXX 948
#define TS_MAXY 910  


URTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ);

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
Adafruit_GFX_Button buttons[9];

int x,y;

char NEXT[5] = {"NEXT"};
char PREV[5] = {"PREV"};
char PAUSE[5] = {"||"};
char PLAY[5] = {"PLY"};
extern uint8_t myBitmap[];

void waitfortouch(unsigned short int *x,unsigned short int *y){
  do
  {    
    delay(10);
    if (ts.dataAvailable() == true)
    {
      ts.read();
      *x = ts.getX();  //Get touch point  
      *y = ts.getY();
      return;
      }
  }while(ts.dataAvailable()==false); 
}

void setup() 
{
   mySoftwareSerial.begin(9600);//initialization for Software Serial
  Serial.begin(115200); // This is the standard baud rate for the Mp3 player

  Serial.println("initializing...");
  
  tft.begin();  //initialization for tft lcd                   
  tft.setRotation(3); // set orientation of the display rotation 3 for landscape          
  ts.InitTouch();    //initialize touch Screen               
  ts.setPrecision(PREC_EXTREME); //set precision on reading data
  tft.fillScreen(ILI9341_BLACK);
  
  drawBitmap(0,0, myBitmap,320, 240,ILI9341_WHITE);
  
  mp3.begin();

  uint16_t volume = mp3.getVolume();
  Serial.print("volume ");
  Serial.println(volume);
  mp3.setVolume(15);
  
 uint16_t count = mp3.getTotalTrackCount();
  Serial.print("files ");
  Serial.println(count);
  
  Serial.println("starting...");
 mp3.playRandomTrackFromAll();
 ControlBots();
 
  
}

void loop() 
{  
  trcknms();

   waitfortouch(&x,&y); 
   if (buttons[0].contains(x,y)) 
    {    
     mp3.nextTrack();
    
      }
      
   else if (buttons[1].contains(x,y))
    {  
        mp3.prevTrack(); 
    }
     else if (buttons[2].contains(x,y))
    {
       mp3.pause();
    }
     else if (buttons[3].contains(x,y))
    {
        mp3.start();
    } 
    
}

void ControlBots()
  {
    buttons[0].initButton(&tft,50,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      NEXT, 2); 
          buttons[0].drawButton();
  buttons[1].initButton(&tft, 260,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      PREV, 2); 
          buttons[1].drawButton();
  buttons[2].initButton(&tft,120,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      PAUSE, 2); 
          buttons[2].drawButton();  
  buttons[3].initButton(&tft,190,220,60,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,
                      PLAY, 2); 
          buttons[3].drawButton();  
  }
void trcknms()
{
  uint16_t curr = mp3. getCurrentTrack();
  if (curr == 1)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("  DESPACITO         ");
    }
    if (curr == 2)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("THATS WHAT I LIKE");
    }
    if (curr == 3)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("  I'M THE ONE        ");
    }

   if (curr == 4)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("   HUMBLE            ");
    }
     if (curr == 5)
  { tft.setCursor(0,30);
    tft.setTextColor(ILI9341_RED, ILI9341_WHITE); 
    tft.setTextSize(3); 
    tft.print ("  SHAPE OF YOU       ");
    }
}
void drawBitmap(int16_t x, int16_t y,
 const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {

  int16_t i, j, byteWidth = (w + 7) / 8;
  uint8_t byte;

  for(j=0; j<h; j++) {
    for(i=0; i<w; i++) {
      if(i & 7) byte <<= 1;
      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);
      if(byte & 0x80) tft.drawPixel(x+i, y+j, color);
    }
  }
}
class Mp3Notify
{
public:
  static void OnError(uint16_t errorCode)
  {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }

  static void OnPlayFinished(uint16_t globalTrack)
  {
    Serial.println();
    Serial.print("Play finished for #");
    Serial.println(globalTrack);
  }

  static void OnCardOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("Card online ");
    Serial.println(code);     
  }

  static void OnUsbOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk online ");
    Serial.println(code);     
  }

  static void OnCardInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("Card inserted ");
    Serial.println(code); 
  }

  static void OnUsbInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk inserted ");
    Serial.println(code); 
  }

  static void OnCardRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("Card removed ");
    Serial.println(code);  
  }

  static void OnUsbRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk removed ");
    Serial.println(code);  
  }
};
void waitfortouch(unsigned short int *x,unsigned short int *y){
  do
  {    
    delay(10);
    if (ts.dataAvailable() == true)
    {
      ts.read();
      *x = ts.getX();  //Get touch point  
      *y = ts.getY();
      return;
      }
  }while(ts.dataAvailable()==false); 
}
 drawBitmap(0,0, myBitmap,320, 240,ILI9341_WHITE);
 void loop() 
{  
  trcknms();

   waitfortouch(&x,&y); 
   if (buttons[0].contains(x,y)) 
    {    
     mp3.nextTrack();
    
      }
      
   else if (buttons[1].contains(x,y))
    {  
        mp3.prevTrack(); 
    }
     else if (buttons[2].contains(x,y))
    {
       mp3.pause();
    }
     else if (buttons[3].contains(x,y))
    {
        mp3.start();
    } 
    
}
void drawBitmap(int16_t x, int16_t y,
 const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {

  int16_t i, j, byteWidth = (w + 7) / 8;
  uint8_t byte;

  for(j=0; j<h; j++) {
    for(i=0; i<w; i++) {
      if(i & 7) byte <<= 1;
      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);
      if(byte & 0x80) tft.drawPixel(x+i, y+j, color);
    }
  }
}

Viele Grüße

Joel3D

Warum hast Du Teile des Codes 2mal drin?
Auf der Seite, die Du verlinkt hast ist doch der fertige Code.

Du hast den Rest anscheinend nochmal reinkopiert, obwohl er dort nur zur Erklärung einzeln aufgeführt wird.

Du hast die falsche Bibliothek installiert, verwende die unter "Library Used" verlinkte.

Vielen Dank
Habe ich mal ausprobiert.
Hat Leider trotzdem nicht geklappt.

Joel3D

joel3d:
Vielen Dank
Habe ich mal ausprobiert.
Hat Leider trotzdem nicht geklappt.

Joel3D

Geht das genauer ?

Was hast du probiert und was geht nicht.
Wie sollen wir bei solchen Aussagen dir helfen ?

Ich habe probiert die verlinkte library herunterzuladen.
Das hat auch geklappt aber dann habe ich den code wieder kompiliert undes war wieder folgende Fehlermeldung:
no matching function for call to ‘DFMiniMp3<SoftwareSerial, Mp3Notify>::getTotalTrackCount()’
Joel3D

joel3d:
no matching function for call to ‘DFMiniMp3<SoftwareSerial, Mp3Notify>::getTotalTrackCount()’

Funktioniert das Bibliotheksbeispiel PlayMp3.ino, wenn Du es auf SoftwareSerial umstellst?

Da kommt diese Fehlermeldung:
'Serial1' was not declared in this scope

joel3d:
Da kommt diese Fehlermeldung:
'Serial1' was not declared in this scope

Darum sollst Du ja auch auf SoftwareSerial umstellen.

Dann kommt diese Fehlermeldung:
request for member ‘begin’ in ‘dfmp3’, which is of non-class type ‘DfMp3(SoftwareSerial) {aka DFMiniMp3<HardwareSerial, Mp3Notify>(SoftwareSerial)}’

Joel3D

Wenn ich Dir helfen soll, dann mußt Du mir Dein Programm zeigen, denn bei mir funktioniert es.

Also das hier ist der Beispiel code:


Und das hier ist der des Projektes:

Aber vieleicht hängt es auch mit der Bibeliothek zusammen:
faf

Du solltest Texte auch als solche ins Forum stellen und nicht als Bild. Von Libs bitte einen Link.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter oder gehe in der IDE auf Bearbeiten - Für Forum kopieren und füge es hier ein).
Dann ist er auch auf mobilen Geräten besser lesbar.

Gruß Tommy