2013-10-18 19 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);