练习:
超声波测距&气压类传感器测温测压后,通过上位机显示
提交两个代码部分:
1.底层ardiuno程序 txt C语言代码
2.Qt工程 (cpp,h,ui等)
Demo.cpp
#include "demo.h"
#include "ui_demo.h"
#include <QSerialPort>
#include <QSerialPortInfo>
Demo::Demo(QWidget *parent) :
QWidget(parent),
ui(new Ui::Demo)
{
ui->setupUi(this);//创建窗口界面
//检测电脑系统的串口名字
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
QSerialPort serial;
serial.setPort(info);//遍历的串口信息设置到串口对象中,包含名字,波特率等等
ui->com->addItem(serial.portName());
}
}
Demo::~Demo()
{
delete ui;
}
void Demo::on_pushButton_clicked()
{
//串口对象如果想连接通信,则需要设置基本参数
//创建窗口对象----通信不结束,对象要一致保持存在,堆内存
serial = new QSerialPort;
//设置串口名
serial->setPortName(ui->com->currentText());
//设置波特率
serial->setBaudRate(ui->comboBox_2->currentText().toInt());
//设置数据位
switch(ui->comboBox_3->currentIndex()){
case 8:
serial->setDataBits(QSerialPort::Data8);
break;
}
//设置校验位
switch(ui->comboBox_4->currentIndex()){
case 0:
serial->setParity(QSerialPort::NoParity);
break;
}
//设置停止位
switch(ui->comboBox_5->currentIndex()){
case 1:
serial->setStopBits(QSerialPort::OneStop);
break;
}
serial->open(QIODevice::ReadWrite);
connect(serial,SIGNAL(readyRead()), this, SLOT(ReadData()));//打开串口操作------数据显示的连接
}
void Demo::ReadData(){
//在富文本框中显示数据
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty()){
QString str = ui->textEdit->toPlainText();
QString str2 = ui->textEdit2->toPlainText();
QString str3 = ui->textEdit3->toPlainText();
str += buf;
ui->textEdit->clear();//清除界面上次显示的
ui->textEdit->append(str.mid((str.length())-14,4));
str2 += buf;
ui->textEdit2->clear();//清除界面上次显示的
ui->textEdit2->append(str2.mid((str2.length())-10,6));
str3 += buf;
ui->textEdit3->clear();//清除界面上次显示的
ui->textEdit3->append(str3.right(4));}
buf.clear();//清除缓存区
}
main.cpp
#include "demo.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Demo w;
w.show();// 窗口显示
return a.exec();
}
.ino
#include <SFE_BMP180.h>
SFE_BMP180 pressure;
double dis;
void setup() {
pressure.begin();
pinMode(2, OUTPUT);
pinMode(3, INPUT);
Serial.begin(9600);
}
void loop() {
char status;
double T;
double P;
status = pressure.startTemperature(); //开启温度计算
if(0 != status){
delay(status);//等待延时
status = pressure.getTemperature(T);//获取温度值存入T中
if(0 != status){
Serial.print(T,1);
}
status = pressure.startPressure(3); //开启压力计算
if(0 != status){
delay(status);//等待延时
status = pressure.getPressure(P,T);//获取压力值存入T中
if(0 != status){
Serial.print(P,1);
}}}
pinMode(2, OUTPUT);
digitalWrite(2,LOW);
delayMicroseconds(10);
digitalWrite(2,HIGH);
delayMicroseconds(10);
digitalWrite(2,LOW);
dis = pulseIn(3,1);
dis = dis / 57;
Serial.print(dis,1);
delay(1500);
}