Arduino Lasertag: Problem mit mp3

Hallo
ich arbeite schon seit längerem an einem funktionierenden Laser tag System und habe jetzt Probleme mit dem Code für die Tonausgabe via DFPlayer.
sobald ich nämlich den Code für den DFPlayer in den Code für das Laser tag System einfüge und hochlade reagiert der Arduino nicht mehr.
Kann mir jemand dabei helfen?
Code vom Laser tag System inkl. DFPlayer Code:

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10,11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

#include <IRremote.h>                      //ir libary
IRsend irsend;                             //ir senden
int RECV_PIN = 2;                          //ir empfänger pin

IRrecv irrecv(RECV_PIN) ;
decode_results results;

const int LEDm = 10;                       //mündungsfeuer

unsigned int Trigger = 4;                // Schalter "Trigger" ist mit Pin 4 verbunden

unsigned int nachladen = 5;              //nachladeknopf
unsigned int buttonState1 = 0;

unsigned int wiederbeleben = 6;              //wiederbeleben
unsigned int buttonState2 = 0;

unsigned int ueberbruecken = 7;              //überbrücken
unsigned int buttonState3 = 0;

unsigned int valTr;                                // Variable für den Pin Zustand
unsigned int buttonState;                        // Variable für den letzten Schalterzustand
unsigned int AMMO = 10;                            // Wie viel ammo habe ich maximal  

unsigned int LIVE = 10;                            // Wie viel leben habe ich maximal  

     #include <Adafruit_SSD1306.h>
     #include <Adafruit_GFX.h>
     #define OLED_RESET     -1                                                     // Reset pin # (or -1 if sharing Arduino reset pin)
     #define SCREEN_WIDTH 128                                                      // OLED display Breite, in pixels
     #define SCREEN_HEIGHT 64                                                      // OLED display Höhe, in pixels
     Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
void setup() 
{
    Serial.begin(115200);
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
  mySoftwareSerial.begin(9600);

  
  Serial.println();
  Serial.println(F("DFPlayer Mini "));
  Serial.println(F("Initializing DFPlayer ..."));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  myDFPlayer.volume(30);  //Set volume value (0~30).
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 
irrecv.enableIRIn();

pinMode(LEDm, OUTPUT);                          //mündungsfeuer auf output
digitalWrite(LEDm, LOW);                        //mündungsfeuer low

    pinMode(nachladen, INPUT_PULLUP);         //nachladeknopf
    pinMode(wiederbeleben, INPUT_PULLUP);     //wiederbeleben
    pinMode(ueberbruecken, INPUT_PULLUP);       //überbrücken
    buttonState2 = digitalRead(wiederbeleben);
    buttonState3 = digitalRead(ueberbruecken);
    
pinMode(Trigger, INPUT_PULLUP);               // Trigger-Pin ist Input  
buttonState = digitalRead(Trigger);           // Anfangszustand lesen


  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);        // I2C address = 0x3C
  delay(10);
  display.clearDisplay(); 
