工具:QT5.9
使用了QSerialPort类,并且需在.pro文件上加
QT += serialport
还有QSerialPortInfo
:Provides information about existing serial ports.
该类是一个串口的辅助类类,提供主要是提供系统已经存在串口的信息
好像Qt4 没有这个类
单片机与上位机之间的通信
首先要获取当前可用的串口号,要用到QSerialPortInfo
QSerialPort *m_Usart = new QserialPort;
//遍历输出所有可用串口
foreach(QSerialPortInfo info, QSerialPortInfo::availablePorts())
{
qDebug()<<info.portName();
//添加到comboBox菜单里
ui->comboBox->addItem(info.portName());
}
QSerialPort *m_Usart = new QSerialPort();
bool Usart_Connect()
{
//断开并清空正在连接的串口
if(m_Usart->isOpen())
{
m_Usart->clear();
m_Usart->close();
}
if(ui->comboBox->currentText().isNull())
{
qDebug()<<"PortName Error!";
return false;
}
//配置串口信息
m_Usart->setPortName(ui->comboBox->currentText());
m_Usart->setBaudRate(115200);
m_Usart->setDataBits(QSerialPort::Data8);
m_Usart->setStopBits(QSerialPort::OneStop);
m_Usart->setParity(QSerialPort::NoParity);
if((m_Usart->baudRate()==-1) ||(m_Usart->dataBits()==-1) ||(m_Usart->stopBits()==-1) ||(m_Usart->parity()==-1))
return false;
m_Usart->setFlowControl(QSerialPort::NoFlowControl);//无流控制
if(!m_Usart->open(QIODevice::ReadWrite))//以读写方式打开串口
{
qDebug()<<"Usart open Error!";
return false;
}
//当串口有数据时,由槽函数接收并处理
connect(m_Usart, SIGNAL(readyRead()), this, SLOT(Usart_RecvFunc()));
qDebug()<<"m_Usart_Connect executed";
return true;
}
//读取数据
QByteArray Recv_Data;
Recv_Data.resize(m_Usart->readBufferSize());
Recv_Data = m_Usart->readAll();
//然后把收到的数据做处理
...
//写入数据
QString buf("abcde");
m_Usart->write(buf.toLatin1());
一般与单片机交互都是以16进制的格式进行交互,所以这里写一个互转函数(ByteArray转16进制的QString的互转)
//ByteArray转16进制的QString显示
QString BytearrayToHexstring(QByteArray data)
{
QString ret(data.toHex().toUpper());
qDebug()<<ret;
int len = ret.length()/2;
for(int i=1; i<len; i++)
{
qDebug()<<i;
ret.insert(3*i-1, " ");
}
qDebug()<<ret;
return ret;
}
//16进制的QString转ByteArray
QByteArray HexstringToBytearray(QString hexstring)
{
bool ok;
QByteArray ret;
//除去"/r/n/t"等字符
hexstring = hexstring.trimmed();
hexstring = hexstring.simplified();
QStringList str_list = hexstring.split(" ");
foreach(QString str, str_list)
{
if(!str_list.isEmpty())
{
char c = str.toInt(&ok, 16) & 0xFF;//转16进制并保持二进制补码的一致
if(ok)
{
ret.append(c);
}else
{
qDebug()<<"hex->byte ERROR!";
return hexstring.toLatin1();
}
}
}
qDebug()<<ret;
return ret;
}
主要用了QSerialPort和QSerialPortInfo两个类实现串口通信。
文章浏览阅读746次。Nginx轻量级web服务器目录Nginx轻量级web服务器前言一、如何进行nginx的安装1、首先要检查nginx是否已经安装2、使用yum命令安装二、使用nginx进行反向代理1、首先安装两个tomcat,端口分别是8081和80822、配置两个tomcat3、修改host文件4、配置nginx服务器总结前言Nginx是一款轻量级Web服务器,也是一款反向代理服务器。使用nginx可以帮助实现前端动静分离,可以作为邮件代理服务器,也可以_轻量级web服务器
文章浏览阅读181次。lua学习笔记14 函数多返回值_lua函数多返回值
文章浏览阅读891次,点赞17次,收藏24次。人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能的科学。在过去的几十年里,人工智能技术已经取得了显著的进展,例如机器学习、深度学习、自然语言处理、计算机视觉等。然而,这些技术仍然存在一个重要的问题:它们的决策过程通常是不可解释的,这意味着人们无法理解这些算法如何到达某个决策。这种不可解释性可能导致许多问题,例如隐私问题、法律问题、道德问题和可靠性问题。为了解决这个问题,人工智能社区开始关注可解释性(Explainable AI, XAI)。_可解释性人工智能的应用
文章浏览阅读974次,点赞14次,收藏10次。Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察。
文章浏览阅读8.4k次。将Java程序移植到android上_安卓 java层 移植
文章浏览阅读3k次。一. 前言OSS(Object Storage Service)俗称对象存储,主要提供图片、文档、音频、视频等二进制文件的海量存储功能。目前除了公有云提供对象存储服务外,一般私有云比较关心一些开源的分布式对象存储解决方案。公有云一般都提供对象存储服务,如阿里云的OSS,华为云的OBS,腾讯云的COS。一些开源的对象存储都会遵循Amazon s3协议。Amazon s3协议定义了操作对象存储的Resestfull风格的API。通过在pom中引用aws-java-sdk-s3可以实现对存储的操作。 _对象存储minio和apache ozone
文章浏览阅读6.4k次。https://www.iteye.com/blog/dingbuoyi-836621 String urlString = "http://192.168.21.77:8080/swp/mainPage?aa=11&bb%3D22"; URI uri = URI.create(urlString); System.out.println(uri.getPat..._uri转url
文章浏览阅读151次。好久没写过文章了,渐渐的发现自己懒了,o(︶︿︶)o 唉 懒惰是魔鬼.废话不多说了。 1、首先看一个简单的例子 int[] myArray = { 1, 32, 43, 343 }; IEnumerator myie = myArray.GetEnumerator(); myie.Reset(); while ..._ienumerator ilist icollection
文章浏览阅读2.3k次。1. 根据项目需要添加依赖;服务器上已经有大数据组件的依赖都无需打包依赖,所以可以在依赖加上<scope>provided</scope>2. 如果使用IDEA,在本地运行项目时要在运行配置勾选【Include dependencies with “Provided” scope】,否则会编译出错以下是POM.xml文件<?xml version="1.0" ..._idea如何打没有依赖的包
文章浏览阅读3.4k次。linux下编写本地录音和播放demo测试代码:1. 通过读.wav格式的音频流,将音频流写入DMA缓存区,实现语音播放;2. 通过读DMA缓存区的音频流,实现录音。首先要配置硬件参数,包括设置采样位数、通道数、采样率等,然后向DMA缓存区写或者读,实现播放和录音,具体见下文:/************************************************************************* > File Name: local_player.c_linux c语言 应用 一边录音 一边播放
文章浏览阅读943次。在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面处理性能差而导致无法访问其他页面,则会对某些页面操作设置 3. 对于某些上传或者不确定处理时间的场合,则需要对整个流程中所有超时设置为无限,否则任何一个环节设置不当,都会导致莫名执行中断 4_除了 file_get_contents 还有哪些能卡死进程
文章浏览阅读3.1k次,点赞55次,收藏63次。【数学建模】元胞自动机_元胞自动机