Tastersignal kommt zu spät am DFPlayer an

Hallo zusammen,

eine kleine Frage...besser gesagt 2.

Bei folgendem Sketch soll bei Tastendruck ein Sound abgespielt werden und zeitgleich bzw. sehr zeitnah eine LED leuchten.

Nun habe ich das Problem das zuerst die LED leuchtet und dann der Sound kommt.

Wo liegt da der Fehler?

#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>


const int feuer = 4;
const int led = 6;

SoftwareSerial mySerial(10, 11);
DFRobotDFPlayerMini Player;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(9600);
  Player.begin(mySerial);
  Player.EQ(DFPLAYER_EQ_ROCK);
  Player.volume(30);
  delay(10);

  pinMode(feuer, INPUT);
  pinMode(led, OUTPUT);

  Player.play(1);
  delay(100);
  

}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(feuer) == HIGH){
    delay(10);
    Player.play(2);
    delay(10);
    digitalWrite(led, HIGH);
    delay(200);
    digitalWrite(led, LOW);
  }return;

}

Und das zweite Thema.... als ich heute wieder an dem Code arbeiten wollte und mit dem gleichen Kabel, am selben USB-Anschluss, mit dem selben Nano wie gestern....

kommt diese Fehlermeldung... habe schon andere USB ports ausprobiert, sowie andere Boards und auch den Rechner schon neu gestartet......

hab keinen Plan mehr...

avrdude: ser_open(): can't set com-state for "\.\COM8"

avrdude done. Thank you.

Beim Hochladen des Sketches ist ein Fehler aufgetreten

Bin für jeden tip und erklärende Antwort dankbar

Hast den gleichen Port benutzt? Nano R3 Nachbau hat kein festen COM Port wie Original UNO R3

Welche Arduino-IDE benutzt du Version: 1.8.19 oder Version 2.X?

Schaue im Gerätemanager nach welche COM-Port-Nr tatsächlich verwendet wird.
oder
schaue in der Arduino-IDE unter COM-Port nach welche COM-Ports da angezeigt werden.
Die COM-Port nummer kann tatsächlich wechseln wenn man an einen anderen USB-Port einstöpselt oder noch ein weiteres USB-COM-Port gerät schon angeschlossen ist.

Das musste mal noch genauer bescheiben

Die LED geht an
Die LED geht aus
und dann kommt der Sound?

Wie viel Zeit liegt da zwischen LED an und Sound beginnt?
0,2 Sekunden?
0,5 Sekunden?
1 Sekunde?

Bist du sicher, dass in der Sounddatei ab Sekunde 0,0 schon wirklich etwas ertönt?

#StefanL38 habe es mit der Arduino-IDE 2.3.2 und der alten 1.8.19 versucht. Die Ports habe ich gewechselt und auch jedes mal den angeschlossenen Port ausgewählt, USB-Treiber habe ich aktualisiert bzw. waren schon aktuell für CH340.

Die LED geht an und nach 200ms wie in p festgelegt wieder aus, nach 0,5sec kommt der Sound.
Die Sounddatei fängt bei 0,0 an.

sry.... hier auch noch mal ein Sketch der etwas anders geschrieben ist, aber das selbe Ergebnis erzielen sollte....

/*
 Name:        EE-3_Boba_Fett_Blaster.ino
 Created:     24.03.2024 09:47
 Author:      Thorsten Papendorff
 */

#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>


const int feuer = 4;
const int led = 6;

int p = 200;

SoftwareSerial mySerial(10,11);
DFRobotDFPlayerMini Player;



void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(9600);
  Player.begin(mySerial);
  Player.EQ(DFPLAYER_EQ_ROCK);
  Player.volume(30);
  delay(10);

  pinMode(feuer, INPUT);
  pinMode(led, OUTPUT);

  Player.play(1);
  delay(100);
}

void Blaster(){
  digitalWrite(led, HIGH);
  delay(p);
  digitalWrite(led, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(feuer) == HIGH){
    Player.play(2);
    delay(10);
    Blaster();
  }else{

  }


}

Wahrscheinlich ist das das Problem:

Schau mal hier: "AZDelivery" Nano-Board's nicht programmierbar - #5 by wwerner

Hallo wwerner, gestern lief alles Problemlos und heute morgen hatte ich den Fehler OHNE das ich davor etwas gemacht hatte.
Das verstehe ich nicht.
Wie kann über nacht ein Treiber der lief auf einmal nicht mehr laufen ohne das etwas aktualisiert wurde.

Im arduinoforum.de sah der Code noch ganz anders aus. Bei dem Code den Du hier gepostet hast, dürfte nicht mal die LED leuchten. Ich sehe jedenfalls nicht, wo sie angeschaltet wird.

Irgendwie kam mir das Thema doch bekannt vor.
Nun fehlt nur noch das Posting in Mikrocontroller.net, dann ist der Rundumschlag komplett.

Gruß Tommy

das mag sein, da ich verschiedene Codes ausprobiere und bei allen das gleiche Problem auftritt... und nachdem keine Antworten bekomme in anderen Foren versuche ich alles um Hilfe zu bekommen.

image
einmal wird hier die led high und low geschaltet....

image
und einmal hier in der void Blaster

Hallo Tommy56.... ja... nur kommt nirgends hilfe her....und ich steh da wie ein kompletter Idiot, anstatt mal jemand sagt.. pass auf da und da ist der Fehler und jetzt kommt noch dazu der port nicht mehr erkannt wird.....egal welcher