display.setTextSize(2);                                //textgröße 2
display.setTextColor(WHITE);                           //textfarbe weiß

}
//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
void loop() 
{
  display.clearDisplay();                                //display reset
  
if (irrecv.decode(&results)) 
{

if (results.value == 1)
{
digitalWrite (LEDm, HIGH);

delay (100);

digitalWrite (LEDm, LOW);

irrecv.resume();
}                                          
     }
//_____________________________________________________________________________________________________________________________
  
      if (LIVE > 0)
      {                               //ist live größer als 0
  display.setCursor(60, 25);                    //cursor setzen
  display.print(LIVE);                         //was soll angezeigt werden (zahl)
  display.display(); 

  display.setCursor(0, 25);                     //cursor setzen
  display.print("LIVE:");                      //was soll angezeigt werden (name)
  display.display();
    }   
//__________________________________________________________________________________________________________________________
     if (AMMO > 0)
{                               //ist ammo größer als 0
     if (LIVE > 0)
   {
  display.setCursor(60, 0);                    //cursor setzen
  display.print(AMMO);                         //was soll angezeigt werden (zahl)
  display.display(); 

  display.setCursor(0, 0);                     //cursor setzen
  display.print("AMMO:");                      //was soll angezeigt werden (name)
  display.display();
  }
}
//___________________________________________________________________________________________________________________________
  if (AMMO == 0){                             //ist ammo 0
  if (LIVE > 0){ 
  display.setCursor(0, 0);                   //cursor setzen
  display.print("AMMO: out");                       //was soll angezeigt werden (name)
  display.display();
  }
  }
//____________________________________________________________________________________________________________________________
  if (LIVE == 0){                             //ist live 0
   AMMO =0;                                  //ammo wird auf 0 gesetzt
  display.setCursor(0, 40);                   //cursor setzen
  display.print("game over");                       //was soll angezeigt werden (name)
  display.display();
  }
//____________________________________________________________________________________________________________________________

   if (digitalRead(ueberbruecken) == HIGH) {                //ist ueberbruecken high
   LIVE --;                                                 //live -1
    // display.clearDisplay();                                //display reset
}                                     
//_____________________________________________________________________________________________________________________________
   if (digitalRead(wiederbeleben) == HIGH) {       //ist wiederbeleben high
    //delay(1000);                               //wiederbelebungsdauer 1 sekunde
    LIVE =10;                                  //LIVE wird auf 10 gesetzt
   // display.clearDisplay();                                //display reset
   }
//_____________________________________________________________________________________________________________________________
   if (digitalRead(nachladen) == HIGH) {       //ist nachladen high
   if ((LIVE > 0) && (AMMO < 10)){
    
  //display.clearDisplay();  
  display.setTextSize(1);                                //textgröße 1
  display.setCursor(60, 16);                   //cursor setzen
  display.print("Reload...");                       //was soll angezeigt werden (name)
  display.display();
  delay(1000);                               //nachladedauer 1 sekunde
  display.setTextSize(2);                                //textgröße 2
//  display.clearDisplay();  

    AMMO =10;                                  //ammo wird auf 10 gesetzt
 // display.clearDisplay();  
   }
   }
   //__________________________________________________---------------------------------------________________________________________________________________________
valTr = digitalRead(Trigger);                            // Eingabewert lesen und in val speichern  
if (valTr != buttonState){                               // Der Zustand des Schalters hat sich verändert
if (valTr == LOW){                                       // Ist der Schalter gedrückt?

 if (AMMO > 0){//&& (AMMO < 10)){                            //ist ammo größer als 0 und ist ammo kleiner als 10
 //if ((LIVE > 0)&& (LIVE < 10)){ 

  for (int i = 0; i < 1; i++) {
    irsend.sendRC5(01, 12);                               //irsend ...   
    delay(40); }   
    
AMMO --;                                                 // - ammo 
 //display.clearDisplay();                                //display reset

 //if ((AMMO > 0)&& (AMMO < 10)){                            //ist ammo größer als 0 und ist ammo kleiner als 10
 //if ((LIVE > 0)&& (LIVE < 10)){ 

 digitalWrite(LEDm, HIGH);                               //mündungsfeuer an
 delay(50);                                              //warte
 digitalWrite(LEDm, LOW);                                //mündungsfeuer aus  

Serial.print("es wurden ");                         
Serial.print(AMMO);                                   //serial    wie viel ammo wurde verscossen (zahl)
Serial.println(" verschossen ");
                                                                                           
  if (AMMO == 0){                                       //ist ammo 0
  Serial.print("ammo out   ");                          //serial   ammo out
    //}
   }
  }                        
 }
} 
buttonState = valTr;    // Den Zustand merken

if (AMMO > 10){                                   //ist ammo größer als 10  
    AMMO =0;}                                     //setze ammo auf null (debuging)

if (LIVE > 10){                                   //ist live größer als 10  
    LIVE =0;}                                     //setze live auf null (debuging)
    
}

DFPlayer Code:

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10,11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println();
  Serial.println(F("DFPlayer Mini "));
  Serial.println(F("Initializing DFPlayer ..."));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  myDFPlayer.volume(10);  //Set volume value (0~30).
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);

}

void loop () {  
        
 
 myDFPlayer.play(3);//play 0001.mp3
 delay (1000); //10 sec, time delay to allow 0001.mp3 to finish playing
 

  
}

Aufbau:

ich hoffe jemand kann mir dabei helfen
LG Tom

Das einfache zusammenkopieren von Codes funktioniert nicht. Da muss man sich schon Gedanken machen.

Was passt denn hier nicht zusammen?

