Salve a tutti, sono nuovo e mi sto cimentando per le prime volte su Arduino. La mia intenzione era quella di collegare un programma in Visual Basic al mio Arduino, piu precisamente vorrei poter creare un pulsante su Visual basic e collegarlo alle funzioni del mio arduino(es. accendere un led premendo sul pulsante in visual), come posso fare? Premetto che so poco o nulla di visual basic quindi gradirei una guida molto dettagliata.. Grazie mille
Salve,
prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI e di leggere con attenzione il REGOLAMENTO ...
... poi, per collegare Arduino ad un programma, indipendentemente come scritto, che gira su PC, la soluzione più semplice e utilizzare la porta seriale.
Su Arduino scriverai un programma che fa uso della classe Serial, mentre su PC, da programma dovrai aprire la porta COMx: che sarà stata assegnata ad Arduino.
Una volta in connessione, si tratta semplicemente di stampare dei caratteri sulla porta seriale da una parte, e di riceverli dall'altra.
Per VB ... esistono MIGLIAIA di ottime guide e libri in Italiano ... prenditene una e studiati come si fa ! Non puoi pensare di metterti a fare una cosa così senza avere le basi sia della programmazione in C/C++ su Arduino, sia, se vuoi usare VB, di VB su PC!
Guglielmo
Io so programmare in C/C++ ma non so come interfacciare le due cose, Arduino e VB.
Se qualcuno, gentilmente, può darmi una mano con magari anche qualche pezzo di codice, mi risolverebbe il problema.
Come faccio a leggere da seriale quello che il PC mi manda? Grazie
Non uso VB e, normalmente, non uso Win (sono su OS X) quindi, se ti occorrono pezzi di codice VB ... devi aspettare che passi qualch'uno che lo usa XD
Guglielmo
P.S. : Però se ne è parlato più volte ... se usi la funzione di ricerca sul forum, sicuramente trovi degli esempi fatti ...
Quale versione di VB ?
Il caro buon vecchio Visual Basic 6 o il nuovo (pesante) Visual Basic Net ?
Un consiglio !! Se la scelta ricade su VB6,
allora io direi di continuare ancora con il buon MSCOM32.OCX che se pur bisogna ogni tanto registrarselo con il vecchio regsvr32.exe nei nuovi sistemi Windows a 64bit, rimane a mio avviso imbattibile in termini di parametrizzazione, specie quando si ha a che fare con trasmigrazione di grossi pacchetti dati.
La versione è Visual basic express 2010
Io avevo provato a inviare dei caratteri alla seriale per poi provare a leggerli con arduino..
Mi spiego meglio:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.Open()
SerialPort1.Write("1")
SerialPort1.Close()
End Sub
questo è quello che ho scritto nel mio pulsante in Visual Basic e questo:
ser=Serial.read();
if(ser==1)
{ ........}
è quello che ho scritto nel mio loop di arduino
PaperBetti:
...
ser=Serial.read();
if(ser==1)
{ ........}è quello che ho scritto nel mio loop di arduino
Direi che è il caso che ti vai a ripassare la classe Serial ... e magari anche il C/C++ ... ]
1. da una parte trasmetti una stringa ("1") e dall'altra fai un if numerico ( if(ser==1) )
2. una Serial.read() senza aver in precedenza verificato la disponibilità di caratteri con la Serial.available() ... ti ritornerà solo dei valore pari a -1
... inoltre, fai attenzione, ti ricordo del la Serial.read() restituisce UN SOLO char ... quindi ... attento a quello che gli mandi e a come ricevi.
Guglielmo
Si scusa in realtà è fatta così:
if (Serial.available() )
{ ser=Serial.read();
if(ser==1)
{.....}}
come posso correggere?
Continui a confrontare il CARATTERE '1' che tu trasmetti e che in hex vale 0x31 (codice ASCII di "1") con il NUMERO 1 che in hex vale 0x01 ... difficilmente il confronto riuscirà non ti pare ??? ]
La corretta sintassi è :
if ( Serial.available() ) {
 ser=Serial.read();
 if( ser == '1' ) {
   ...
   ...
 }
}
... nota i SINGOLI apici che fanno si che quel 1 sia interpretato come un CARATTERE e non come un NUMERO.
Guglielmo
P.S.: ...e magari formatta anche il codice con l'apposito strumento del IDE ... Tools -> Auto Format ... almeno ti metterà a posto indentature e parentesi come Dio comanda.
Io sbagliavo mettendo le virgolette..
PaperBetti:
Io sbagliavo mettendo le virgolette..
Che cosa intendi ???
Se intendi questo : "1" si, sbagli perché quello in C indica una string di tipo char array null-terminated ... ovvero un array che contiene i valori {0x31, 0x00}.
In VB invece credo (... ma non lo conosco) che sia la sintassi corretta per specificare un carattere ...
Guglielmo
Ciao qui http://1drv.ms/1i9brzr puoi trovare un programma che ho realizzato io per comandare arduino tramite pc. Scarica la cartella SPC e all'interno hai 2 cartelle, una contenente i file per visual basic e una cartella con il codice per arduino. Il programma funziona tutto correttamente ma è da ultimare e risolvere alcuni bug. Ma per quello che vuoi fare tu penso che basta e avanza
Grazie mille! Con quale versione di VB è stato fatto?
PaperBetti:
Grazie mille!Con quale versione di VB è stato fatto?
Veramente l'ho realizzato con Visual Studio Express 2013, ma credo sia compatibile con Visual Basic.
Bene per tutto quello che ti hanno suggerito.
Inoltre, direi...
da questo pezzo
PaperBetti:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.Open()
SerialPort1.Write("1")
SerialPort1.Close()
End Sub
vedo che apri e chiudi la seriale ogni volta che premi il pulsante.
Sarebbe auspicabile invece aprire la seriale all'inizio e tenerla aperta, per chiuderla solo all'uscita.