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
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 ![]()
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 ![]()