Conoscere la porta arduino, o rilevarla

Salve ragazzi,
ho scritto uno sketch in processing che deve comunicare tramite seriale con arduino.
Però questo sketch e arduino non saranno eseguiti dal mio pc, ma anzi da più pc diversi.
Ora la mia domanda è:
dato che in processing devo impostare su quale porta c'è arduino (COM1, COM2, ....), c'è un modo per sapere a priori quale sarà? oppure è possibile far riconoscere la porta ad arduino e comunicarla a processing?

p.s: domanda OT, per comunicare con la porta seriale, arduino non ha bisogno che sia installato l'editor sul pc giusto? cioè processing e arduino possono comunicare se arduino è semplicemente connesso al pc? (ovviamente arduino conterrà lo sketch xD)

Grazie, Salvatore.

Per l' OT, Arduino però necessita del driver su PC per poter essere riconosciuto. L'ide non serve. Io però lo metterei comunque se puoi, tanto è relativamente piccolo. Può sempre tornare utile (ad esempio per debug in loco con Monitor Seriale)

Per la porta COM (quindi stiamo parlando di Windows) mi pare più una questione di S.O.
Ci dovrebbero essere delle API Windows che danno info sulla porta.

Una cosa del genere ma per Arduino?
--> GitHub - arduino/usbSearch: Search for USB devices by VID/PID, gets device serial numbers

Su Windows (almeno XP), tra i vari metodi, viene citato il registro (quello che si visualizza con RegEdit).
Almeno su mio PC, (Windows XP) dove non ho seriali fisiche, quando attacco un Arduino Nano, nel registro appare la seriale.
HKEY_LOCAL_MACHINE->HARDWARE->DEVICEMAP->SERIALCOMM
Qui dentro mi appare:
\Device\VCP0 COM9
Se non ho collegato Arduino Nano, la chiave non esiste neppure.

Oggi pomeriggio proverò con Arduino Uno e poi con il FTDI di Arduino Mini Pro per capire cosa mi inserisce in quell'elenco.

Interessanti @PaoloP.
I 2 exe con la Nano collegata riportano:
usbSearch:

Found VID:8087 PID:0024 serial:5&8ECB065&0&1                 (Hub USB generico)
Found VID:0403 PID:6001 serial:A6028AQL                      (Nano FTDI)
Found VID:8087 PID:0024 serial:5&1DCCD487&0&1                (Hub USB generico)
Found VID:048D PID:1336 serial:00000000000006                (USBStorage)
Found VID:046D PID:C50E serial:6&944C330&0&5                 (Logitech USB Mouse)

listComPorts:

COM9 - FTDI - FTDIBUS\VID_0403+PID_6001+A6028AQLA\0000

La usbSearch non riesco a capire cosa riporta.
Le porte non attualmente occupate ma nascoste, mi risultano:

COM4 - VID:2341 PID:0043 - Arduino Uno 
COM5 - VID:2341 PID:0042 - Arduino Mega 
COM6 - VID:2341 PID:0036 - Arduino Leonardo Bootloader 
COM7 - VID:067B PID:2303 - Prolific Usb 
COM8 - VID:2341 PID:8036 - Arduino Leonardo 
COM9 - VID:0403 PID:6001 - Usb Serial Port      ->   (qui la Nano)

Grazie mille per le informazioni interessanti, ma c'è un modo per farlo con arduino o sfruttare questi programmi per arduino?

Con Processing...
--> Find active serial port from processing - Processing Forum

PaoloP:
Con Processing...
--> Find active serial port from processing - Processing Forum

Ho provato più volte, con arduino collegato e non, con qualche correzione al codice, facendolo io più semplificato; ma nulla.
In processing non mi stampa la lista delle porte :\

Forse hai frainteso. A quel link c'e' codice che cerca un Arduino in cui lo sketch attiva un colloquio con Processing.
Altrimenti se volevi solo l'elenco delle seriali disponibili, basta Serial.list()
Il problema grosso è che se hai più seriali qual'e' quella su cui c'e' Arduino?
Con quel codice @PaoloP suggerisce di provare a colloquiare con Arduino su tutte le seriali disponibili (elenco dato da Serial.list())
Se sul Windows hai solo 1 seriale, allora è facile.

