C#,通过串行端口获取一些随机数(错误值)
我想做的是,通过按下微控制器上的一个按钮,从微控制器上获取字符串数据,但我在c#程序上得到的是一些随机数(附图)。例如,我希望收到“5”,但收到的却是“650683”。 在mk端,一切正常,我用Emulator进行了检查。 谢谢你。C#,通过串行端口获取一些随机数(错误值),c#,.net,linq,event-handling,serial-port,C#,.net,Linq,Event Handling,Serial Port,我想做的是,通过按下微控制器上的一个按钮,从微控制器上获取字符串数据,但我在c#程序上得到的是一些随机数(附图)。例如,我希望收到“5”,但收到的却是“650683”。 在mk端,一切正常,我用Emulator进行了检查。 谢谢你。 我看到两个明显的问题 串行端口需要很多设置 我使用串行端口已经有很长时间了,但我记得有很多设置无法自动协商,例如,是否使用奇偶校验位、是否使用停止位、是否等待CTS信号等。请检查手册并确保所有设置都正确 消息格式并不总是显而易见的 仅仅因为你写的代码上写着打印5,
我看到两个明显的问题 串行端口需要很多设置 我使用串行端口已经有很长时间了,但我记得有很多设置无法自动协商,例如,是否使用奇偶校验位、是否使用停止位、是否等待CTS信号等。请检查手册并确保所有设置都正确 消息格式并不总是显而易见的
仅仅因为你写的代码上写着打印5,并不意味着5通过电缆传输。您需要知道5是如何编码的,是否包含在任何元数据中,是否发送换行符或回车符,是否为ASCII或UTF8,等等。同样,请参阅文档。数字不是随机的,而是周期性的。所以这是一件事。至于与微控制器的集成(不管是什么,有数千种不同的类型),如果没有更多的信息,我怀疑任何人都能帮助你。问题是我需要发送不同类型的数据,十六进制、十进制、字节和字符串。结果相同,我得到了这些数字,是的,它们是不同的,尽管问题在c代码中,期望我的EventHandler工作不正常,“ToString”操作呢?我将“5”作为字符串发送,但我没有得到该数字{textBox4.Text+=rs.ToString();}您是否应该将字节值5或Ascii字符5发送到设备?您是否有正在使用的接口规范?“我想收到5”是什么意思?谢谢你的耐心。现在,我正在尝试发送二进制文件“&B1010\U 0111”。当我发送时,我收到123。我想我需要让我的WFA程序接受字节。我这样做了,“byte A=255;textBox4.Text+=System.Text.Encoding.ASCII.GetString(new[]{A}”);”但是现在我没有收到任何东西,很确定它是错的,我不知道如何写它
If Button_1 = 0 Then
Led_sent = Led_on
Print "5" ;
Bitwait Button_1 , Set
Led_sent = Led_off
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace WindowsFormsApplication8
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) // Here i send a byte to MK
{
var dataByte = new byte[] { 0x00 };
serialPort1.Write(dataByte, 0, 1);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e) // choosing a right com port
{
serialPort1.PortName = textBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(textBox2.Text);
}
int rs;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) // Data Receive Handler
{
try
{
rs = serialPort1.ReadByte();
this.Invoke(new EventHandler(type));
}
catch (System.TimeoutException) { }
}
void type(object s,EventArgs e) // receive data
{
textBox4.Text += rs.ToString();
}
private void button3_Click(object sender, EventArgs e) // OPen port
{
serialPort1.Open();
}
private void button4_Click(object sender, EventArgs e) // Close port
{
serialPort1.Close();
}
}
}