无法从SerialPort读取

问题描述 投票:-3回答:1

任何人都可以查看下面的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();
    }
}
c# serial-port
1个回答
0
投票

首先。在将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
}

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.