我正在尝试使用libserial通过串行从Ubuntu 12.04到ATxmega板进行通信。我遇到的问题是我的代码没有运行,除非我先运行cutecom。除非我先运行cutecom,否则我的程序会冻结并且不输出任何内容。我尝试了几个让我sudo访问ttyUSB0的东西,将我的用户添加到对话框组。运行它作为su。我也尝试添加VTime和VMin,但也没有运气。这是我的代码,程序没有离开,似乎永远不会进入while(ros :: ok())循环。我正在使用ros,但它在这里应该没有效果。我试图以十分之一秒的速度与董事会来回沟通。
#include "ros/ros.h"
#include <SerialStream.h>
#include <iostream>
#include <math.h>
using namespace LibSerial;
SerialStream mySerial;
void processSonar(char read[]);
char motor[] = {'s','3','6','0','0'};
unsigned int writeServo = 3600;
int main(int argc, char ** argv)
{
ros::init(argc, argv, "mySerial");
ros::NodeHandle n;
std::string serial = "/dev/ttyUSB0";
mySerial.Open(serial);
mySerial.SetBaudRate( SerialStreamBuf::BAUD_57600 );
mySerial.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 );
mySerial.SetNumOfStopBits( 1 );
mySerial.SetParity( SerialStreamBuf::PARITY_NONE );
mySerial.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE );
mySerial.SetVTime( 1 );
mySerial.SetVMin( 60 );
while(!mySerial.IsOpen()){
mySerial.Open(serial);
std::cout << "trying to open port" << std::endl;
usleep(100000);
}
// if(!mySerial.good()){
// std::cerr << "Serial not Good"
// << std::endl;
// exit(1);
// }
char read[12];
char* SerialP = read;
char* motorP = motor;
while(ros::ok())
{
mySerial.write(motorP, sizeof(motor));
if(mySerial.rdbuf()->in_avail() > 0)
{
mySerial.read(SerialP, sizeof(read));
std::cout << read << std::endl;
processSonar(read);
//std::cout << motor << writeServo << std::endl;
}
usleep(100000);
}
std::cout << "Communication Failure"<< std::endl;
return 0;
}
答案 0 :(得分:0)
想出来。这不是我的代码。由于某种原因,调制解调器正在开始。我必须sudo apt-get remove modemmanager
,然后只允许sudo usermod -a -G dialout $USER
永久许可拨打小组。重新启动并像魅力一样工作。希望这有助于某人。