【QT】用串口发送ASCII字符串与数字的拼接

1. 问题需求:

向电机发指令s r0x2f 1666666用以设置电机的转速为1000。

s r0x2f 1666666 设置速度为 1000RPM

2. 办法解决:

利用串口发送s r0x2f +速度;

获取控件值类型事件

   void on_spinboxSpeed_valueChanged(int value);
void MotorDebug::on_btnSendSpeed_clicked()
{
   QString buf = "s r0x2f ";
   QString str = ui->spinboxSpeed->text();
   int num = str.toInt();
   int speed = num*1667;
   QString Strspeed = QString::number(speed);
   buf.append(Strspeed);
   char *temp=buf.toLocal8Bit().data();
   currentPort->write(temp);
}

3. 代码讲解:

第一步:首先定义一个QString 类型变量存放字符串:"s r0x2f "

第二步:其次获取控件的文本数值:QString str = ui->spinboxSpeed->text();

第三步:将获取后的文本数值转换为Int型,目的是为了做系数相乘的作用。int num = str.toInt();

乘以系数,这样操作的时候就可以直观看到转速,和实际发送的指令了;int speed =

num*1667;

第四步:建立一个QString类型的变量StrSpeed将,QString::number是将数数字(整数、浮点数、有符号、无符号等)转换为QString类型,常用于UI数据显示。

QString Strspeed = QString::number(speed);

第五步:进行拼接形成完整字符串buf.append(Strspeed);

第六步:toLocal8Bit()是将QString以自己正确的编码方式读取并转换成编译器编码方式的字节流,char *temp=buf.toLocal8Bit().data();

第七步:currentPort->write(temp);将数据以串口方式发送。

4. 知识点拓展QString::number()

QString::number是将数数字(整数、浮点数、有符号、无符号等)转换为QString类型,常用于UI数据显示。

4.1 QString::number 整数转换

int a = 20;
uint b =255;
QString::number(a);//20
QString::number(a,10);//20
QString::number(b);//255
QString::number(b,16);//ff
QString::number(b,16).toUpper();//FF

4.2 QString::number 浮点数转换

float a = 1.234;
QString::number(a,‘f’, 2);  //1.23

5. 知识点拓展把QString转换为double类型

QString str="123.45";

double  c = str.toDouble(); //val=123.45
float   d = str.toFloat(); //d=123.45

6. Qstring 转换char*问题

QString qstr("hello,word");

const char *p = qstr.toLocal8Bit().data();

7. 测试结果

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QT作为一个功能强大的跨平台应用程序开发框架,不仅可以进行GUI开发,也可以进行串口通信。串口通信在很多项目中都非常常见,其中一个重要的应用是将数字字符串发送到控制板上。 首先,需要安装QT中的串口通信组件,可以在QT Creator中通过“Qt Creator”->“Preferences”->“Kits”->“Desktop Qt”->“Versions”->“Auto-detected”->“Details”中找到“Serial Port”组件并勾选。安装完成后,在QT Creator的左侧工具栏中会出现串口组件。 接下来,可以创建一个新的QT窗口应用程序,并向其添加一个按钮。当用户单击按钮时,应用程序将向控制板发送一个数字字符串。 在按钮单击事件的槽函数中,首先需要定义一个串口对象。例如: ``` QSerialPort *serialport=new QSerialPort(this); serialport->setPortName(portname); serialport->setBaudRate(baudrate); serialport->setDataBits(dataBits); serialport->setParity(parity); serialport->setStopBits(stopBits); ``` 其中,portname是指串口的名称,例如“COM1”或“/dev/ttyUSB0”;baudrate是指波特率;dataBits是指数据位的个数;parity是指校验方式;stopBits是指停止位的个数。 接着,需要打开串口: ``` if(serialport->open(QIODevice::ReadWrite)) { //串口打开成功 } else { //串口打开失败 } ``` 在串口打开成功的情况下,可以将数字字符串转换为字节数组,并写入串口: ``` QString str="12345"; QByteArray data=str.toLatin1(); serialport->write(data); ``` 最后,需要关闭串口: ``` serialport->clear(); serialport->close(); ``` 通过上述步骤,可以在QT中轻松地实现串口发送数字字符串的功能。需要注意的是,串口通信存在很多的参数设置,需要根据具体情况进行调整。同时,在进行串口通信时,还需要考虑到错误处理、超时设置等问题,以确保数据的可靠性和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米杰的声音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值