任何人都可以查看下面的C#代码。在float sıcaklık = Convert.ToByte(seriPort.ReadExisting());
有一个问题但是我找不到有什么问题?我猜SerialPort无法获取数据。
public partial class Form1 : Form
{
SerialPort seriPort;
public Form1()
{
InitializeComponent();
seriPort = new SerialPort();
seriPort.BaudRate = 9600;
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
try
{
seriPort.PortName = textBox1.Text;
if (!seriPort.IsOpen)
MessageBox.Show("Bağlantı Kuruldu");
}
catch
{
MessageBox.Show("Bağlantı Kurulmadı!");
}
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
seriPort.Write("temperature");
float sıcaklık = Convert.ToByte(seriPort.ReadExisting());
textBox2.Text = sıcaklık.ToString();
comboBox1.Items.Add(textBox2.Text);
System.Threading.Thread.Sleep(100);
}
catch (Exception) {}
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
seriPort.Close();
}
}
首先。在将Name
分配给端口后,您需要打开它以便进行通信:
seriPort.PortName = textBox1.Text;
// open the port
seriPort.Open();
第二件事是,沟通需要时间。想象一下你和别人说话。你问他目前的temperature
。然后你必须等到你的伴侣说完直到结束。只有这样,您才能获得所需的信息,您可以使用这些信息。
由于您坚持使用同步方法,因此必须为设备提供所需的响应时间。你可以等一下:
seriPort.Write("temperature");
// wait for the response
System.Threading.Thread.Sleep(2000);
float sıcaklık = Convert.ToByte(seriPort.ReadExisting());
我不会真的推荐这种同步方法,而是使用DataReceived
。当您的设备向您发送数据并且您已收到数据时,它将被触发。
SerialPort port = new SerialPort();
port.DataReceived += Port_DataReceived;
private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
float sıcaklık = Convert.ToByte(seriPort.ReadExisting());
// do what ever you want with this value
}
希望有所帮助