C#,通过串口获取一些随机数(错误值)

时间:2017-01-31 02:00:37

标签: c# .net linq event-handling serial-port

我试图做的是通过按下它上面的按钮从我的MICROCONTROLLER获取字符串数据,但是我在c#程序上得到的是一些随机数字(附图片)。例如,我想收到“5”,但我收到“650683”。  在mk方面一切正常,我用模拟器检查过。 谢谢你。 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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我看到两个明显的问题。

串口需要很多设置

自从我使用串口以来已经很长时间了,但我记得有很多设置无法自动协商,例如是否使用奇偶校验位,是否使用停止位,是否等待CTS信号等。检查手册并确保已正确设置所有这些。

消息格式并不总是很明显

仅仅因为你编写的代码Print 5并不意味着五通过电缆。您需要知道5是如何编码的,它是否包含在任何元数据中,是否发送换行符或回车符,无论是ASCII还是UTF8等。再次参考文档。