Последовательный интерфейс Objective-C — Mac OS X

#objective-c #cocoa #macos #arduino

#objective-c #cocoa #macos #arduino

Вопрос:

В настоящее время я запускаю следующее в терминале, чтобы отправить команду через USB serial.

 /Users/drummerboyx/Library/Scripts/arduino-serial -b 9600 -p /dev/tty.usbserial-A800ev0Z -s 1
  

Есть ли способ сделать это в Objective-C?

Ответ №1:

ORSSerialPort — это более новая и простая в использовании альтернатива AMSerialPort.

Использование ORSSerialPort для открытия порта и отправки данных может быть таким же простым, как это:

 ORSSerialPort *serialPort = [ORSSerialPort serialPortWithPath:@"/dev/cu.KeySerial1"];
serialPort.baudRate = [NSNumber numberWithInteger:4800];
[serialPort open];
[serialPort sendData:someData]; // someData is an NSData object
[serialPort close];
  

Комментарии:

1. Спасибо за совет, эта библиотека выглядит намного чище!

2. Вы допустили опечатку с serialPortWithPath: , как вы сказали serialPortWithWithPath: , вы добавили дополнительный с в название метода.

3. Примечание: Если вы хотите поддерживать компьютеры Mac на базе PowerPC, вы (к сожалению) не сможете использовать ORSSerialPort.

Ответ №2:

Некоторые google-fu найдены:

Я почти ничего об этом не знаю, но название «IOKit» также звучит довольно многообещающе…

Ответ №3:

Если вы просто хотите запустить эту команду из своего кода, вы можете использовать системную функцию:

 #include <stdio.h>
#include <stdlib.h>

system("/Users/drummerboyx/Library/Scripts/arduino-serial -b 9600 -p /dev/tty.usbserial-A800ev0Z -s 1");
  

Вам нужно установить расширение вашего файла исходного кода Objective-C на .mm, что указывает Xcode скомпилировать его как Objective-C .

Ответ №4:

Если вы хотите придерживаться Cocoa — взгляните на NSTask.

Комментарии:

1. Да, но есть ли способ сделать это БЕЗ запуска системных команд?