none
serial port 值 弄到 textbox1時 寫的判斷式會有問題 RRS feed

  • 問題

  • 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 WindowsFormsApp6
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                serialPort1.DtrEnable = true; //启用控制终端就续信号

                serialPort1.RtsEnable = true; //启用请求发送信号 
            }

            //選擇PORT
            private void btnOpen_Click(object sender, EventArgs e)
            {
                serialPort1.PortName = txbCOM.Text;
                serialPort1.Open();
            }
            //寫入USB
            private void btnWrite_Click(object sender, EventArgs e)
            {
                serialPort1.Write(txbWrite.Text);
            }
            //讀USB
            private void btnRead_Click(object sender, EventArgs e)
            {
                //Console.Write(serialPort1.ReadLine());   


                // int B2R = serialPort1.BytesToRead;//有多少
                // byte[] Buffer = new byte[B2R];//new多少byte 陣列
                // if (B2R > 0)
                // serialPort1.Read(Buffer, 0, B2R);//有多少就讀入多少(共85byte)

                // serialPort1.ReadExisting();  //另一個讀取指令

                // serialPort1.SerialDataReceivedEventArgs();

                // 計算serialPort1中有多少位元組
                //byte[] bufferData = new byte[serialPort1.BytesToRead];
                //將讀取到的資料放到bufferData中,有需要後面就直接轉碼使用即可 
                //serialPort1.Read(bufferData, 0, bufferData.Length);
                // serialPort1.Read(放置的位元陣列 , 從第幾個位置開始存放 , 共需存放多少位元) 


                //  此程式能夠將USB暫存器的資料讀到TEXTBOX1去 非常好用
                byte[] x = new byte[1];
                x[0] = 0xFF;
                serialPort1.Write(x, 0, 1);
                byte[] buffer = new byte[serialPort1.BytesToRead];
                serialPort1.Read(buffer, 0, buffer.Length);
                textBox1.Text = " ";
                for (int i = 0; i < buffer.Length; i++)
                {
                    textBox1.Text += Convert.ToString((char)buffer[i]);
                    serialPort1.DiscardInBuffer();

                }
                //   此段程式結束
                string input = textBox1.Text;

                    if (input == "12345")
                {

                    MessageBox.Show("11");

                }
                else
                {
                    MessageBox.Show("22");
                }
                //此段程式結束  

            }
            //關閉程式
            private void btnClose_Click(object sender, EventArgs e)
            {
                serialPort1.Close();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                foreach (Control c in Controls)
                {
                    if (c is TextBox)
                        c.Text = "";}
                }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {

            }
        }
    }

    不知為何 textbox1 收到12345 後 都是顯示22     12345 的值 我是用arduino 發出的  想不透 抱歉

    2018年4月24日 下午 02:54

解答

  • 接收的觀念很怪,因為用 ByteToRead 只是那個時間點的 byte 數,不是 Read 時候的 Byte 數。

    看起來類似磅秤或是水位計之類,送了控制命令 FF 後,就會持續扔回資料,這種架構要看原始通訊協定,一般持續扔回資料會帶分隔字串或識別字串,22 那段可能是表示資料型態之類的識別字串。

    可以看一下下面那篇:

    [.Net] 資料接收的常識


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2018年4月24日 下午 03:42
  • 在 if 判斷式之前,先顯示一下 textBox1.Text (或 input) 所指向的字串長度,搞不好有藏甚麼不可見字元。

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/


    2018年4月24日 下午 08:03
    版主

所有回覆

  • 接收的觀念很怪,因為用 ByteToRead 只是那個時間點的 byte 數,不是 Read 時候的 Byte 數。

    看起來類似磅秤或是水位計之類,送了控制命令 FF 後,就會持續扔回資料,這種架構要看原始通訊協定,一般持續扔回資料會帶分隔字串或識別字串,22 那段可能是表示資料型態之類的識別字串。

    可以看一下下面那篇:

    [.Net] 資料接收的常識


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2018年4月24日 下午 03:42
  • 在 if 判斷式之前,先顯示一下 textBox1.Text (或 input) 所指向的字串長度,搞不好有藏甚麼不可見字元。

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/


    2018年4月24日 下午 08:03
    版主