nid69ita:
Forse hai frainteso. A quel link c'e' codice che cerca un Arduino in cui lo sketch attiva un colloquio con Processing.
Altrimenti se volevi solo l'elenco delle seriali disponibili, basta Serial.list()
Il problema grosso è che se hai più seriali qual'e' quella su cui c'e' Arduino?
Con quel codice @PaoloP suggerisce di provare a colloquiare con Arduino su tutte le seriali disponibili (elenco dato da Serial.list())
Se sul Windows hai solo 1 seriale, allora è facile.

Forse mi sono espresso male scusa.
Intendevo dire che quello sketch non mi funziona. Mi da diversi errori, quindi ho provato a farlo da me, provando ogni singolo comando di quello sketch.
MA provando il comando Serial.list() non mi esce alcuna lista, quindi non posso vedere la lista e quindi la seriale con arduino.
Avrei comunque provato lo sketch (dato che non serve la lista, ma che arduino mandi una T sul seriale), ma non mi funziona e con le mie poche conoscenze riguardo all'uso della libreria Seriale in processing, non so come correggerlo/adattarlo.

come non ti esce?
è nella console di processing nella parte nera sotto.

nel setup metti:

println(Serial.list());

esce il il numero (corrispondente al numero della porta) che devi mettere (esempio nella foto) al posto di [1] prima di 9600

in win 8 per sapere quale COM è collegato arduino devi andare in
gestione dispositivi--> porte COM e LPT.
in automatico con processing non ci sono mai riuscito :roll_eyes:

ho scritto questo sketch come esempio

import processing.serial.*;

Serial myPort;
void setup(){

println(Serial.list());

}

void draw()
{
  
}

E nella parte nera non mi esce assolutamente nulla, anche scorrendo sopra o sotto.

ti si apre il quadrato che vedi a dx?

sisi certo

nello sketch puoi inserire la porta direttamente se la conosci
cambia con la porta di arduino anzichè COM9

 myPort = new Serial(this, "COM9", 9600);

salvatore_94:
E nella parte nera non mi esce assolutamente nulla, anche scorrendo sopra o sotto.

Strano.

camperos:
nello sketch puoi inserire la porta direttamente se la conosci

E' proprio quello che non vuole fare.
Lui vorrebbe trovare un metodo in cui, lanciando il software su PC e collegando un Arduino ad un qualunque PC, l'Arduino venga riconosciuto e il software si colleghi con la giusta COM.
Considerando che in TUTTI i software, anche professionali, che ho c'è sempre nelle opzioni la configurazione manuale della seriale la cosa la vedo un po' ostica.

Qualcosa magari può essere fatto, però diventa una soluzione legata ad un singolo sistema operativo.
Ad esempio in WinXP c'e' voce in registro di sistema. Ma su Linux? Su Mac ?
Inoltre si parla di riconoscere USB (dove dietro c'e' Arduino) su Processing, quindi bisognerebbe fare libreria per Processing.

Sui sistemi *nix le periferiche seriali sono periferiche a blocchi e gestite tramite file. Il sistema, quando colleghi l'Arduino alla porta USB, crea un file per poterne gestire l'I/O. Basta verificare che ci sia un file in un determinato percorso, che cambia da Linux a Mac. Ma è comunque fattibile. Ad esempio su Linux è /dev/ttyACMx dove x è un numero, su Max è /dev/tty.usbmodemxxxx

leo72:
Sui sistemi *nix le periferiche seriali sono periferiche a blocchi e gestite tramite file. Il sistema, quando colleghi l'Arduino alla porta USB, crea un file per poterne gestire l'I/O. Basta verificare che ci sia un file in un determinato percorso, che cambia da Linux a Mac. Ma è comunque fattibile. Ad esempio su Linux è /dev/ttyACMx dove x è un numero, su Max è /dev/tty.usbmodemxxxx

Si è una buona idea quella di utilizzare la comunicazione tramite file, ma a me serve una comunicazione in tempo reale.
Utilizzando un file sarrbbe più lenta la comunicazione no? Cioè verrebbe una cosa del genere:
1)arduino crea file
2)arduino apre file
3)arduino scrive su file (un solo nunero per incrementare il contatore)
4)arduino chiude il file
5)processing apre file
6)processing legge file
7)processing chiude file
E così a seguire dal punto 2, o sbaglio? Almeno quando programmavo in C era questo il meccanismo xD.
Mi sembra un po' inutile dato che arduino deve solo comunicare un char o un numero.