none
visual 2010 C++ form serialport 問題 RRS feed

  • 問題

  • 我是visual C++ 初學者

    如題,我現在在寫對serialport抓取資料的部分

    但是我實在有點不太懂,serialport的方法要怎麼用

    我之前有用serialport去抓,單晶片上傳來的一組資料

    用ReadLine()去做接收,用了很久才用好

    後來才知道,原來他必須等收到\n換行的指令才會停止


    現在換要抓取一個感測器上傳來的資料

    我用串口接收器去抓,知道一次是傳來 16筆 16進制的資料

    但我VC這該如何寫?

    請serial port 這方面的高手給小弟我一點指點 拜託了 


    • 已編輯 Ervin6285 2014年10月12日 上午 09:56
    • 已移動 小朱MVP 2014年10月12日 下午 01:22
    2014年10月12日 上午 09:56

解答

所有回覆

  • 能的話還是用 Read 去收,再去分析。

    ReadLine 是給初學者用的,將換行交給 .Net 來控制,若是發生雜訊將會出現問題。

    既然用 C++ ,沒必要將此自動程序交出去,自己讀彈性比較大。


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

    2014年10月12日 上午 11:06
  • 恩恩,好 謝謝你的提醒
    我會改進,我再思考看看
    不過我遇到的問題,大概只能這樣形容

    感恩~
    2014年10月12日 上午 11:53
  • (1) 你一定又把心冷大的簽名檔誤以為針對你了

    (2) 以下這些文章雖然是 C#/VB 的, 但 serialport 的道理是差不多的.

    http://www.dotblogs.com.tw/billchung/category/5702.aspx?Show=All


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

    2014年10月13日 上午 03:21
  • 這裏有一個簡單的讀取Sensor範例可以參考看看:Programming serial port arduino with Visual C++

    2014年10月13日 上午 03:35
  • (1)恩恩,沒有關係~我覺得這是初學者必經之路

    要學習別人的智慧本來就是必須有所付出的,所以我沒有太放在心上~

    (2)
    恩恩,這個裡面的內容我有看過,我有試著改但還是要測試

    不過還是謝謝你喔~版大:)))
    2014年10月13日 下午 05:52
  • 好喔 謝謝你的幫忙 ~ :)
    2014年10月13日 下午 06:02
  • 版大
    我後來查資料,網路上分享用DataReceived去接收資料比較好
    我現在大概是寫這樣

    這部分我是參考MSDN上的

    在下方

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
    this->textBox1->Text=String::Empty;

    if(this->comboBox1->Text==String::Empty || this->comboBox2->Text==String::Empty)
    this->textBox1->Text="Please Select Port Settings";
    else {
    try{
      // make sure port isn't open
    if(!this->MyserialPort->IsOpen){
    this->MyserialPort->PortName=this->comboBox1->Text;
    //this->textBox1->Text=this->comboBox1->Text;
    this->MyserialPort->BaudRate=Int32::Parse(this->comboBox2->Text);
    //this->textBox1->Text=this->comboBox2->Text;
    this->textBox2->Text="Enter Message Here";

    MyserialPort->DataBits = 8;
    MyserialPort->StopBits = System::IO::Ports::StopBits::One;
    MyserialPort->Parity = System::IO::Ports::Parity::None;
    MyserialPort->Handshake = Handshake::None;
    MyserialPort->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler);

    //open serial port 
    this->MyserialPort->Open();
    this->progressBar1->Value=100;
    }
    else
    this->textBox2->Text="Port isn't openned";
    }
    catch(UnauthorizedAccessException^){
    this->textBox2->Text="UnauthorizedAccess";
    }
    }
    }

    private:
    static void DataReceivedHandler(Object^ sender,SerialDataReceivedEventArgs^ e)
        {
    char k;
            SerialPort^ sp = (SerialPort^)sender;
            String^ indata = sp->ReadExisting();

    這裡我要把接收到的一筆資料顯示再textbox上 但我不知道為什麼寫出來一直有問題
        }


    懇請指導

    2014年10月14日 上午 02:33
  • visual 2010 C++ form Threading 要如何寫?? 答案就是你這一篇

    PS: "一直有問題" 這種講法無助於告訴我們有甚麼問題, 請明確說明問題的狀況.


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


    • 已編輯 Bill ChungMVP 2014年10月14日 上午 04:06
    • 已標示為解答 Ervin6285 2014年10月14日 下午 01:28
    2014年10月14日 上午 04:04
  • 隔壁正在討論的這篇看一下:

    https://social.msdn.microsoft.com/Forums/zh-TW/c4d187b0-7d8f-4ca0-856f-0f6239774fe4/rs232?forum=232


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

    • 已標示為解答 Ervin6285 2014年10月14日 下午 01:28
    2014年10月14日 下午 01:24