If Funktion bei delay()

Das wird so auch nichts werden der DF Player nutzt bei Dir die Schnittstelle schon, Das fällt Dir irgendwann auf die Füße

Nachtrag
Was ist bei Dir Serial1 ich denke das ist ein UNO

Gruß Heinz

Das brauchst Du doch nicht das ist Bestandteil der lib. hab ich jetzt erst gesehen

Wie oben beschrieben, sind die Stati Playing und Stopped in Verbindung mit der Funktion player.checkPlayState() von Bedeutung....

Hallo zusammen,

ich denke ich habe es jetzt hinbekommen. Auf dem MEGA (verbunden über RX1 und TX1) scheint es zu funktionieren. Auf dem Nano (wo ich es eigentlich laufen möchte- über RX0 und TX1) geht die Musik mal an mal nicht. Mehr nicht als das es geht.

Dieses Thema mit dem Serial verstehe ich nicht leider. Kann mir jemand einfach erstmal sagen an welche Pins des Nanos ich RX und TX vom MP3 Player ich anschließen soll und wie der Code dann geändert werden muss.

Vielen Dank!

#include <Arduino.h>
#include "DYPlayerArduino.h"

//DY::Player player;
DY::Player player(&Serial);

const byte SoundPin_1 = A1;
const byte SoundPin_2 = A2;

bool SoundPin_1_Status;
bool Playing_1_Status;
bool SoundPin_2_Status;
bool Playing_2_Status;

 typedef enum class PlayState : int8_t
  {
    Fail = -1, // UART Failure, can be a connection or a CRC problem.
    Stopped = 0,
    Playing = 1,
    Paused = 2
  } play_state_t;

void setup() {
  pinMode(SoundPin_1, INPUT_PULLUP);
  pinMode(SoundPin_2, INPUT_PULLUP);
  
  player.begin();
  player.setVolume(30); // 50% Volume}
  Serial.begin(9600);
}

void loop() {
    SoundPin_1_Status = !digitalRead(SoundPin_1);
    SoundPin_2_Status = !digitalRead(SoundPin_2);
    Serial.print(SoundPin_1_Status) & Serial.print(Playing_1_Status) & Serial.print(SoundPin_2_Status) & Serial.println(Playing_2_Status);



    if (SoundPin_1_Status==1 && Playing_1_Status==0) {
      Playing_1_Status = 1;
      player.playSpecified(1);
      player.play();

    }
    if (SoundPin_2_Status==1 && Playing_2_Status==0) {
      Playing_2_Status = 1;
      player.playSpecified(3);
      player.play();
    }
    if (SoundPin_1_Status  == 0 && SoundPin_2_Status  == 0) {
      Playing_1_Status = 0;
      Playing_2_Status = 0;
      player.stop();
    }

    


    //if (SoundPin_1_Status  == 0) {
      //Playing_1_Status = 0;
      //player.stop();
    //}

    //if (SoundPin_1_Status  == 0) {
      //Playing_1_Status = 0;
      //player.stop();
       // }



    delay(20); // Taster entprellen }
}

Normalerwiese sind die Pins vom Nano (auch bei den Clones) doch beschriftet.


Hier mit RX0 (Pin 0) und TX1 (Pin 1) beschriftet. Der Pin RX0 muss mit TX des Players verbunden werden. TX1 mit RX des Players. Zumindest dann, wenn du wie in dem gezeigten Quellcode Hardwareserial verwendest. Mit Softwareserial kann man auch anderes Pins vorgeben. Softwareserial ist aber eine Library, die extra eingebunden werden muss.

Rx und Tx zwischen zwei Geräten müssen immer über Kreuz verbunden werden. Der Sender(TX) von einer Seite, muss mit dem Empfänger(RX) der „anderen“ Seite verbunden sein.

Der Code muss eigentlich gar nicht geändert werden.

Dann habe ich ja alles richtig gemacht und trotzdem will der nicht.

Wie bindet man in den Code ein, dass man den Status des Players sieht: Spielt, stoppt gerade…?
Und wo sieht man es dann? Im SerialMonitor?

