gpt4 book ai didi

c# - 我想从串行端口读取电位器的 int,但它一直显示 (4⸮⸮⸮⸮j⸮/⸮。)

转载 作者:太空宇宙 更新时间:2023-11-03 20:48:58 25 4
gpt4 key购买 nike

所以我从 Arduino Uno 发送一个来自电位器的整数(0 - 1023),当我读取它并将其打印在标签中时,没有数字。我在某处读到我需要读取字节,我将如何做到这一点?

namespace Receiver
{
public partial class Form1 : Form
{
SerialPort port;
UITimer _timer = new UITimer();

public Form1()
{
InitializeComponent();

if (port == null)
{
port = new SerialPort("COM11", 9600);//Set your board COM
port.Open();
}
}

private void Form1_Load(object sender, EventArgs e)
{
_timer.Interval = 200;
_timer.Tick += _timer_Tick;
_timer.Enabled = true;
_timer.Start();
}

private void _timer_Tick(object sender, EventArgs e)
{

string a = port.ReadExisting();
afisare.Text = a;
}

void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
_timer.Stop();
if (port != null && port.IsOpen)
{
port.Close();
}
}
}
}

最佳答案

首先,确保您使用的是正确的 Baud rate对于您的串行通信,否则您将收到无法读取的数据。

您的代码只是缺少对传入数据的正确解释。最重要的是,我建议删除计时器并使用内置的 DataReceived 事件。这意味着您可以删除所有与计时器相关的代码,并将事件处理程序添加到您的 SerialPort 初始化中:

if (port == null)
{
port = new SerialPort("COM11", 9600); //Set your board COM
port.DataReceived += DataReceivedEvent;
port.Open();
}

然后您当然必须声明您的 DataReceivedEvent 处理程序。既然你说你的电位器可以包含 0-1023 范围内的值并且你没有提供你的 Arduino 代码,我假设这是唯一通过端口发送的东西。这意味着您每个周期发送 2 个字节,需要将其解析回整数。

这通过执行 left shift 来工作你的两个收到的字节。

private void DataReceivedEvent(object sender, SerialDataReceivedEventArgs e)
{
SerialPort senderPort = (SerialPort)sender;

byte[] buffer = new byte[2];

if (senderPort.Read(buffer, 0, 2) != 0)
{
int data = (int)buffer[0] << 8 | buffer[1];
Console.WriteLine("Received data: {0}", data);
}
}

关于c# - 我想从串行端口读取电位器的 int,但它一直显示 (4⸮⸮⸮⸮j⸮/⸮。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com