2016-04-07 38 views
0

私はシリアル通信(USB)を介してarduinoから温度を読み取ることができるvb.netでアプリケーションを作成しようとしています。arduinoからvb.netアプリケーションへのシリアル通信による二重送信

ユーザーがボタンをクリックしたときに温度を読み取ることができます。

以下に自分のコードを掲載しました。ボタン 'BtnManueel_Click'をクリックすると、まずarduinoにコマンドを送信します。 Arduinoがこのコマンドを受信すると、それがPCに送信される温度終了を読み込みます。シリアルモニタを使用すると、これは完全に機能します。しかし、以下のコードでアプリケーションを実行すると、vb.netの値が得られません。

私は間違っていますか、それともなぜ機能しませんか?

私はvb.netとシリアル通信に関する多くの経験がありません。私はあなたがこれを手伝ってくれることを願っていました。

ありがとうございます。

種類について

vb.netコード:Arduinoの中

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 

コード:

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); 
    } 
    } 

} 

答えて

0

はこれを試してみてください、あなたは常に送信任意のデータを取得するかどうかを確認?その後、投稿を追加します。

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 
関連する問題