0

我正在尝试实施一个安全系统作为我的微控制器学期项目的一部分。我几乎完成了软件方面的工作。我只需要设计一个 GUI,作为我的安全系统的指示器或警报设备。微控制器利用传感电路检查系统是否被破坏,并将警报信号串行发送到 PC。我正在使用 C++ 从 PC 串行端口读取数据,整个过程运行良好。但是,我是在基于控制台的环境中进行的。这就是我所知道的一切。我正在学习成为一名电子工程师。:P

然而,这是不可接受的,我需要为我的项目设计一个 GUI。

问题 1:我是否可以将现有代码与 GUI 集成?我已经用谷歌搜索了这个,但运气不佳。所有的答案似乎都指向 Qt 等外部库的方向。这有点可怕,因为我没有很多时间。

问题 2:正如我之前提到的,我对必须使用外部库等的想法有点害怕,所以我尝试使用基于 Visual C++ 的 Windows 窗体应用程序在 Visual Studio 上制作 GUI。我使用了工具箱中的串行端口实用程序。我无法以这种方式从 COM 端口读取数据,但我可以将数据写入它就好了。

这是表单的样子:

在此处输入图像描述

我试图在文本框中显示从串行端口读取的数据以响应按钮按下。这是我用于按钮的代码:

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(); 

你能告诉我我做错了什么吗?我是新来的。这是我的首选方法,顺便说一句。

4

3 回答 3

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); 
于 2013-10-22T02:33:44.743 回答
0

如果您不想使用外部库,那么使用 Windows Forms 绝对是最好的选择,我也是这样做的。

我并不完全喜欢这些东西,但ReadLine()只使用一次可能是问题的根源。也许通过串行端口传入的数据不仅仅是通过一条线发送的。也许您必须遍历输入,不断使用ReadLine()和收集数组中的行,直到收到所有数据。

但也许还有另一个命令,例如ReadAllLines(),它可以一次读取所有输入并将其返回给您?

于 2013-10-18T22:11:27.620 回答
0

我的直接怀疑是 ReadLine() 命令 - 你确定你的 MC 正在写结束行字符吗?

请改用 ReadFile 并查看是否可以读取单个字节。如果没有,那么也许您需要调整更多选项。如果遇到超时异常,则需要调整读取超时 (SetCommTimeouts)。

Allen Denver 在这里很好地描述了您需要的一切:http: //msdn.microsoft.com/en-us/library/ff802693.aspx

至于哪个 GUI,如果您使用的任何 Windows 窗体项目都有效,那么请坚持使用。我个人将 MFC 用于类似的最后一年项目,但那是因为我已经熟悉它了。

不过,下一次,学习 C#。C# 和 Java 在创建 GUI 方面要容易得多,也快得多。

于 2013-10-18T22:15:02.893 回答