Ubuntu安装serial库
Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)
串口查看
添加链接描述
安装libserial 库
sudo apt-get install libserial-dev
使用时cmakelist:
include_directories(/usr/include)
include_directories(${PROJECT_SOURCE_DIR})
find_library(SERIAL_LIB serial HINTS /usr/lib/x86_64-linux-gnu)
MESSAGE(STATUS "Find SERIAL_LIB : " ${SERIAL_LIB})
.h
#include <SerialPort.h>
数据处理
string与char相互转换
对单片机上发到电脑串口的字符串string 转 char[] 获得char*
字符分割函数strtok
char* 按 ‘,’分割
【C语言】 itoa()函数 和 atoi()函数(字符串与整型数的转换)
分割完的多个char* 直接转成单个整形数字
SerialPort sp("/dev/ttyACM0");
sp.Open(SerialPort::BAUD_9600);
// cout << "serial port opened " << endl;
// cout << " try read data from serial port " << endl;
const string databuf = sp.ReadLine(1000, ';');
// cout << " len : " << databuf.size() << " : " ;
int idx = 0;
// int forcelist[num];
int bufsize = databuf.size();
char data[bufsize];
for (int i = 0; i < bufsize; i++)
{
if(databuf.at(i) == ',') idx ++;
data[i] = databuf.at(i);
}
if(idx == 11) // 一条完整消息
{
// 计算num个压力数值
const char seg[2] = ",";
const char *force1 = strtok(data, seg);
forcelist[0] = atoi(force1);
for(int i=0;i<num;i++)
{
// printf("%d - [ %d ] . ", i+1 , forcelist[i]);
if(i==num-1) {
// printf("\n");
break;
}
else if ( i == num-2){
const char seg[2] = ";";
const char *force1 = strtok(NULL, seg);
forcelist[i+1] = atoi(force1);
}
else{
const char *force1 = strtok(NULL, seg);
forcelist[i+1] = atoi(force1);
}
}
return true;
}
else return false; // 未接收到正确的消息