verzeiht.... wollte nicht patzig werden... aber ich brauch hilfe......

Hat es denn irgendwann schon einmal nach Wunsch funktioniert?

Es könnte sein, dass es einfach grundsätzlich 0,5 Sekunden dauert bis der DF-Player sich den Anfang der Datei eingelesen und seinen Puffer so weit gefüllt hat bis unterbrechungsfreies Abspielen möglich ist.

Zum Problem Port wird nicht erkannt:
Es hilft nichts du musst sehr detailliert beschreiben was du machst und was dann jeweils passiert oder nicht passiert.

Stecke den Nano an den Computer an
ertönt das "Neue USB-Gerät erkannt Signal?"
wenn du den Gerätemanager öffnest wird da unter COM-Port LPT etwas angezeigt ?Am besten einen Screenshot posten

Sollst Du ja auch bekommen, aber dann poste den Code der den Fehler hat und nicht verschiedene Varianten von irgendwas.

Ich habe die Vermutung, das du da irgendein "Gerät" baust, Pistole, Panzer was auch immer bei dem auf Tastendruck gleichzeitig die LED an und der Sound abgespielt werden soll.

Dann ist ja nix mit warten auf ein Busy-Signal. Deshalb würde ich mal folgendes ausprobieren:

Ein Testcode der eine LED einschaltet und sofort nach diesem Einschalten deinen Sound abspielt.

Wenn du ein Oszilloskop hast dann den einen Kanal mit der LED und den anderen mit dem Soundausgang verbinden.

Triggern bei steigender Flanke der LED dann kann das Oszilloskop das aufzeichnen anzeigen

evtl geht auch ein Analogeingang am Arduino
LED an
dann millis() speichern

Sound abspielen starten und dann wenn der Analogeingang über einen gewissen Wert geht millis() wieder speichern
dann kann man die Differenz ermitteln

So....jetzt nochmal von vorne.....damit das alles in reihe ist...

/*
 Name:        EE-3_Boba_Fett_Blaster.ino
 Created:     24.03.2024 09:47
 Author:      Thorsten Papendorff
 */

#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>


const int feuer = 4;
const int led = 6;

int p = 200;

SoftwareSerial mySerial(10,11);
DFRobotDFPlayerMini Player;



void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(9600);
  Player.begin(mySerial);
  Player.EQ(DFPLAYER_EQ_ROCK);
  Player.volume(30);
  delay(10);

  pinMode(feuer, INPUT);
  pinMode(led, OUTPUT);

  Player.play(1);
  delay(100);
}

void Blaster(){
  digitalWrite(led, HIGH);
  delay(p);
  digitalWrite(led, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(feuer) == HIGH){
    Player.play(2);
    delay(10);
    Blaster();
  }else{

  }


}

ich benutze jetzt diesen Sketch, der lustigerweise nun auf einen UNO aufgespielt werden konnte, der UNO wurde erkannt..... dann liegt es doch am CH 340 Treiber wahrscheinlich...

https://1drv.ms/v/s!AivAxrgxgIP9gpg8VubJ01r9Va78Vg?e=sZjzjd

der link sollte zu einem Video von gestern führen, da hab ich das ganze mit den NANO getestet.
Mit dem UNO jetzt tritt aber das gleiche Problem auf.

Ich habe folgenden Code ausprobiert (Achtung, die Pinnummern sind anders als bei Dir) und der Taster ist anders geschaltet (LOW Aktiv):

#include <Arduino.h>
#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>

const int led = 5;
const int feuer = 6;

int feuerstatus = 0;
int letzterfeuerstatus = 1;
int p = 2000;

unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 20;
unsigned long haltezeit = 100;

SoftwareSerial mySerial(7,8);
DFRobotDFPlayerMini myMP3;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(9600);
  myMP3.begin(mySerial);
  myMP3.volume(20);

  pinMode(feuer, INPUT_PULLUP);
  pinMode(led, OUTPUT);
  delay(500);
  myMP3.play(1);
}

void Blaster(){
  digitalWrite(led, HIGH);
  delay(p);
  digitalWrite(led, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  feuerstatus = digitalRead(feuer);
  if (feuerstatus != letzterfeuerstatus && millis() - lastDebounceTime > debounceDelay){
    if (feuerstatus == HIGH){
      lastDebounceTime = millis();
      myMP3.play(2);
      //delay(100);
      Blaster();
    }else{

    }
  }
  letzterfeuerstatus = feuerstatus;
}

Der Code funktioniert. Wenn man die Taste drückt und wird ein Soundfile angespielt und zeitgleich leuchtet die LED. Ich habe die Leuchtdauer von 200ms auf 2 Sekunden verlängert.
Wenn ich Deine Aufgabenstellung richtig verstanden habe, ist das doch genau das was Du willst.

Daraus folgt, dass das Problem nicht unbedingt beim Code zu suchen ist.

diese Variante mit millis usw. hatte ich auch ausprobiert und es hat nicht funktioniert..... lass mich das nochmal testen.

hallo.... hab den Sketch abetippt und die Thematik besteht weiter....es leuchtet erst die led bevor dann verzögert der Sound kommt.

Also jetzt kopiere dir die Sounddatei auf den PC und öffne sie mit einem Audioeditor wie Audacity, MP3 direct cut oder OcenAudio
oder
poste mal die Sounddatei als ZIP-Datei hier im Forum
Ich möchte überprüfen ob die wirklich bei 0,0 Sekunden anfängt