Rilevamento della presenza di Arduino Uno

Salve a tutti,

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.

Vi ringrazio vivamente!

mandi una stringa sulla quale Arduino deve rispondere. Se non hai risposta non c'é.

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.

Ciao.

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

Avrai quindi un salto a riga GestErrore:

Se altro basic... senza info che possiamo dire ?

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... :wink: (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! :slight_smile:

docdoc:
Se è il vecchio VB6 (e a me sembra proprio così) ...

Con VB6, se non ricordo male, si usava MSCOMM.ocx, e non è quella la sintassi, quindi non è VB6 e sicuramente non è Net!!!

Per il resto condivido la soluzione.

Federico

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

docdoc:
Quindi restiamo in attesa di capire dall'OP di cosa stiamo parlando...

ma a parte tutto, non è possibile non indicare se sono mele o pere :slight_smile:
Questo thread ha già un tot di risposte basate su ipotesi!
Siete troppo buoni :slight_smile:

F

Federico66:
ma a parte tutto, non è possibile non indicare se sono mele o pere :slight_smile:
Questo thread ha già un tot di risposte basate su ipotesi!
Siete troppo buoni :slight_smile:

Eh vabbè, uno magari ci prova ad aiutare. :wink: 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... :slight_smile:

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:
... Anche da VB6 puoi aprire la seriale come file con la open ...

Grazie, non sapevo (ricordavo) :slight_smile:

Federico

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.. :wink:

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... :slight_smile:

Ero curioso e ho fatto una ricerca, sembrerebbe sia Just Basic (Liberty BASIC)!!

F

Ma aspettare che l'OP risponda no ? ? ? ... ha fatto la domanda 2 giorni fa ed è sparito ... ::slight_smile:

Guglielmo

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.

Ommammamia, più che visualbasic sembra il basic che usavo su Apple][ oppure il gwbasic...

on error resume next è l'apoteosi della gestione delle eccezioni. si potrebbe tradurre in: in caso di errore. . . ciavetene
... ricordi di gioventù

Però c'era anche il più avanzato "on error gosub"!

(P.S. anche io usavo il basic dell'AppleII, fra l'altro era della Microsoft)

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.

Tornando al topic io conosco 2 strategie.

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.