2013-09-18 1 views
-1

Я нахожусь в старшем классе дизайна для компьютерной программы моего колледжа. Я не очень хорошо разбираюсь в Embedded Systems. Мне нужно создать программу, которая может отправить инструкцию на микроконтроллер, и у нее должен быть графический интерфейс. Кто-то еще программирует микроконтроллер, поэтому я в основном просто отвечаю на то, что они выдадут мне. Я действительно не знаю, с чего начать, я немного завален/перегружен в последнем семестре. Может, кто-то ум укажет на меня в правильном направлении?С чего начать, создавая программу сопряжения микроконтроллеров с помощью графического интерфейса?

Дополнительная информация: Мы используем TI-msp430f2274 для устройства, и на самом деле это просто выводит показания 3-х гироскопов. Я думаю об использовании GTK для создания графического интерфейса, но я смотрю, есть ли что-то лучше.

Редактировать: Мой проект - инструмент для выравнивания роликов, который использует гироскопы для сравнения двух роликов. Программа отправила бы инструкцию «нуля» инструмента на один ролик и получить поток данных, который говорит о разнице смещения следующего ролика.

Мы используем кабель TTL-232R с интерфейсом UART, и программа должна работать в Windows. Я понятия не имею, как вы с ним разговариваете. Колледж сокрушил меня.

+0

В какой ОС вы работаете? – slebetman

+0

А на каких языках вам комфортно? Я лично напишу это в tcl или node.js, так как это можно сделать с помощью примерно двух десятков строк кода в tcl или около трех десятков строк в node.js. – slebetman

+0

Я знаком с Java и C (но не с C++), и мне пришлось использовать TCL на моем межсетевом сервере для одного отдельного проекта и ненавидеть его. Я посмотрю на node.js. –

ответ

0

Если вы используете машину Windows, Visual Studio и приложение Windows Forms могут сделать трюк. Ранее я использовал его для взаимодействия с датчиками температуры и другим оборудованием управления через USB и другими проектами, связанными с чтением с USB-устройств интерфейса пользователя. Поэтому, не понимая специфику вашего проекта, я считаю, что IDE Visual Studio является лучшим и наиболее интуитивным, и с помощью Windows API вы можете многого добиться с помощью своего кода.

Visual Studio 2012

НТН.

p.s. Я пишу большую часть моего кода в VB с помощью VS, но он будет поддерживать другие языки тоже ...

Edit: несколько примеров кода чтения из порта комов:

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 

Я думаю, что другие ответы, хотя, esp об использовании tcl, вероятно, имеет больше смысла с точки зрения встроенных систем. Я просто не имею никакого опыта с ними, отсюда и мой VB'ness. :-)

+0

Я посмотрю. Похоже, это сработает. Компиляция и запуск на Windows заставили QT или GTK показаться, что это не сработает. Вы бы порекомендовали написать его VB? Я супер новый для всего этого. –

+0

VB достаточно лёгкий, чтобы поступить, по моему мнению, единственная причина, по которой я выбрал его для приложений, которые я написал, это просто я был в таком настроении в то время. C++, например, будет работать так же хорошо, но я предпочитаю синтаксис VB. Каждый по своему усмотрению. Я отредактирую свой ответ с примера в VB, чтобы читать из компота, чтобы вы могли понять, что я сделал ... –

0

Поскольку вы упомянули, что раньше пользовались tcl, я даю свой ответ в tcl, так как IMHO это самый простой способ сделать это, и для этого нужен правильный инструмент для правильной работы.

Основным преимуществом tcl (и, действительно, одной из причин, по которой его любят его поклонники) является то, что он очень, очень кросс-платформенный. В то время как в других языках кросс-платформа просто означает «может работать на нескольких платформах», но по-прежнему требует использования разных API в зависимости от платформы, tcl сглаживает различия в платформе, обеспечивая единый API на разных платформах.

Tcl обрабатывает последовательные порты, такие как файлы, поэтому вы просто open, чтобы поговорить с ним. Конечно, разные платформы предоставляют разные способы именования портов. Итак, в Windows, чтобы поговорить с последовательным портом, который вы просто делаете:

set rs232 [open COM1 w+] 

О unixen (Linux, MacOSX и т. Д.).) Вы могли бы сделать:

set rs232 [open /dev/ttyS0 w+] 

Чтобы установить скорость передачи данных и биты четности, теперь вы можете сделать

fconfigure $rs232 -mode "9600,n,8,1" 

Не забудьте также настроить последовательный порт в двоичном режиме в противном случае TCL будет повторно интерпретировать " \ п»для вас в зависимости от вашей ОС:

fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0 

„блокирующий“бит, чтобы установить его в режим без блокировки, так что мы можем написать событие ориентированный код, который имеет решающее значение для приложений пользовательского интерфейса, так как мы не хотите, чтобы 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 строк кода. Конечно, вы можете пойти дальше и реализовать более привлекательный интерфейс, а не только текстовые метки.

Если вам нужно отправить данные на микроконтроллер просто puts. Только не забудьте отменить автоматическое прекращение перевода строки на Tcl: binary команду

puts -nonewline $rs232 $somedata 

Используйте TCL, если вам нужно отформатировать и из двоичного файла.

0

Я лично до сих пор предпочитаю tcl для этого, потому что вы можете запустить прототип и запустить его с вашего устройства менее чем за 5 минут. Но вы также упомянули о заинтересованности в решении node.js. Итак, вот альтернативная отправная точка для node.js

Сначала вам нужно установить node.js. Это может быть или не быть тривиальным в зависимости от вашей ОС. Вам понадобится Python 2.x (не 3.0), установленный в вашей системе, чтобы скомпилировать модули node.js в C (и даже самом узле node.js). Даже если вы устанавливаете двоичный дистрибутив узла, вам все равно придется скомпилировать библиотеку последовательных портов, поскольку она не включена в ядро.

Далее вам необходимо установить модуль serialport. Инструкции различаются в зависимости от вашей ОС. Смотрите страницу НПМ для модуля: https://npmjs.org/package/serialport

После того, как у вас есть вещи и работает, вы можете просто общаться с последовательным портом с помощью модуля SerialPort:

var SerialPort = require("serialport").SerialPort 
var rs232 = new SerialPort("COM1", { 
    baudrate: 57600 
}, false); 

Опять же, как и в случае TCL, то имя последовательного порта зависит от вашей ОС. Вышеприведенный пример для Windows. Для unixen вы бы сделали:

var rs232 = new SerialPort("/dev/ttyS0", { 
    baudrate: 57600 
}, false); 

Для UI узел не имеет базового инструментария, такого как tcl. Существует множество библиотек на npm, позволяющих использовать QT или GTK или какой-либо другой набор виджетов. Но наиболее распространенным способом выполнения пользовательского интерфейса на узле является просто запустить его как веб-сервер и подключиться к нему с помощью вашего веб-браузера. Недостатком этого является небольшая дополнительная сложность и необходимость возиться с HTML. Поверхность - HTML & CSS! Это означает, что вы можете использовать такие инструменты, как CSS3-эффекты и jQuery, чтобы создать действительно гладкий интерфейс с минимальными усилиями.

К сожалению, запись интерактивного webapp (даже простого) довольно привлекательна, поэтому я не буду предлагать «простой» пример реализации.Я бы посоветовал вам читать более популярные фреймворки, такие как express.js и шаблоны библиотек, такие как dust или handlebars. Вы также можете взглянуть на socket.io, чтобы упростить реализацию взаимодействия в реальном времени между вашим сервером и веб-браузером.

Смежные вопросы