User interface 创建带有GUI的微控制器接口程序时从何处开始?
我在上大学计算机工程专业的高级设计课。我对嵌入式系统不是很在行。我需要创建一个程序,可以发送指令到微控制器,它应该有一个图形用户界面。其他人正在为微控制器编程,所以我主要只是响应他们将输出给我的内容。我真的不知道从哪里开始,最后一学期我有点不知所措。有人能给我指一下正确的方向吗 附加信息:我们正在为该设备使用TI-msp430f2274,它实际上只是输出3个陀螺仪的读数。我正在考虑使用GTK来创建GUI,但我想看看是否有更好的东西 编辑:我的项目是一个滚轮校准工具,它使用陀螺仪来比较两个滚轮。该程序将向一个滚轴发送一条指令,使刀具“归零”,并接收一个数据流,该数据流表示下一个滚轴的偏移差User interface 创建带有GUI的微控制器接口程序时从何处开始?,user-interface,microcontroller,User Interface,Microcontroller,我在上大学计算机工程专业的高级设计课。我对嵌入式系统不是很在行。我需要创建一个程序,可以发送指令到微控制器,它应该有一个图形用户界面。其他人正在为微控制器编程,所以我主要只是响应他们将输出给我的内容。我真的不知道从哪里开始,最后一学期我有点不知所措。有人能给我指一下正确的方向吗 附加信息:我们正在为该设备使用TI-msp430f2274,它实际上只是输出3个陀螺仪的读数。我正在考虑使用GTK来创建GUI,但我想看看是否有更好的东西 编辑:我的项目是一个滚轮校准工具,它使用陀螺仪来比较两个滚轮。该
我们正在使用带有UART接口的TTL-232R电缆,该程序应该可以在Windows上运行。我不知道你是怎么跟它说话的。大学让我崩溃了。如果你使用的是windows机器,那么Visual Studio和windows窗体应用程序就可以做到这一点。我以前曾使用它通过USB与温度传感器和其他控制设备接口,以及其他涉及从USB人机接口设备读取数据的项目。因此,在不了解项目细节的情况下,作为IDE Visual Studio,我认为是最好、最直观的,使用Windows API,您可以通过代码实现很多功能 嗯 p、 我用VB写的大部分代码都是用VS编写的,但它也支持其他语言 编辑:从com端口读取的一些示例代码:
Sub ReceiveSerialData()
' Receive strings from a com port
Dim comport as string = "COM 6" 'or whatever com you want...
Dim baud as integer = 9600 'or whatever baud you want...
Try
com = My.Computer.Ports.OpenSerialPort(comport)
com.ReadTimeout = 10000
com.BaudRate = baud
While (com.IsOpen)
Dim Incoming As String = com.ReadLine()
If Incoming Is Nothing Then
Exit While
Else
'do something here with your com data
'i.e. display it in a rich text box, or whatever...
End If
End While
Catch ex As Exception
' display your errors here if you wish....
End Try
End Sub
不过,我认为其他答案,特别是关于使用tcl的答案,从嵌入式系统的角度来看可能更有意义。我根本就没有任何与他们打交道的经验,因此我是VB。:-) 既然你提到你以前使用过tcl,我就用tcl给出我的答案,因为它是最简单的方法,因此是适合于正确工作的正确工具 tcl的核心优势(事实上也是它深受粉丝喜爱的原因之一)是它非常非常跨平台。在其他语言中,跨平台只是指“可以在多个平台上运行”,但仍然要求您根据平台使用不同的API,而tcl通过提供跨平台的统一API来消除平台差异 Tcl将串行端口视为文件,因此您只需打开它与之对话。当然,不同的平台提供了不同的端口命名方式。因此,在Windows上,要与串行端口通信,只需执行以下操作:
set rs232 [open COM1 w+]
在unixen(Linux、MacOSX等)上,您可以执行以下操作:
set rs232 [open /dev/ttyS0 w+]
var rs232 = new SerialPort("/dev/ttyS0", {
baudrate: 57600
}, false);
要设置波特率和奇偶校验位,您现在可以执行以下操作
fconfigure $rs232 -mode "9600,n,8,1"
请确保将串行端口配置为二进制模式,否则tcl将根据您的操作系统为您重新解释“\n”:
fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0
“阻塞”位是将其设置为非阻塞模式,以便我们可以编写面向事件的代码,这对于UI应用程序至关重要,因为我们不希望IO阻塞我们的UI
现在来看一个从串行端口读取数据的简单程序:
package require Tk ;# in case we're running in tclsh
if {[catch {set rs232 [open COM1 w+] err}]} {
tk_dialog .error Error "Could not open COM1: $err" error 0 OK
}
fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0
# Draw a simple UI do dump data to:
pack [label .l -text "Gyroscope outputs:"]
pack [label .g1 -textvariable gyro1]
pack [label .g2 -textvariable gyro2]
pack [label .g3 -textvariable gyro3]
# Now the fun part, read from the serial continuously with fileevent:
set buffer ""
fileevent $rs232 readable {
append buffer [read $rs232]
# Here, you need to parse the data returned.
# Due to the byte-wise nature of serial ports the data read may not be
# complete so we need to check if it's complete. "Completeness" depends
# on you. For example the data packet may end with a newline. Or it may
# simply be a timeout between data packets.
if {[message_is_complete $buffer]} {
set gyros [parse_message $buffer]
set buffer ""
# Update the UI:
foreach x $gyros y {gyro1 gyro2 gyro2} {
set $y $x
}
}
}
减去注释和空行,只有16行代码。当然,您可以更进一步,实现一个更奇特的UI,而不仅仅是文本标签
如果需要向微控制器发送数据,只需将放入微控制器即可。只需记住覆盖tcl的自动换行终止:
puts -nonewline $rs232 $somedata
如果您需要格式化二进制文件,请使用tcl的
binary
命令。我个人仍然更喜欢使用tcl,因为您可以在5分钟内启动并运行原型,读取硬件的输出。但您也提到了对node.js解决方案的兴趣。因此,这里是node.js的另一个起点
首先,您需要安装node.js。这可能是琐碎的,也可能不是琐碎的,这取决于您的操作系统。为了编译用C编写的node.js模块(甚至node.js本身),您需要在系统上安装Python2.x(而不是3.0)。即使您正在安装节点的二进制发行版,您仍然需要编译串行端口库,因为它不包含在核心中
接下来,您需要安装serialport
模块。根据您的操作系统,说明会有所不同。有关模块,请参见npm页面:
一旦启动并运行,您可以使用serialport模块简单地与串行端口通信:
var SerialPort = require("serialport").SerialPort
var rs232 = new SerialPort("COM1", {
baudrate: 57600
}, false);
同样,与tcl案例一样,串行端口的名称取决于您的操作系统。以上是Windows的一个示例。对于unixen,您需要执行以下操作:
set rs232 [open /dev/ttyS0 w+]
var rs232 = new SerialPort("/dev/ttyS0", {
baudrate: 57600
}, false);
对于UI,node没有像tcl这样的核心工具包。npm上有许多可用的库,允许您使用QT或GTK或其他一些小部件集。但在节点上执行UI最常用的方法是将其作为web服务器运行,并使用web浏览器连接到它。这样做的缺点是增加了一点复杂性,并且需要处理HTML。好处是HTML和CSS!这意味着您可以利用css3effects和jQuery等工具,轻松创建一个真正流畅的UI
不幸的是,编写一个交互式webapp(即使是一个简单的webapp)相当复杂,所以我不会提供一个“简单”的示例实现。我只建议您阅读更流行的框架,如和模板库,如或。您可能还希望了解如何简化服务器与web浏览器之间实时通信的实现。我将了解一下。听起来好像可以。在Windows上编译和运行它使QT或GTK看起来好像无法工作。你会推荐用VB写吗?我对这一切都是全新的。在我看来,VB很容易开始使用,我选择它作为我编写的应用程序的唯一原因就是当时我的心情很好。例如C++可以工作