Der Unterschied ist, dass der Mega 2 Serielle Schnittstellen hat, der Nano nur eine (und die ist belegt durch die USB Schnittstelle.) Beim Nano brauchst du SoftwareSerial.

Hallo,
aus dem Beispiel deiner lib

#include <Arduino.h>
#include "DYPlayerArduino.h"
#include <SoftwareSerial.h>

// Initialise on software serial port.
SoftwareSerial SoftSerial(10, 11);
DY::Player player(&SoftSerial);

Du kannst beim Nano die standard Serielle nur für den DF Player nutzten nicht gleichzeitig noch für den Monitor der IDE.
Also nimm die standard für die IDE und die Soft fur den DF Player

Die lib SoftwareSerial.h musst Du eventuell noch installieren.

Übrigens , da waren wir in #7 schon mal :wink:

Hallo
den Status des Player kannst Du sicher so abfragen

Serial.print (player.checkPlayState());

Dann bekommst DU die Zahlen ausgegeben

Ansonsten ging es sicher noch mit mit einem Swich case.. Konstrukt

Sorry @ec2021 das war für den T0 gedacht falscher Button gedrückt

Warum beides...? Wenn ich mir ein Beispiel der Library anschaue reicht ein player.playSpecified(Titelnummer); um eine bestimmte Titelnummer abzuspielen.

Ich habe auch mal herumprobiert und muss gestehen, dass ich auf meinem Nano Clone den MP3Player mit dieser "DYPlayerArduino.h" Bibliothek und SoftwareSerial nicht ans funktionieren gebracht habe.

Mit der "DFRobotDFPlayerMini.h" funktioniert das aber einwandfrei. Bei folgendem Beispiel werden zwei Taster, die jew. an A1 und A2 (pinmode INPUT_PULLP) angeschlossen sind abgefragt.
Wird der Taster an A1 gedrückt, wird das erste MP3 File abgespielt, wird der an A2 gedrückt wird das zweite MP3 File abgespielt.

RX/TX sind Pin D4 und D5.

#include "SoftwareSerial.h"
#include "Button_SL.hpp"
#include "DFRobotDFPlayerMini.h"

constexpr uint8_t RX {5};
constexpr uint8_t TX {4};

SoftwareSerial mySoftwareSerial(RX, TX);
DFRobotDFPlayerMini dfrPlayer;

// Zwei Buttons definieren...
Btn::ButtonSL bArray[] {
    {A1, 200}, // Pin, long press ms
    {A2, 200},
};
constexpr uint8_t BUTTON_COUNT {sizeof(bArray) / sizeof(bArray[0])};

void setup() {
  Serial.begin(115200);
  mySoftwareSerial.begin(9600);
  if (!dfrPlayer.begin(mySoftwareSerial)) {
    while (true) {
      Serial.print(".");
      delay(1000);
    }
  }
  dfrPlayer.volume(20);
  Serial.println("Start");

  for (auto &b : bArray) {   // Initialisiere Taster
    b.begin();
    b.releaseOn();   // Release nach long press ms
  }
  delay(4000);   // Warten auf Initialisierung des MP3 players
}

void loop() {
  // wiederhole für jeden Taster
  for (uint8_t i = 0; i < BUTTON_COUNT; i++) {
    if (bArray[i].tick() != Btn::ButtonState::notPressed) {   // wenn ein Taster gedrückt wird
      dfrPlayer.play(++i);
    }
  }
}

Ist im Prinzip das Gleiche wie das hier:

Nur für den Nano statt eines ATTinys

Hallo zusammen,

ja, SoftwareSerial geht mit dem Nano scheinbar nicht. Mit dem MP3-Player funktioniert Wiederrum die "DFRobotDFPlayerMini.h" nicht.
Das klappt auch nicht: Serial.print (player.checkPlayState());

Ich habe es jetzt auf dem Mega nochmal probiert. Ansicht gehts aber die Sounds fangen erst nach etwa 10 Sekunden an zu laufen. Ich habe schon eine kleinere und schnellere Micro-SD-Karte ausprobiert und auch eine kleine/sehr kurze MP3 aber kein Erfolg.

