首页 > 解决方案 > C#串口?我正在写我发送的关于读取com端口地址灯的代码,这是错误的

问题描述

我声明灯地址的代码:

 byte[] on = { 0xe8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x04, 0x82, 0x02, 0x01};
 byte[] off = { 0xe8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x04, 0x82, 0x02, 0x00 };

直到它迭代两次,时间 1 是正确的地址,第二个是不同的数字

 private void Data_Received(object sender, SerialDataReceivedEventArgs e)
        {
            int i;
            Thread.Sleep(10);
            rec_lend = serialPort1.BytesToRead;
            rxbyte = new byte[rec_lend];
            serialPort1.Read(rxbyte, 0, rec_lend);
            for (i = 0; i < rxbyte.Length; i++)
            {
                
                rspdata.Enqueue(rxbyte[i]);
                MessageBox.Show(i.ToString() + rspdata.ToArray());
            }

            this.Invoke((MethodInvoker)delegate
            {
                req_msg();
            });
        }
    
        
        public void req_msg()
        {
            int i;
            if (rspdata.Count != 0)
            {
                byte[] messageReceive = new byte[rspdata.Count];
                int ghdata = rspdata.Count; 
                rec_msg = new byte[rspdata.Count];
               
                for (i = 0; i < 11; i++)
                {

                    rec_msg[i] = (byte)(rspdata.Dequeue());
                    dataOUT +=  Convert.ToString(rec_msg[i], 16);
                    
                    
                }
                
                if (rspdata.Count != 0)
                {
                    req_msg();
                }
            }
            tBoxDataIN.Text = dataOUT;
        }

我也不知道我在哪里卡住了,导致它像这样重复 2 次。像我这样的学习者很难

标签: c#serial-port

解决方案


我又试了一次,数据还是返回了2次,是不是很长所以花了2次才全部读完?我的代码 C#:

private void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
    {
        int i;
        Thread.Sleep(10);
        // Read available bytes and check for presence of a end byte
        byte[] buffer = new byte[serialPort1.BytesToRead];
        serialPort1.Read(buffer, 0, buffer.Length);
        receivedData.AddRange(buffer);
        for (i = 0; i < buffer.Length; i++)
        {
            rspdata.Enqueue(buffer[i]);
        }            
        this.Invoke((MethodInvoker)delegate
        {
            message();
        });
    }
    public void message()
    {
        int i;
        byte[] messageReceive = new byte[rspdata.Count];
        byte[] rec_message = new byte[rspdata.Count];
        for (i = 0; i < rspdata.Count; i++)
        {
            rec_message[i] =(byte) rspdata.Dequeue();
            tBoxDataIN.Text += rec_message[i];
        }
        tBoxDataIN.Text += Environment.NewLine ;
    }

推荐阅读