2013-10-18 52 views
0

我想實現一個安全系統作爲我的微控制器長期計劃的一部分整合C++代碼。我幾乎完成了事情的軟件結束。我只需要設計一個GUI,作爲我的安全系統的指示器或報警設備。微控制器利用所述感測電路的檢查,如果該系統已被破壞,並串行地發送報警信號到PC。我正在使用C++讀取PC串行端口的數據,整個過程非常奏效。但是,我正在基於控制檯的環境中執行此操作。這就是我所知道的。我正在學習成爲電子工程師。 :P使用GUI

然而,這是不可接受的,我需要爲我的項目設計一個GUI。

問題1: 無論如何,我可以將我現有的代碼與GUI集成嗎?我已經搜索了這個,但沒有多少運氣。所有的答案似乎像的Qt等外部庫的方向,因爲我沒有很多的時間這是種可怕的指向。

問題2: 正如我前面提到的那樣,我被不得不使用外部庫等的想法嚇倒了,所以我試圖使用基於Visual C++的Windows窗體應用程序在Visual Studio上創建GUI。我使用了Toolbox中的serialport實用程序。我一直無法讀取數據關閉的COM端口的方式,但我可以將數據寫入到它就好了。

這是形式的樣子:

enter image description here

我想顯示響應按下一個按鈕從一個文本框串口讀取數據。下面是我使用該按鈕的代碼:

private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) 
{} 

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
{ 
this->serialPort1->PortName = "COM1"; 
this->serialPort1->Open(); 
this->serialPort1->BaudRate = 9600; 
try 
{ 
this->textBox1->Text=this->serialPort1->ReadLine(); 
} 
catch(TimeoutException^) 
{ 
this->textBox1->Text="Timeout Exception"; 
} 
this->serialPort1->Close(); 

你能告訴我什麼,我做錯了什麼?我是新來的。這是我首選的方法,順便說一句。

+0

你應該改說你的問題,沒有多大意義。你想要做的是使用GUI通過串口與你的微控制器進行通信。如果你發佈更多的代碼,它也會有所幫助。 – makhdumi

+0

是的。這正是我想要做的。 GUI需要與微控制器進行通信。按下我的按鈕時,表單應用程序就會掛起。我會添加更多的代碼。 –

回答

0

使用Windows窗體是肯定要走,如果你不想使用外部庫的方式,那就是如何我會太做到了。

我不完全瞭解這些事情,但僅僅使用ReadLine()可能是問題的可能來源。也許通過串口進入的數據不止一行發送。也許你會通過輸入必須循環,不斷使用ReadLine()和收集陣列中的行,直到所有數據已被接收。

但也許還有另一個命令,如ReadAllLines(),它會一次讀取所有輸入並將其返回給您?

0

我的直接懷疑是ReadLine()命令 - 你確定你的MC正在寫末尾字符嗎?

改爲使用ReadFile並查看是否可以讀取單個字節。如果沒有,那麼也許你需要調整更多選項。如果你到了超時異常,那麼你就需要調整讀取超時(SetCommTimeouts)。你需要

一切都被描述得非常詳細艾倫丹佛這裏:http://msdn.microsoft.com/en-us/library/ff802693.aspx

至於其GUI,如果任何Windows窗體項目你使用的作品,然後堅持下去。我個人使用MFC進行類似的最後一年項目,但那是因爲我已經熟悉它了。

對於下一次雖然,學習C#。創建GUI的C#和Java遠遠更容易,更快捷。

+0

我不知道末尾的字符部分。一旦系統被破壞,MC在串行端口上連續輸出ASCII Y.我在使用Windows API的jiffy中的基於控制檯的環境中執行了此操作。 –

+0

我試着將超時異常增加到50.它被設置爲-1之前。當我按下按鈕1時程序不再掛起,但它不斷拋出超時異常。有人可以告訴我什麼是正確的語法? –

+0

請參閱:http://msdn.microsoft.com/en-us/library/ms143549.aspx – makhdumi

0

至於你的問題1,我建議你使用MFC庫,這很容易。這是你開始的一個很好的例子。 http://depts.washington.edu/cmmr/biga/chapter_tutorials/1.C++_MFC_D3DOGL/1.StepByStepGuide/index.html

根據我的理解,您已經能夠在基於控制檯的環境中讀取和寫入數據。 GUI僅用於輸入或顯示數據。在這種情況下,您可以輕鬆編寫一個MFC項目,以達到您的目的。

對於第二個問題,如果您嘗試在編輯框中顯示從串口讀取的數據以響應按鈕按下。您應該首先在編輯框中添加一個變量,例如edit_box_value。並在該按鈕點擊功能,實現代碼如下:

edit_box_value.Format(_T("%s"), data_to_be_displayed); 
UpdateData(FALSE);