Consigli Comunicazione Seriale VB visual studio 2010

Ciao a tutti, Ho incominciato da poco ad usare Arduino. Vorrei sapere se ci sono degli esempi per comunicare in seriale con VB 2010. Grazie mille.

Saluti,

Marchetto Davide

Non credo e esistano , se ti puó tornare un po' utile io posso spiegarti come comunicare via seriale usa do visual BASIC peró il 2008 Ciao Niko

Ciao, questo è il codice che utilizzo in VB2008 per leggere i segnali di arduino, direi che per il VB2010 dovrebbe essere la stessa cosa.

Chiaramente occorre inserire il componente "SerialPort".

Private Sub InitPortComunication()

With SerialPort1 .BaudRate = 9600 .PortName = "COM5" .Parity = IO.Ports.Parity.None .DataBits = 8 .StopBits = IO.Ports.StopBits.One '.ReceivedBytesThreshold = 4 End With

SerialPort1.Open() SerialPort1.DiscardInBuffer()

End Sub

Private Sub mySerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim riga As String

riga = SerialPort1.ReadLine

End Sub

Un saluto, Tredipunta.

Scusate la domanda OT, a cosa serve interfacciare Arduino con VB?

a superare i limiti hw e sw imposti dal micro e dare in "outsourcing" i lavori pesanti al pc per poi riceverne i prodotti di reazione.

Tipo acquisire dati ed elaborarli col processore del PC? Veramente interessante! Grazie

Grazie mille, per adesso ho fatto un form con 4 pulsanti e mando dei numeri. Su arduino con degi IF leggo i dati della seriale ( in ascii) accendo dei led e scrivo su un display lcd. Quello che non riesco a fare è ricomporre le stringhe su arduino. Tipo se mando ciao ricevo C I A O Come faccio a ricomporre la stringa?

Grazie mille per le risposte precedenti.

Chetto983, non è che potresti postare il codice, sia lato arduino che lato VB ? tempo fa ho provato a fare ualcosa ma non avendo mai usato Vb non ho combinato niente :grin:

eccoti il codice di VB:

Public Class Form1

Private Sub Button2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseDown
Timer1.Start() ’ se pulsante premuto setto il timer

End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Not SerialPort1.IsOpen Then 'apro la comunicazione seriale seriale se chiusa
SerialPort1.Open()
End If

If SerialPort1.IsOpen() Then
SerialPort1.Write(2) ’ se porta aperta scrivo 2 ad arduino
End If
If SerialPort1.ReadChar() = 50 Then ’ ricevo 2 in ASCII (50)
Label1.Text = (“Botton 2 premuto”) 'scivo su label1
End If

SerialPort1.Close() ’ chiudo comunicazione seriale
End Sub

Private Sub Button2_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseUp
Timer1.Stop() ’ se tasto rilasciato fermo il timer
End Sub

Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
Timer2.Start()

End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
If Not SerialPort1.IsOpen Then
SerialPort1.Open()
End If

If SerialPort1.IsOpen() Then
SerialPort1.Write(1)
If SerialPort1.ReadChar() = 49 Then
Label1.Text = (“Botton 1 premuto”)
End If

End If

SerialPort1.Close()
End Sub

Private Sub Button1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
Timer2.Stop()
End Sub

Private Sub Button3_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button3.MouseDown
Timer3.Start()
End Sub

Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
If Not SerialPort1.IsOpen Then
SerialPort1.Open()
End If

If SerialPort1.IsOpen() Then
SerialPort1.Write(3)
End If
If SerialPort1.ReadChar() = 51 Then
Label1.Text = (“Botton 3 premuto”)
End If

SerialPort1.Close()

End Sub

Private Sub Button3_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button3.MouseUp
Timer3.Stop()
End Sub

Private Sub Button4_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button4.MouseDown
Timer4.Start()
End Sub

Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
If Not SerialPort1.IsOpen Then
SerialPort1.Open()
End If

If SerialPort1.IsOpen() Then
SerialPort1.Write(4)
End If
If SerialPort1.ReadChar() = 52 Then
Label1.Text = (“Botton 4 premuto”)
End If

SerialPort1.Close()
End Sub

Private Sub Button4_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button4.MouseUp
Timer4.Stop()
End Sub
End Class

e il codice di arduino:

#include <LiquidCrystal.h>

LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);
int lettura;
const int Led = 22;
//unsigned long num_milli;
//unsigned long secondi = 0;
unsigned long last = millis();

void setup(){

Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(2,0);
lcd.print(“Valore tasto”);
pinMode(Led,OUTPUT);
}

void loop() {

lcd.setCursor(5,1);

if(Serial.available() > 0){
lettura = Serial.read();
Serial.write(lettura);

if (lettura == 49) {
lcd.print(“Tasto1”);
}
if (lettura == 50){
digitalWrite(Led,HIGH);
lcd.print(“Tasto2”);
last = millis();
}
if (lettura == 51){
lcd.print(“Tasto3”);
}
if (lettura == 52){
lcd.print(“Tasto4”);
}

}
if (millis() - last > 150) {
digitalWrite (Led, LOW);
}
}

Non è sicuramente il massimo
Questo è il risultato della mia prima settimana di programmazione

Il codice vb è migliorabile. È consigliabile ridurre l'uso degli if, sostituendoli quando sono tanti con i select case. Per il tuo codice comincerei almeno a sistemare l'if di verifica apertura porta Inserendo ELSE invece che due IF:

        If Not SerialPort1.IsOpen Then 
                  Serialport1.open()
                  Serialport1.write(x)
                 Else serialPort1.write(x)

Cosi gli dici direttamente se non è aperta aprila e poi scrivi altrimenti (quindi significa che al primo controllo è risultata aperta) scrivi direttamente.

Il codice si riduc e si alleggerisce. Ciao

Grazie ad entrambi, sono ignorante sul quell'ambito :sweat_smile: