Qt 串口数据通信

一. 数据接收
1. 大部分教程使用readReady产生信号来触发ReadAll函数读取,但这会造成接收不完整等一些列问题,甚为恶心。一个好的思路是,在点击打开串口后,自己开通一个定时器,设定合适的间隔(就可以发挥主观能动性,根据下位机发送频率来决定间隔)。此时,读取过来就很完美了!
2.如果是整数类型(如编码器数据,会特别大,要用32位来表示),需要移位发送接收,难顶的是Qt直接移位回来并不是原来的数据,比如127之后会变成-128。这是由于计算机补码表示造成的,虽然我也尝试硬上,搞了好久,而未果。
放结论:使用QByteArray toHex().toInt(&ok, 16) 一步搞定。前提是您需要把数据位解析出来单独放在一个新的QbyteArray里面!

二. 数据发送
声明QbyteArray变量

  1. 如果要发送整数:
int Num = 1000;

QbyteArray SendArray;
SendArray[0] = Num << 8;
SendArray[1] = Num;

serial.write(SendArray);  // serial是实例化的一个串口对象
  1. 如果要发送16进制
QbyteArray SendArray;
SendArray[0] = 0x30;
SendArray[1] = 0x31;

serial.write(SendArray);  // serial是实例化的一个串口对象

如果要发送的位数很多,还有更加简洁的,直接发送数组![1]

    uint8_t speed[27] = {0xF7, 0x10, 0x00, 0x50, 0x00, 0x09, 0x12, 0x00, 0x02, 0x00, 0x01, 0xFB, 0xD0, 0xFF, 0xFF, 0x8A, 0xD0, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3D, 0x00};

    serial.write((const char*)speed, sizeof(speed));

Reference
[1] http://www.qtcn.org/bbs/read-htm-tid-56433.html

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值