Я пытаюсь управлять сервоприводами из кода C ++ на Odroid-U2. У меня есть сервопривод SSC-32 от LynxMotion, подключенный к Odroid с помощью USB-последовательного кабеля.
Простые последовательные команды управляют сервоприводами, такими как «#n Puuu», за которым следует возврат каретки, где n = номер контакта для сервопривода, а uuu = ширина импульса. Я могу нормально управлять сервоприводами при использовании PUTTY с Odroid, но у меня возникают проблемы при использовании кода C ++ для управления сервоприводами. Например, в моем коде я делаю следующее:
fstream f;
f.open("/dev/ttyUSB0");
f << "#0 P600\r";
f.close();
Когда-то я был в состоянии запустить этот код, и он соответствующим образом шевелил сервопривод, но теперь терминал застревает и зависает, когда я пытаюсь запустить этот код. Я сузил проблему до строки f.open («/ dev / ttyUSB0»), которая запрещает запуск кода. Я предполагаю, что мне нужно каким-то образом настроить порт USB. Я знаю, что мне нужна скорость передачи данных 115200, и я настроил ее соответственно, но я вроде Ubuntu n00b, поэтому я не уверен, какие другие типы конфигураций мне нужны.
Моя версия Linux — Linaro 12.11.
Когда я набираю stty, настройки не по умолчанию выглядят так:
speed 115200 baud; line = 0;
-brkint ixoff -imaxbel
-iexten
Вы не можете полагаться на настройки по умолчанию вашего последовательного порта (и вы не должны пытаться использовать stty для их установки вне вашей программы). Вы должны написать код в вашу программу, которая правильно настроит ваш последовательный порт. Для этого вам нужно использовать такие функции, как tcsetattr / tcgetattr, cfsetspeed и т. Д., См. Man termios.
Кроме того, fstream может не предоставлять доступ к соответствующим параметрам функции open (), которые необходимо использовать, поскольку открытие последовательного порта в UNIX должно выполняться с флагом O_NOCTTY.
Других решений пока нет …