ich verfolge euer Forum schon sehr lange und es hat mir in vielen Bereichen auch bereits gut helfen können. Ich erfülle mir gerade einen Herzenswunsch und baue mir aus ausrangierten und originalen Airbus A320 Teilen ein Cockpit. Die Ansteuerung funktioniert über Arduino super. Ich nutze dafür DUEs, MEGAs und LEONARDO ETHs.
Nun habe ich bereits eine ganze Menge dieser Geräte verbaut. Leider heißen die je nach Typ im System auch alle gleich, sie sind schlicht nicht auseinander zu halten. Erschwerend kommt dazu, wenn einer mal ausfällt oder abgesteckt wird und womöglich an einen anderen USB-Port am Hub gesteckt wird, bekommt er einen neuen COM-Port zugewiesen und somit muss ich die Steuerung im Simulator komplett neu einstellen. Das nervt massiv. Das Programm denkt dann nämlich, dass es ein neuer Arduino ist.
Gibt es eine Möglichkeit dem Arduino für das System quasi einen einmaligen Namen zu geben? Zum Beispiel "Arduino Due OverheadPanel" oder zumindest eine feste ID, damit die HardwareID wieder die gleiche ist?
Hierfür habe ich leider noch gar keinen Ansatz gefunden der funktioniert.
Habt vielen Dank und ich wünsche euch allen ein schönes Wochenende!
Was ich machen würde:
a) jeden Sketch mit einer halbewegs sprechenden Serial.print Ausgabe beginnen lassen, damit du weist was du gerade am Serial-Port angesteckt hast
b) Jedem Board im Eeprom eine ID geben und gegebenenfalls auch diese ID am Serial ausgeben
c) Sketche so "standardisiert" wie nur irgendwie möglich zu machen, dass es idealerweise egal ist welchen Controller du etwas flasht und der Controller auf Grund seiner Informationen im EEPROM weis, was er zu tun hat, welche Anzeige, welche Buttons er bedient.
d) ... wens nicht über EEPROM Informationen geht, dann zumindest mit precompiler #defines optionen ein oder ausschalten
Gibt es eine Möglichkeit dem Arduino für das System quasi einen einmaligen Namen zu geben? Zum Beispiel "Arduino Due OverheadPanel" oder zumindest eine feste ID, damit die HardwareID wieder die gleiche ist?
Hierfür habe ich leider noch gar keinen Ansatz gefunden der funktioniert.
In gewisser Weise ist das gar nicht nötig....
Denn die meisten Arduino haben sowas schon, muss man nur nutzen.
Alle(?) Arduinos mit nativem USB haben eine Seriennummer.
z.B. der Leonardo, der UNO und Mega mit dem 16U2
Der ProMini und der Nano leider nicht.
Der Due?
KA, noch nie nach gesucht.
Auf dem Programmingport, ganz sicher, da sitzt ein 16U2
Auf dem Nativen Port, wahrscheinlich auch.
Haben nicht alle Atmel ARM eine Chip ID?
Bei allen diesen Arduinos sieht man die Unique ID im Gerätemanager bei den USB Geräteeigenschaften.
Also kann man das auch per Software beauskunften.
(frage mich aber bitte nicht wie)
Eigentlich erwarte ich von orginalen Arduinos UNO und MEGA, daß jeder am Windows-PC immer wieder seinen COM-PORT bekommt. vom 2 weiß ich es nicht.
Grüße Uwe
MicroBahner:
Aber nur, wenn er auch wieder in den gleichen USB-Anschluß gesteckt wird. An einem anderen Anschluß könnte es ja auch ein 2. UNO/MEGA sein.
USB Enumeration Rules:
PID VID
SerialNummer
Und dann erst HUB Port
Also:
Solange der Arduino eine Serial Nummer mitliefert, ist es egal, wo man ihn einsteckt.
Bei Arduino und kompatiblen mit FTDI232, CH340 usw. da werden die COM Bezeichner gewürfelt, da ist es nicht eindeutig.
Von den, mit USB direkt am Atmel, weiß ich es.
Also von den mit ATMega16u2 und ATMega32U4
Originale UNO, MEGA, Leonardo, Mikro und deren originalgetreuen Klone/Nachbauten.
Für alle SAM/ARM wird das auch zutreffen, aber keine Garantie darauf.
Ich hab's mal probiert. Bei mir funktioniert das nur bei den Boards, die als USB-seriell Wandler einen zweiten, entsprechend prorammierten Microcontroller auf dem Board haben - z.B. einen 16u2 oder auch einen arm wie auf dem Nano Every. Bei allen Boards, bei denen die USB-Schnittstelle nativ auf dem Controller sitzt, auf dem auch der Sketch läuft, funktioniert das nicht ( Leonardo, Micro, pro Micro oder auch der native Port auf dem Due. Ebensowenig z.B. auf den STM-Boards.
Oh, Mist!
Ja, du hast ja so recht.
Es ist wirklich so, das nur die mit 16U2 ihre UNIQUE ID an den Treiber weiter geben. Nicht die mit 32U4
(die ARM jetzt nicht getestet)
Dann bleibt für den TO wohl nur das EEPROM für seine Erkennung
Hallo und vielen Dank für eure Beiträge. Ich werde mich mit EEPROM einmal auseinander setzen. Auf allen Arduinos laufen quasi die gleichen Scripte. Diese stellen Joystick Buttons zur Verfügung die ich dann via Software an die Airbus Panels weitergeben kann.
Es sind halt etliche Panels die aufgrund der zahlreichen Pinbelegung mehrere Dues und Leonardos erfordern. Evtl ist ein anderer Weg ein besserer. Ich prüfe das. Da ich nämlich ständig die Einstellungen neu machen darf, da Windows die Geräte durcheinander würfelt und dann zb ein Button der vorher festgelegt wurde in Windows und normal die Flugsteuerung anspricht nun die Parkbremse löst. Ich hatte die Hoffnung das ich den Geräten eindeutige Namen zuweisen könnte, womit das Programm dann nicht durcheinander kommt.