20231123 薄膜压力传感器的串口数据接收处理 string 转int

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; // 未接收到正确的消息
  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值