Muss ich Dich erst noch mit der Nase drauf stossen?
Welche Pins benutzt Du denn für den Player und warum schliesst Du da an einem ne LED an?

Du musst doch zum Start ne Meldung auf dem Seriellen Monitor bekommen... Die lautet wie?

Jetzt funktioniert nur void setup aber sonst nichts.

Aktueller code:

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10,11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

#include <IRremote.h>                      //ir libary
IRsend irsend;                             //ir senden
int RECV_PIN = 2;                          //ir empfänger pin

IRrecv irrecv(RECV_PIN) ;
decode_results results;

const int LEDm = 13;                       //mündungsfeuer

unsigned int Trigger = 4;                // Schalter "Trigger" ist mit Pin 4 verbunden

unsigned int nachladen = 5;              //nachladeknopf
unsigned int buttonState1 = 0;

unsigned int wiederbeleben = 6;              //wiederbeleben
unsigned int buttonState2 = 0;

unsigned int ueberbruecken = 7;              //überbrücken
unsigned int buttonState3 = 0;

unsigned int valTr;                                // Variable für den Pin Zustand
unsigned int buttonState;                        // Variable für den letzten Schalterzustand
unsigned int AMMO = 10;                            // Wie viel ammo habe ich maximal  

unsigned int LIVE = 10;                            // Wie viel leben habe ich maximal  

     #include <Adafruit_SSD1306.h>
     #include <Adafruit_GFX.h>
     #define OLED_RESET     -1                                                     // Reset pin # (or -1 if sharing Arduino reset pin)
     #define SCREEN_WIDTH 128                                                      // OLED display Breite, in pixels
     #define SCREEN_HEIGHT 64                                                      // OLED display Höhe, in pixels
     Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
void setup() 
{
    Serial.begin(115200);
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
  mySoftwareSerial.begin(9600);

  
  Serial.println();
  Serial.println(F("DFPlayer Mini "));
  Serial.println(F("Initializing DFPlayer ..."));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  myDFPlayer.volume(30);  //Set volume value (0~30).
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 
irrecv.enableIRIn();

pinMode(LEDm, OUTPUT);                          //mündungsfeuer auf output
digitalWrite(LEDm, LOW);                        //mündungsfeuer low

    pinMode(nachladen, INPUT_PULLUP);         //nachladeknopf
    pinMode(wiederbeleben, INPUT_PULLUP);     //wiederbeleben
    pinMode(ueberbruecken, INPUT_PULLUP);       //überbrücken
    buttonState2 = digitalRead(wiederbeleben);
    buttonState3 = digitalRead(ueberbruecken);
    
pinMode(Trigger, INPUT_PULLUP);               // Trigger-Pin ist Input  
buttonState = digitalRead(Trigger);           // Anfangszustand lesen


  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);        // I2C address = 0x3C
  delay(10);
  display.clearDisplay(); 
