【发布时间】:2016-04-07 16:56:27
【问题描述】:
我正在尝试在 vb.net 中创建一个应用程序,它可以通过串行通信 (USB) 从 arduino 读取温度。
我希望只有在用户单击按钮时才能读取温度。
我在下面发布了我的代码。当我单击“BtnManueel_Click”按钮时,我首先向 arduino 发送命令。 arduino 收到此命令后,将读取温度端发送到 PC。当我使用串行监视器时,这非常有效。但是当我使用下面的代码运行我的应用程序时,我没有得到 vb.net 中的值。
我做错了什么和/或为什么它不起作用?
我在 vb.net 和串行通信方面没有太多经验,我希望你能帮我解决这个问题。
提前致谢。
亲切的问候。
vb.net 代码:
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
arduino 中的代码:
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);
}
}
}
【问题讨论】: