2013-11-03 49 views
0

我想通过串行从Ubuntu 12.04到使用libserial ATxmega板进行通信。我遇到的问题是我的代码无法运行,除非我先运行cutecom。除非我先运行cutecom,否则我的程序会冻结而不输出任何内容。我尝试了几件事情,比如让我sudo访问ttyUSB0,将我的用户添加到对话组中。像su一样运行它。我也尝试添加VTime和VMin,但都没有运气。这里是我的代码,程序没有离开,它似乎永远不会进入while(ros :: ok())循环。我正在使用ros,但它在这里应该没有效果。我试图以二分之一的比例与董事会来回沟通。LibSerial C++代码不运行没有Cutecom

#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

想通了。这不是我的代码。正是由于某种原因,调制解调器管理员正在开始工作。我不得不sudo apt-get remove modemmanager,然后只给我永久许可拨出组sudo usermod -a -G dialout $USER。重新启动并像魅力一样工作。希望这有助于某人。