Stacking Arduinos, determine position in Stack via Serialcommuncation

Hallo Leute!

in einem Projekt würde ich gerne Arduino Nanos stapeln und ihre Position im Stapel erfassen.
So würde das ganze geplant ausschauen:

Die Idee:
Der Arduino Nano Master (immer der gleiche) sendet über die serielle Schnittstelle an den Nano darüber eine 0. Dieser erkennt anhand der 0 dass er wohl der erste im Stapel ist. Anschließend passt er die Settings in seinem Programm entsprechend der 0 an und sendet über den NRF24 zurück an den NanoMaster dass er bereit ist. Anschließend sendet der Nano an Position 1 seine Position an den darüberliegenden - dieser macht dann das gleiche.

Das ganze soll einem Spiel dienen wobei ein Kurs mit Nanos "gesteckt" wird. Hierbei ist wichtig dass der letzte Nano (der oberste im Stack) als erstes plaziert wird. Der Kurs wird von hinten nach vorne aufgebaut.

Kann man das schlauer lösen? vllt mit SPI?

Das kann ich erst sagen, wenn klar ist, was der Zweck/Ziel des Ganzen ist..

Hello
Print some small housing like LEGO using for each stack position.

(i dont want to constraint the user on how to stack them.)
Ich möchte den Benutzer nicht Einschränken wie er zu stapeln hat.

Kannst Du mal erläutern, was Dein Vorhaben ist? Ich werde da nicht schlau draus.

Er möchte die Nanos in beliebiger Reihenfolge auf einen "Master"-Nano stapeln.
Die Nanos sollen Ihre Position automatisch erkennen.

Der Master-Nano sendet in einem festen Intervall eine "0" und der darüberliegende Nano rechnet 0+1. Diese gibt er dann weiter. Wenn jemand lauscht, selbes Konzept, 1+1 zählen und weiterreichen. Lauscht kein weiterer Nano, läuft die "2" ins Nirwana.

Sehe ich nun als nicht sonderlich kompliziert an, die Geschichte.
Rumspielen müsste man nun an dem Intervall/Takt des Master-Nanos. Es kann ja vermutlich sein, dass jederzeit noch ein weiterer Nano aufgesteckt wird.
Aber über Hardware-Serial würde ich mir auch da wenig Gedanken machen, wenn jede Sekunde da ein Integer durchgereicht wird.

1 Like

Vorschlag: ein einfaches binäres Triggersignal, das durchgereicht wird, und eine Antwortleitung zurück. Der Master sendet ein Triggersignal, das jeder Knoten bis zum Ende weiterreicht. Am Ende sitzt ein Terminator der den Ausgang mit dem Eingang (Rückmeldung) verbindet. Wenn die Rückmeldung so beim letzten Knoten ankommt, sendet dieser seine Kennung über Serial an seinen Vorgänger, Der sendet seine Kennung und danach alles, was über sein Serial hereinkommt. Die Richtung der Serial wird also umgekehrt, NRF24 ist nicht notwendig.

Man kann das mit der Rückmeldung noch weiter synchronisieren, z.B. darf jeder Knoten erst senden, wenn sein Nachfolger die Rückmeldung gibt. Ist alles durch und der Master erhält die Rückmeldung, wird der Trigger wieder weggenommen und die Kette bereitet sich für den nächsen Durchlauf vor, falls notwendig.

Willst d die Dinger im laufenden Betrieb verbinden und wieder auseinander nehmen? Und sicherstellen, dass immer erst GND, dann 5V (?), dann die TX->RX Brücke Kontakt hat?

Wenn nicht, reicht es ja, wenn einmal in setup() jeder Nano seine Position ermittelt, eventuell zurückgemeldet bekommt, dass er nicht der letzte ist und/oder eine entsprechende Antwort nach unten weiterleitet.

Wofür die Funkmodule gut sind, wenn du sowieso eine Kabelverbindung hast, sehe ich nicht.

Zum Testen ist sicher ein Zeichenbasiertes Protokoll einfacher als Binär.

Warum? Was erhoffst Du Dir davon?

Ich würde ja einfach eine Nummer auf die Nanos malen, und diese Nummer ins EEPROM eintragen.

Zudem glaube ich nicht, dass die Funke gut funktioniert, wenn da ein Stapel Nanos aufeinander steckt.

Auch sind Nanos von Hause aus eher nicht HotPlug fähig.
Da sind besondere Vorkehrungen zu treffen.