C#,通过串行端口获取一些随机数(错误值)
C#, Getting some random numbers via Serial Port(wrong values)
我想做的是通过按下按钮从我的 MICROCONTROLLER 获取字符串数据,但我在我的 C# 程序上得到的是一些随机数(附有图片)。例如,我想收到“5”,但收到的却是“650683”。
在 mk 方面,一切正常,我用 Emulator 检查了它。
感谢更进一步。
Random numbers picture
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();
}
}
}
我看到两个明显的问题。
串口需要很多设置
我已经有很长时间没有使用串行端口了,但我记得有很多设置无法自动协商,例如是否使用奇偶校验位,是否使用停止位,是否等待CTS信号等。检查手册并确保您已正确设置所有这些。
消息格式并不总是很明显
仅仅因为您编写了 Print 5
的代码并不意味着 5 通过电缆。您需要知道 5 是如何编码的,它是否包含在任何 meta-data 中,是否发送换行符或回车符 return,它是 ASCII 还是 UTF8 等。再次查阅文档。
我想做的是通过按下按钮从我的 MICROCONTROLLER 获取字符串数据,但我在我的 C# 程序上得到的是一些随机数(附有图片)。例如,我想收到“5”,但收到的却是“650683”。 在 mk 方面,一切正常,我用 Emulator 检查了它。 感谢更进一步。 Random numbers picture
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();
}
}
}
我看到两个明显的问题。
串口需要很多设置
我已经有很长时间没有使用串行端口了,但我记得有很多设置无法自动协商,例如是否使用奇偶校验位,是否使用停止位,是否等待CTS信号等。检查手册并确保您已正确设置所有这些。
消息格式并不总是很明显
仅仅因为您编写了 Print 5
的代码并不意味着 5 通过电缆。您需要知道 5 是如何编码的,它是否包含在任何 meta-data 中,是否发送换行符或回车符 return,它是 ASCII 还是 UTF8 等。再次查阅文档。