display.setTextSize(2);                                //textgröße 2
display.setTextColor(WHITE);                           //textfarbe weiß

}
//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
void loop() 
{
  display.clearDisplay();                                //display reset
  
if (irrecv.decode(&results)) 
{

if (results.value == 1)
{
digitalWrite (LEDm, HIGH);

delay (100);

digitalWrite (LEDm, LOW);

irrecv.resume();
}                                          
     }
//_____________________________________________________________________________________________________________________________
  
      if (LIVE > 0)
      {                               //ist live größer als 0
  display.setCursor(60, 25);                    //cursor setzen
  display.print(LIVE);                         //was soll angezeigt werden (zahl)
  display.display(); 

  display.setCursor(0, 25);                     //cursor setzen
  display.print("LIVE:");                      //was soll angezeigt werden (name)
  display.display();
    }   
//__________________________________________________________________________________________________________________________
     if (AMMO > 0)
{                               //ist ammo größer als 0
     if (LIVE > 0)
   {
  display.setCursor(60, 0);                    //cursor setzen
  display.print(AMMO);                         //was soll angezeigt werden (zahl)
  display.display(); 

  display.setCursor(0, 0);                     //cursor setzen
  display.print("AMMO:");                      //was soll angezeigt werden (name)
  display.display();
  }
}
//___________________________________________________________________________________________________________________________
  if (AMMO == 0){                             //ist ammo 0
  if (LIVE > 0){ 
  display.setCursor(0, 0);                   //cursor setzen
  display.print("AMMO: out");                       //was soll angezeigt werden (name)
  display.display();
  }
  }
//____________________________________________________________________________________________________________________________
  if (LIVE == 0){                             //ist live 0
   AMMO =0;                                  //ammo wird auf 0 gesetzt
  display.setCursor(0, 40);                   //cursor setzen
  display.print("game over");                       //was soll angezeigt werden (name)
  display.display();
  }
//____________________________________________________________________________________________________________________________

   if (digitalRead(ueberbruecken) == HIGH) {                //ist ueberbruecken high
   LIVE --;                                                 //live -1
    // display.clearDisplay();                                //display reset
}                                     
//_____________________________________________________________________________________________________________________________
   if (digitalRead(wiederbeleben) == HIGH) {       //ist wiederbeleben high
    //delay(1000);                               //wiederbelebungsdauer 1 sekunde
    LIVE =10;                                  //LIVE wird auf 10 gesetzt
   // display.clearDisplay();                                //display reset
   }
//_____________________________________________________________________________________________________________________________
   if (digitalRead(nachladen) == HIGH) {       //ist nachladen high
   if ((LIVE > 0) && (AMMO < 10)){
    
  //display.clearDisplay();  
  display.setTextSize(1);                                //textgröße 1
  display.setCursor(60, 16);                   //cursor setzen
  display.print("Reload...");                       //was soll angezeigt werden (name)
  display.display();
  delay(1000);                               //nachladedauer 1 sekunde
  display.setTextSize(2);                                //textgröße 2
//  display.clearDisplay();  

    AMMO =10;                                  //ammo wird auf 10 gesetzt
 // display.clearDisplay();  
   }
   }
   //__________________________________________________---------------------------------------________________________________________________________________________
valTr = digitalRead(Trigger);                            // Eingabewert lesen und in val speichern  
if (valTr != buttonState){                               // Der Zustand des Schalters hat sich verändert
if (valTr == LOW){                                       // Ist der Schalter gedrückt?

 if (AMMO > 0){//&& (AMMO < 10)){                            //ist ammo größer als 0 und ist ammo kleiner als 10
 //if ((LIVE > 0)&& (LIVE < 10)){ 

  for (int i = 0; i < 1; i++) {
    irsend.sendRC5(01, 12);                               //irsend ...   
    delay(40); }   
    
AMMO --;                                                 // - ammo 
 //display.clearDisplay();                                //display reset

 //if ((AMMO > 0)&& (AMMO < 10)){                            //ist ammo größer als 0 und ist ammo kleiner als 10
 //if ((LIVE > 0)&& (LIVE < 10)){ 

 digitalWrite(LEDm, HIGH);                               //mündungsfeuer an
 delay(50);                                              //warte
 digitalWrite(LEDm, LOW);                                //mündungsfeuer aus  

Serial.print("es wurden ");                         
Serial.print(AMMO);                                   //serial    wie viel ammo wurde verscossen (zahl)
Serial.println(" verschossen ");
                                                                                           
  if (AMMO == 0){                                       //ist ammo 0
  Serial.print("ammo out   ");                          //serial   ammo out
    //}
   }
  }                        
 }
} 
buttonState = valTr;    // Den Zustand merken

if (AMMO > 10){                                   //ist ammo größer als 10  
    AMMO =0;}                                     //setze ammo auf null (debuging)

if (LIVE > 10){                                   //ist live größer als 10  
    LIVE =0;}                                     //setze live auf null (debuging)
    
}

Na sieht ja schon mal nicht schlecht aus.
Was erwartest Du jetzt?
Es gibt ja nirgendwo einen Eintrag, das da was abgespielt werden soll, auch gibt es sonst keine weiteren Ausgaben für den Seriellen Monitor, ausser wenn da auf der IR-Strecke was passiert.

mit dem Ton noch Garnichts aber der Bildschirm sollte etwas anzeigen und ich sollte ir Signale senden und empfangen können, Tut der Arduino aber nicht.

Wird heute nix mehr. Wenn Du die DF-Playerkonfiguration im setup() komplett auskommentierst, dann geht die Anzeige wieder?

exakt

ok. dann muss ich mal schauen, ob mir was einfllt, ich nehms mit, aber habe nix zum testen und muss mich ggfls. auch in den libs belesen, was da schief geht - und die adafruit ist da nicht gerade freundlich, da über viele verteilt...

