2016-04-07 15 views
0

Bir seri iletişim (USB) üzerinden bir arduinodan gelen sıcaklığı okuyabilen, vb.net'de bir uygulama yapmaya çalışıyorum.Arduino'dan vb.net uygulamasına seri iletişim yoluyla bir çift gönderme

Sadece bir kullanıcı bir düğmeye bastığında sıcaklığı okumak mümkün olmasını istiyorum.

Kodumu aşağıya gönderdim. 'BtnManueel_Click' düğmesine bastığımda önce arduinoya bir komut gönderirim. Arduino bu komutu aldığında, sıcaklık ucunu PC'ye gönderecektir. Bu seri monitör kullandığımda mükemmel çalışır. Ama başvurumu aşağıdaki kodla çalıştırdığımda, bende etc.vb değerini alamıyorum.

Neyi yanlış yapıyorum ve/veya neden çalışmıyor?

vb.net ve seri iletişim konusunda çok fazla tecrübem yok ve bu konuda bana yardımcı olabileceğinizi umuyordum.

Şimdiden teşekkürler.

saygılar.

vb.net kodu: arduino içinde

Imports System 
Imports System.IO.Ports 
Imports System.Windows.Forms 

Public Class Form1 
    Dim serielepoort As New SerialPort 
    Dim celsius As Double 

    Private Sub BtnVerbinden_Click(sender As Object, e As EventArgs) Handles BtnVerbinden.Click 
     Try 
      serielepoort.PortName = "COM8" 
      serielepoort.BaudRate = 9600 
      serielepoort.DataBits = 8 
      serielepoort.Parity = Parity.None 
      serielepoort.StopBits = StopBits.One 
      serielepoort.Handshake = Handshake.None 
      serielepoort.Encoding = System.Text.Encoding.Default 
      serielepoort.ReadTimeout = 10000 
      serielepoort.Open() 

     Catch ex As Exception 

      MessageBox.Show(ex.Message, "fout bij verbinden!", MessageBoxButtons.OK, MessageBoxIcon.Error) 

     End Try 
    End Sub 


    Private Sub BtnVerbindingVerbreken_Click(sender As Object, e As EventArgs) Handles BtnVerbindingVerbreken.Click 

     serielepoort.Close() 

    End Sub 


    Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed 

     BtnVerbindingVerbreken_Click(sender, e) 

    End Sub 


    Private Sub BtnManueel_Click(sender As Object, e As EventArgs) Handles BtnManueel.Click 

     If (serielepoort.IsOpen) Then 
      serielepoort.Write("t")    
     End If 

    End Sub 


    Private Sub serialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) 

     celsius = serielepoort.ReadLine() 
     LblTempWaarde.Text = celsius 

    End Sub 

End Class 

Kodu:

nt pinLM335 = 0; 


void setup() 
{ 
    Serial.begin(9600); 

} 

void loop() { 
    if(Serial.available() >0) 
    { 
    String val = Serial.readStringUntil('\n'); 
    if (val == "t") 
    { int waarde = analogRead(pinLM335); 
    double spanning =(waarde/1024.0)*5; 
    double Kelvin = (spanning) * 1000/10; 
    double celsius = Kelvin - 273.15; 

    Serial.println(celsius); 
    } 
    } 

} 

cevap

0

bu deneyin ve sürekli gönderme herhangi bir veri almak olmadığını görmek? Ardından gönderiyi ekleyin.

Imports System 
Imports System.IO.Ports 
Class PortDataReceived 
    Public Shared Sub Main() 
     Dim mySerialPort As New SerialPort("COM1") 

     mySerialPort.BaudRate = 9600 
     mySerialPort.Parity = Parity.None 
     mySerialPort.StopBits = StopBits.One 
     mySerialPort.DataBits = 8 
     mySerialPort.Handshake = Handshake.None 
     mySerialPort.RtsEnable = True 

     AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler 

     mySerialPort.Open() 

     Console.WriteLine("Press any key to continue...") 
     Console.WriteLine() 
     Console.ReadKey() 
     mySerialPort.Close() 
    End Sub 

    Private Shared Sub DataReceivedHandler(
         sender As Object, 
         e As SerialDataReceivedEventArgs) 
     Dim sp As SerialPort = CType(sender, SerialPort) 
     Dim indata As String = sp.ReadExisting() 
     Console.WriteLine("Data Received:") 
     Console.Write(indata) 
    End Sub 
End Class