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)
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.
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)
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
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.