Mal sehen; jetzt gehts offline....

Hallo @torion7,

ersetze in Deinem Code mal den Anteil

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);        // I2C address = 0x3C
  delay(10);

durch

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println(F("SSD1306 begin() fehlgeschlagen"));
    for (;;); // Stop
  }

Ich habe einmal versucht, den Aufbau in dem Online-Simulator Wokwi nachzubilden; dort schlägt das .begin() des Displays sofort fehl, wenn man zuvor den Empfängeranteil

IRrecv irrecv(RECV_PIN) ;

deklariert. Ein Kompatibilitätsproblem (leider ohne Lösung) wurde hier gepostet:

https://forum.arduino.cc/t/irremote-and-oled-screen-issue/981716

Bevor @my_xy_projekt weiter sucht, wäre es wichtig zu wissen, ob der Sketch gesichert ohne den DFPlayer funktioniert ...

P.S.: Schöne Grüße an @my_xy_projekt!

hehe! Alte Bekannte!
:grinning:

Mein Ansatz wäre auch gewesen, das irgendwie gegenseitig zu tauschen.
Ich war nur noch nicht ganz fertig.

void setup()
{
  Serial.begin(115200);
  mySoftwareSerial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);        // I2C address = 0x3C
  delay(10);
  display.clearDisplay();
  display.setTextSize(2);                                //textgröße 2
  display.setTextColor(WHITE);                           //textfarbe weiß
  Serial.println();
  Serial.println(F("DFPlayer Mini "));
  Serial.println(F("Initializing DFPlayer ..."));
  if (!myDFPlayer.begin(mySoftwareSerial))    //Use softwareSerial to communicate with mp3.
  {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true);
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  myDFPlayer.volume(30);  //Set volume value (0~30).
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
  irrecv.enableIRIn();
  pinMode(LEDm, OUTPUT);                          //mündungsfeuer auf output
  digitalWrite(LEDm, LOW);                        //mündungsfeuer low
  pinMode(nachladen, INPUT_PULLUP);         //nachladeknopf
  pinMode(wiederbeleben, INPUT_PULLUP);     //wiederbeleben
  pinMode(ueberbruecken, INPUT_PULLUP);       //überbrücken
//  buttonState2 = digitalRead(wiederbeleben);
//  buttonState3 = digitalRead(ueberbruecken);
  pinMode(Trigger, INPUT_PULLUP);               // Trigger-Pin ist Input
  buttonState = digitalRead(Trigger);           // Anfangszustand lesen
  Serial.println(F("Ende Setup"));
}

Ansonsten ist das leider nur stochern im Nebel...

Nachtrag: Kann man die Adafruit dingens tauschen und ggfls. die u8g2 oder so verwenden?

Hello, I'm the Original author of:

I solved my issue by using a different OLED screen library. There are multiple available and sadly the only solution to my issue was trying each of them one-by-one.

I never found out the cause of my issue but I believe it was a memory issue caused by my iRRemote library overwriting the data needed for the OLED screen.

Sorry for the lack of a comprehensive solution (and a non-german reply lol).

Best of luck to you!

Nimm mal noch die if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) -Bedingung mit auf, falls es da schon hakt.

Ich habe mal bei Wokwi alles auskommentiert, was mit dem DFPlayer und IRremote zu tun hat:

  • Der Sketch landet in der loop().
  • Sobald ich auch nur das include von IRremote.h wieder entkommentiere und compiliere, schlägt das begin() des Displays fehl.

;( Ich hab nix an Technik... Ich mach das alles blind. Aber da kam gerade ja noch nen Beitrag... Ich denke, das die lib für den Display alles durcheinander haut. Nu weiss ich nicht, ob man da evtl. mit einer älteren Version noch testen könnte, aber bis auf u8g2 fällt mir sonst auch nichts anderes ein....

Also Stefan Frings hat auch noch eine

* Driver for OLED displays with SSD1306 or SH1106 controller.
 * Supported display sizes: 96x16, 128x32 and 128x64 pixels.

Bin der Meinung das es noch eine gibt, nur leider aus meinen Libs ist die weg :roll_eyes:

Habe es zufällig auch gerade mit U8glib.h getestet, das scheint zu laufen ...

Dann mal zeigen - ich bau das dann zusammen und dann ist Schluß hier :wink:

Thanks for your post! I am going for U8g2 lib and give it a try ...