sto scrivendo un programmino che utilizza la scheda Arduino Uno per pilotare una serie di relè.
Per pilotare i relè utilizzo questo codice :
if Prova = 0 then
num$ = "111"
gosub [Porta]
end if
..........
..........
[Porta]
open ComPort$;":9600,8,N,1,N" for random as #seriale
print #seriale, num$
close #seriale
ciò provoca l'eccitazione del relè numero 1.
Come posso rilevare la presenza della scheda Arduino Uno ovvero che la stessa sia effettivamente collegata alla porta seriale (USB) ?.
Questo per evitare il crash del sistema dovuto all'errore generato dalla mancata presenza di Arduino Uno.
Questo per evitare il crash del sistema dovuto all'errore generato dalla mancata presenza di Arduino Uno.
Il codice postato sembra basic (forse VB?), quindi windows?
Io non conosco windows uso solo linux e per me ha funzionato collegarmi con le API di sistema che mi ritornano
vendor ID e product ID, su windows credo si possa fare anche facilmente ma tocca documentarsi come si fa con VB.
nid69ita:
Se vecchio VB6, ma anche il VB.NET lo fa, puoi mettere una "trappola"
Ovvero prima di open seriale
ON ERROR GOTO GestErrore
dopo la open
ON ERROR GOTO 0
Se è il vecchio VB6 (e a me sembra proprio così), ok, + anche corretto, ma se non lo è, in VB.NET quelle righe "goto" mi fanno orrore e ribrezzo... (in VB.NET ci sono le strutture ormai standard "Try..Catch" non si usa più On Error Goto).
Ma confermaci il linguaggio e ambiente.
In ogni caso nid69ita dice giusto, se Arduino non è connesso la porta COM non esiste nel sistema quindi se la "open" ti dà errore significa che non è connesso.
La soluzione ulteriore di uwefed (che è in alternativa al controllo della "open" ma in aggiunta) ti permetterebbe anche di sapere se Arduino è "vivo" e se è proprio "lui" a rispondere. Ma questa cosa è secondaria, prima intercetta l'errore della open, poi eventualmente vedi di scrivere.
PS: sono anni che non faccio cose del genere in VB6, ma ho anche qualche dubbio che una seriale si possa aprire "for random", ma se così già ti funziona, ok!
Federico66:
Con VB6, se non ricordo male, si usava MSCOMM.ocx, e non è quella la sintassi, quindi non è VB6
Hai ragione, l'apertura con quella sintassi è molto più vecchia (forse addirittura DOS!), e confermo, era proprio l'oggetto definito con MSCOMM32.OCX.
Quindi restiamo in attesa di capire dall'OP di cosa stiamo parlando, ma sicuramente essendo così vecchio quel codice è possibile che si debba usare per forza la "ON ERROR GOTO" (bleah!).
Federico66:
ma a parte tutto, non è possibile non indicare se sono mele o pere
Questo thread ha già un tot di risposte basate su ipotesi!
Siete troppo buoni
Eh vabbè, uno magari ci prova ad aiutare. Comunque confermo che secondo me è un codice DOS Basic, per cui per evitare almeno il blocco dovrebbe bastargli un "On Error Resume Next" per ignorare l'eventuale errore, ossia fare:
...
[Porta]
On Error Resume Next
open ComPort$;":9600,8,N,1,N" for random as #seriale
print #seriale, num$
close #seriale
...
poi non sapendo cosa altro faccia quel codice dopo la "close", e/o se debba fare qualcosa di diverso in caso di assenza di Arduino sulla COM, non si può dire di più.
In ogni caso non parliamo di programmazione di Arduino ma di programmazione Basic (per di più preistorico) per cui credo che sia il caso di terminarla qui...
Solo per info:
una seriale è comunque visto come un file/disposiivo COMx. Anche da VB6 puoi aprire la seriale come file con la open (così come faresti da C).
nid69ita:
Solo per info:
una seriale è comunque visto come un file/disposiivo COMx. Anche da VB6 puoi aprire la seriale come file con la open (così come faresti da C).
Si ma poi non hai nessun evento, devi gestire tutto "a manella" come si faceva nell'82..
docdoc:
In ogni caso non parliamo di programmazione di Arduino ma di programmazione Basic (per di più preistorico) per cui credo che sia il caso di terminarla qui...
Ero curioso e ho fatto una ricerca, sembrerebbe sia Just Basic (Liberty BASIC)!!
Vedendo il linguaggio di programmazione, la domanda sembra provenire da 30 anni fa, più che da 2 giorni fa.
Ci sarà stato uno strappo nel continuum spaziotemporale, risponderà al prossimo varco.
Ma se fosse veramente dos...
Voglio l'adattatore usb che sta utilizzando!
Comunque credo che l'unico modo sia appunto "intercettare" la comunicazione seriale
Se fosse windows, verificare se esplora risorse può essere "letto" con qualche API.
La prima è già stata suggerita, mando un comando apposito ad Arduino che risponde. Se non risponde qualcosa non va, potrebbe essere il cavo come l'Arduino bruciato. E' la più semplice.
L'altra è quella usata dall'IDE Arduino con la libreria VID&PID, si scansionano tutti i dispositivi USB attaccati alla ricerca della coppia che identifica l'Arduino. La libreria prima menzionata ricerca anche le coppie usate dai più comuni adattatori USB-Seriale.