Ich hätte nicht gedacht, dass sowas simples so schwer sein kann. Wenn Ihr keine andere Idee wegen dem Versatz habt, dann muss ich wohl einen anderen MP3 Player kaufen.

PS: Bitte entschuldigt mich. Ich hab erst mit dem Thema Arduino angefangen. Es gibt eine recht gute Videoreihe dafür aber ich bin noch beim ABC (auch wenn mir die Excelkenntnisse hier etwas weiterhelfen). Daher verstehe ich leider nicht jeden Tipp, der hier gutgemeint gegeben wurde.

#include <Arduino.h>
#include <DYPlayerArduino.h>



//DY::Player player;
DY::Player player(&Serial2);


const byte SoundPin_1 = A1;
const byte SoundPin_2 = A2;

bool SoundPin_1_Status;
bool Playing_1_Status;
bool SoundPin_2_Status;
bool Playing_2_Status;


void setup() {
  
  pinMode(SoundPin_1, INPUT_PULLUP);
  pinMode(SoundPin_2, INPUT_PULLUP);
  
  player.begin();
  player.setVolume(30); // 50% Volume}
  Serial.begin(9600);
}

void loop() {
 
    
    SoundPin_1_Status = !digitalRead(SoundPin_1);
    SoundPin_2_Status = !digitalRead(SoundPin_2);
    //Serial.print(SoundPin_1_Status) & Serial.print(Playing_1_Status) & Serial.print(SoundPin_2_Status) & Serial.println(Playing_2_Status);



    if (SoundPin_1_Status==1 && Playing_1_Status==0) {
      Playing_1_Status = 1;
      player.playSpecified(4);
    }
    if (SoundPin_2_Status==1 && Playing_2_Status==0) {
      Playing_2_Status = 1;
      player.playSpecified(5);
    }
    if (SoundPin_1_Status  == 0 && SoundPin_2_Status  == 0) {
      Playing_1_Status = 0;
      Playing_2_Status = 0;
      player.stop();
    }

    


    //if (SoundPin_1_Status  == 0) {
      //Playing_1_Status = 0;
      //player.stop();
    //}

    //if (SoundPin_1_Status  == 0) {
      //Playing_1_Status = 0;
      //player.stop();
       // }



    //delay(20); // Taster entprellen }
}

Was setzt Du denn für einen MP3 Player ein?

Mit diesem funktioniert es jedenfalls problemlos:

Diesen hier: DY-SV5W

PS: Man kann den ja auch ohne Arduino laufen lassen. Da ist vielleicht 0-1 Sekunde Versatz.

Der Vorteil ist, dass man nicht mehr dran/zwischen löten muss im Gegensatz zu dem Mini:

Wie bitte, was?

Schau mal im Video

Ich habe eigentlich keine Lust mir dieses Video durchzukauen, nur weil Du dich kryptisch ausdrückst.

Ich bin fälschlicherweise davon ausgegangen, dass auch das von mir verwendete Modell benutzt wird. Aber jetzt ist mir auch klar , warum die Lib, die du verwendet hast, so heißt wie sie heißt und warum das bei meinem Miniplayer nicht funktioniert hat. Insofern habe ich etwas dazugelernt. Diese Art von MP3 Player kannte ich noch nicht.

Nun ja. Da kann ich leider nicht weiter helfen....

Sorry: Als Laie habe ich es so verstanden:
Der Mini läuft zwar erstmal auch ohne Wiederstände (usw.) zwischen RX oder TX oder an + zu schalten aber langfristig wird es nicht gutgehen.

Sorry, ich kann das nicht beurteilen aber das war für mich Argument genug für den DY-SV5W. Der hier als Outofthebox-Fertig präsentiert wird.

Meines Wissens reicht ein 1K Widerstand zwischen TX vom µC und RX vom MP3 Modul aus.
Was ist das Problem an einem 2Cent Artikel?

Ich hab sogar welche hier aber ich bin sauschlecht in löten...
Mit DY-SV5W konnte ich mir das ersparen (dachte ich ;-))