Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 创建带有GUI的微控制器接口程序时从何处开始?_User Interface_Microcontroller - Fatal编程技术网

User interface 创建带有GUI的微控制器接口程序时从何处开始?

User interface 创建带有GUI的微控制器接口程序时从何处开始?,user-interface,microcontroller,User Interface,Microcontroller,我在上大学计算机工程专业的高级设计课。我对嵌入式系统不是很在行。我需要创建一个程序,可以发送指令到微控制器,它应该有一个图形用户界面。其他人正在为微控制器编程,所以我主要只是响应他们将输出给我的内容。我真的不知道从哪里开始,最后一学期我有点不知所措。有人能给我指一下正确的方向吗 附加信息:我们正在为该设备使用TI-msp430f2274,它实际上只是输出3个陀螺仪的读数。我正在考虑使用GTK来创建GUI,但我想看看是否有更好的东西 编辑:我的项目是一个滚轮校准工具,它使用陀螺仪来比较两个滚轮。该

我在上大学计算机工程专业的高级设计课。我对嵌入式系统不是很在行。我需要创建一个程序,可以发送指令到微控制器,它应该有一个图形用户界面。其他人正在为微控制器编程,所以我主要只是响应他们将输出给我的内容。我真的不知道从哪里开始,最后一学期我有点不知所措。有人能给我指一下正确的方向吗

附加信息:我们正在为该设备使用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++可以工作