Hallo,
ich erhoffe mir etwas Hilfe (ArduinoUno). Das Ziel ist (wenn auch noch in der Ferne) eine Art Musikinstrument (samplebasiert) zu bauen. Im Moment muss ich noch testen, um zu verstehen und alles Nötige zu lernen.
Ich möchte einen SDCard-DFPlayermini verwenden, später dann mehrere, weil die Klänge ja überlappen, bzw. gleichzeitig tönen sollen. Das Ganze soll dann mit einem Nano umgesetzt werden.
Den einzelnen DFPLayermini habe ich auch schon prima zum Laufen bekommen. Ansteuerung per TX und SoftwareSerial-Library. 3 Buttons für 3 verschieden Klänge.
Doch bei der Erstellung der 2. Instanz funktioniert es nicht mehr.
Daher nun meine Fragen:
- Kann man zwei oder mehr Instanzen der SoftwareSerial beim ArduinoUno verwenden. Geht das mit der "normalen" SerialSoftware-Library? Barucht man eine andere Library?
Es gibt halt widersprüchliche Statements dazu im Forum. Manche sagen, es geht nicht, da immer nur ein RX "abgehört" werden könne. Allerdings muss ich nichts vom DFPlayer am Arduino empfangen, ich will ja nur Steuerbefehle zum Abspielen der jeweiligen Klänge senden. (Ich hole mir die "Busy-Info" über einen extra buy-Pin am Player (High wenn er bereit ist / Low wenn er gerade spielt).
Daher rührt meine 2. Frage:
- Kann ich auf die RX-Empfangskanäle am Arduino verzichten, um Pins zu sparen. Bzw. kann ich den jeweiligen RX-Kanal deaktivieren? Behebt das das Problem aus Frage 1?
Vielen Dank schon mal im Voraus. 
Zu 1.
Du kannst mehrere Instanzen mit der SoftwareSerial Library nutzen.
Du kannst auch mehrere DFPlayer damit ansteueren.
Das hat erst mal nichts mit dem abhören des RX zu tun.
Abhören geht auch nur, wenn du das im Sketch ausführst, für jeden Kanal separat.
Die stören sich nicht gegenseitig.
Ob du deine DFPlayer nur mit TX ansteuern kannst, hängt von deiner Library für den DFPlayer ab, die kennen wir nicht.
OK, vielen Dank! 
Die DFPlayer Lib ist DFRobotDFPlayerMini.
Aber noch hab ich genug Pins frei. Denn ich weiß jetzt noch nicht, wie genau ich herausfinden kann, ob die Library ermöglicht, auf RX (am Ardu) zu verzichten.
Aber wenns nicht zu viel Mühe macht, würde ich mich auch hier über einen Tipp freuen. 
Beste Grüße, Bertram
Wie ich beim kurzen Überfliegen der Lib gesehen habe, bekommt der Arduino von Player Rückmeldungen, die die Lib auch auswertet. Die Verbindung wird also RX benötigen.
In wieweit es sinnvoll ist, den Empfang zu unterbinden, weiß ich nicht.
Gruß Tommy
Danke!
Na, dann werde ich die RX-Verbindung wohl zunächst immer einbinden und mich den anderen Baustellen widmen.
Und hier kommt gleich der erste Stolperstein:
ich hab die SoftwareSerial definiert in folgendem Code (nur der Vollständigkeit halber, es geht nur um die letzten 3 Zeilen:
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
const int busyPlayer1 = 6;
const int Butt1Pin = 17; // the number of the pushbutton pin = Pin A3
const int Butt2Pin = 18; // = Pin A4
const int Butt3Pin = 19; // = Pin A5
int busyPlayer1State = 0;
int Butt1State = 0;
int Butt2State = 0;
int Butt3State = 0;
int Butt1Block = 0; // zum "entprellen" (0 = aktiv; 1 = blockiert)
int Butt2Block = 0;
int Butt3Block = 0;
SoftwareSerial bqSoftSer1(8, 9); // RX, TX
SoftwareSerial bqSoftSer2(10, 11);
DFRobotDFPlayerMini bqDFPlayer1;
DFRobotDFPlayerMini bqDFPlayer2;
void setup()
{
bqSoftSer1.begin(9600);
// bqSoftSer2.begin(9600);
Serial.begin(115200);
... usw. }
Alles funktioniert. Aber sobald ich die Kommentarzeile (// bqSoftSer2.begin(9600)
zur Programmzeile umwandle, geht nix mehr.
Ich hab schon probiert im void loop die bqSoftSer1 zu starten (mit entsprechendem .end() am Schluss der void loop. Funktioniert aber nicht.
Ich blicke es nicht. Beide Softserial-Instanzen im setup starten? Aber wie?
================================================
NACHTRAG:
ich hab die Reihenfolge gedreht:
void setup()
{
bqSoftSer2.begin(9600);
bqSoftSer1.begin(9600);
... nun geht es erstmal weiter an der Stelle. Wenn ich das aber grundsätzlich falsch anstelle, so wäre mir eine Belehrung lieb! 
Probiere mal die AltSoftSerial.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.
Gruß Tommy
The library has the following known limitations:
If using multiple software serial ports, only one can receive data at a time.
wenn nun Tommy schreibt
Wie ich beim kurzen Überfliegen der Lib gesehen habe, bekommt der Arduino von Player Rückmeldungen, die die Lib auch auswertet.
Dann kann sich da schon etwas spiesen.
Wenn die AltSoftSerial auch nicht klappt (lesen welche Beschränkungen diese hat!!!) - dann würde ich umsteigen auf einen Mega (evtl. in kleinerer Bauform) der ja mehrere HW-Serial hat.
edit: etwas Lesestoff:
https://forum.arduino.cc/index.php?topic=599826.0
https://forum.arduino.cc/index.php?topic=510956.0
Hi
Die AltSerial kann nicht an zwei Ecken gleichzeitig HÖHREN, ob Da eine Nachricht rein kommt.
Sendend wird Sie Das durchaus können.
Liegt dann auch daran, daß für das Höhren ein Interrupt benötigt wird und Dieser dann wohl schon für die erste Instanz der AltSerial benutzt wird.
Irgendwo las ich, daß man zwischen mehreren Instanzen umschalten kann, also Die wählen kann, Die nun zuhört.
Wenn von dem DF-Player nur was kommt, wenn man mit Dem schwätzt, wäre Das doch ein möglicher Weg.
MfG
Wenn ich Dich richtig verstanden habe, willst Du 3 Player ansteuern. Da würde ich auch eher zum MEGA 2560 raten. Serial zum Programmieren und Debuggen, Serial1, Serial2 und eine Softwareemulation für die 3 Player.
Auf ein UNO/Nano bekommst Die 2 Softwareemulationen zum Laufen (SoftwasreSerial und AltSoftSerial kannst Du nebeneinander betreiben, schreibt Paul Stoffregen).
Du kannst natürlich auch 2 UNO/Nano über I2C koppeln und damit 3-4 Player treiben. Du hast dann immer noch Serial zum Programmieren und Debuggen frei.
Gruß Tommy
Ja, Danke nochmal, aber:
der Code im Link 1 funktioniert bei mir nicht (auch nicht mit der seltsamen Baud-Rate 9700 für den zweiten Softserial)
Der Fehlercode lautet:
DFRobot DFPlayer Demo
Initializing DFPlayer ... (May take 3~5 seconds)
Player2 online.
Player1 Unable to begin:
1.Please recheck the connection!
2.Please insert the SD card!
Wenn ich nun den Tipp von Tommy56 aufgreife und AltSoftSerial verwende (hab sie in der Bibo schon installiert), würde ich gern noch wissen, wo ich die Befehle finde (zB um play dies/ play das oder zwischen den Instanzen umzuschalten (um das "Hören" zu meistern) ...
Wegen der Hardware-Alternative Mega, ginge auch der Pro (kleine Bauform)?
Ja, der pro tut es auch, z.B. dieser hier.
Hi
Vll. sollte der Kram erst Mal funktionieren, bevor wir uns Gedanken über das Verkleinern machen, oder?
Die Kommunikation ist mit AltSerial nicht anders, als mit SoftSerial, Serial oder Serial1 - also: Wie meinen?
Hoffe doch, daß Du zumindest bereits mit dem Ding 'schwätzen' kannst - also zumindest, bevor wir uns um die Platzverhältnisse kümmern - nicht, daß wir irgendwann die Technik in den Griff bekommen, aber der Arduino eh zu groß ist ... Das wäre dann doch eher blöd ...
MfG
postmaster-ino:
Hi
Vll. sollte der Kram erst Mal funktionieren, bevor wir uns Gedanken über das Verkleinern machen, oder?
….
Das ist eine sehr gute Idee.
Ich vermute ja, das Problem liegt in der Library zum DFPlayer und nicht an der SoftwareSerial.
Die habe ich schon in 2Instanzen laufen und das problemlos.
Mit der Lib zum DFPlayer habe ich noch keine 2 Instanzen aufgebaut.
Und bei der AltSoftSerial kann ich mich erinnern, da gehen keine 2 Instanzen, da hier die Pins festgelegt sind.
Somit erst mal untersuchen, ob die DFPlayer-Lib mit mehr Instanzen läuft.
Das könnte man am Besten mit einem MEGA testen, weil da die SoftSerial als Fehlerquelle weg fallen.
Gruß Tommy
Tommy56:
Das könnte man am Besten mit einem MEGA testen, weil da die SoftSerial als Fehlerquelle weg fallen.
Gruß Tommy
Wenn der TO diese zusätzlichen Ausgaben tätigen möchte. 
Macht aber Sinn, den kann man später immer noch für andere Projekte nutzen.
Hallo
Zitat von postmaster-ino:
Vll. sollte der Kram erst Mal funktionieren, bevor wir uns Gedanken über das Verkleinern machen, oder?
Ja sicher, ich bin ja auch eher am ausprobieren, wie es geht...
Die Kommunikation ist mit AltSerial nicht anders, als mit SoftSerial, Serial oder Serial1 - also: Wie meinen?
das wollte ich wissen: ich kann also die AltSoftSerial genauso ansprechen, wie SftwareSerial und die "normalen" DFPlayer-Lib Befehle nehmen...
Da es mit einem DFPlayer alles spielt und auf Tastendruck die richtigen Dateien abspielt, vermute ich, dass das "schwätzen" mit dem Player klappt... es geht halt nur um das parallele Betreiben weiterer Player (müssen nur die Sounds spielen, wenn der erste Player busy ist, übernimmt der 2. Player die Aufgabe, wenn der 2. Player busy ist, soll der nächste den Ton spielen oder der 1. Player, wenn er wieder "frei" ist usw. Auf allen SD-Cards sin die gleichen MP3-Files drauf.
Wie auch immer, nochmal vielen Dank an alle, die hier Tipps geben, das ist echt Klasse, so viel Input zu bekommen. Den gilt es nun erstmal zu sortieren und auszuprobieren.
Ich probier jetzt
- AltSOftSerial und SoftwareSerial parallel zu verwenden
- probier ich mal mit 3 Nanos (hatte mal ein paar gekauft, gabs im 5er Pack

Aber, ich denke, dass ich I2C gar nicht brauche, oder? Ich muss doch an den 2. Nano nur ein High an einen Pin senden, worauf der dann "seinem" Player sagt: spiele dies, wenn das High auf einem andern Pin kommt: spiele jenes.. usw... Wenn der Player "besetzt" ist, geht der Befehl wieder über Pin und High an den nächsten Nano...
Wenn die verschiedenen SoftSerial-Libs parallel laufen sollten, brauche ich weniger nanos...
naja, ist sicher nicht elegant, aber mal sehen, wohin das führt (ich brauche für das Projekt nur maximal 8 Sounds)
Gruß an alle
art_U_dino:
naja, ist sicher nicht elegant, aber mal sehen, wohin das führt (ich brauche für das Projekt nur maximal 8 Sounds)
dann würde ich ein Modul suchen, das sich mit einem Tastendruck starten lässt und einfach je einen Player über einen PIN ansteuern.
art_U_dino:
Ich muss doch an den 2. Nano nur ein High an einen Pin senden, worauf der dann "seinem" Player sagt: spiele dies, wenn das High auf einem andern Pin kommt: spiele jenes.. usw... Wenn der Player "besetzt" ist, geht der Befehl wieder über Pin und High an den nächsten Nano...
Da musst Du aber die Leitungen vom 3. zum 1. Nano mit den Tastereingängen am 1. Nano ODER-verknüpfen.
Gruß Tommy
art_U_dino:
....
das wollte ich wissen: ich kann also die AltSoftSerial genauso ansprechen, wie SftwareSerial und die "normalen" DFPlayer-Lib Befehle nehmen...
Da es mit einem DFPlayer alles spielt und auf Tastendruck die richtigen Dateien abspielt, vermute ich, dass das "schwätzen" mit dem Player klappt... es geht halt nur um das parallele Betreiben weiterer Player (müssen nur die Sounds spielen, wenn der erste Player busy ist, übernimmt der 2. Player die Aufgabe, wenn der 2. Player busy ist, soll der nächste den Ton spielen oder der 1. Player, wenn er wieder "frei" ist usw. Auf allen SD-Cards sin die gleichen MP3-Files drauf.
....
Und damit das alles funktioniert, brauchst du zwingend auch eine Rückmeldung, also die zweite Leitung der seriellen des DFPlayers.
Und nochmal, beim AltSoftSerial sind die Pins festgelegt (glaube das ist D11 und D12), damit kannst du nur eine Instanz nutzen.
Bei UNO/Nano D8 und D9.
Man kann sie aber neben der SoftwareSerial betreiben.
Gruß Tommy