• 2460阅读
  • 3回复

定时器实现串口助手定时发送功能遇到问题,求指点 [复制链接]

上一主题 下一主题
离线teallen
 

只看楼主 正序阅读 楼主  发表于: 2021-01-30
— 本帖被 20091001753 从 Qt 作品展 移动到本区(2021-01-31) —
cpp文件如下
#include "serial.h"
#include "ui_serial.h"

Serial::Serial(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Serial)
{
    ui->setupUi(this);
    //user


    system_init();
}

Serial::~Serial()
{
    delete ui;
}

/*--------------------------------------------------------------------------
*          funtions
* -------------------------------------------------------------------------*/
void Serial::system_init()
{
    //port config
    global_port.setParity(QSerialPort::NoParity);
    global_port.setDataBits(QSerialPort::Data8);
    global_port.setStopBits(QSerialPort::OneStop);




    //connect
    connect(ui->btn_open,&QPushButton::clicked,this,&Serial::btn_open_port);
    connect(ui->btn_close,&QPushButton::clicked,this,&Serial::btn_close_port);
    connect(ui->btn_send,&QPushButton::clicked,this,&Serial::btn_send_data);
    connect(&global_port,&QSerialPort::readyRead,this,&receive_data);


    //timersetting
    this->myTimer = new QTimer;
    myTimer->setInterval(100);
    connect(myTimer,SIGNAL(timeout()),this,SLOT(btn_send_data()));


    //timer_btn
    connect(ui->timed_send,&QPushButton::clicked,this,&Serial::btn_timed_send);
}
/*--------------------------------------------------------------------------
*          slots
* -------------------------------------------------------------------------*/
void Serial::btn_open_port(bool)
{
    /*--------port name------------------------*/
    qDebug()<<ui->cmb_port_name->currentIndex();//printf 0
//    int i = 10;
//    qDebug("%d",i);
    switch (ui->cmb_port_name->currentIndex()) {
    case 0:
        global_port.setPortName("COM1");
        break;
    case 1:
        global_port.setPortName("COM2");
        break;
    case 2:
        global_port.setPortName("COM3");
        break;
    case 3:
        global_port.setPortName("COM4");
        break;
    case 4:
        global_port.setPortName("COM5");
        break;
    case 5:
        global_port.setPortName("COM6");
        break;
    case 6:
        global_port.setPortName("COM7");
        break;
    default:
         global_port.setPortName("COM8");
        break;
    }
    /*--------baud rate-----------------------------*/
    switch (ui->cmb_baud_rate->currentIndex()) {
    case 0:
        global_port.setBaudRate(QSerialPort::Baud115200);
        break;
    case 1:
        global_port.setBaudRate(QSerialPort::Baud57600);
        break;
    case 2:
        global_port.setBaudRate(QSerialPort::Baud38400);
        break;
    case 3:
        global_port.setBaudRate(QSerialPort::Baud19200);
        break;
    case 4:
        global_port.setBaudRate(QSerialPort::Baud9600);
        break;
    case 5:
        global_port.setBaudRate(QSerialPort::Baud4800);
        break;
    case 6:
        global_port.setBaudRate(QSerialPort::Baud2400);
        break;
    default:
        global_port.setBaudRate(QSerialPort::Baud1200);
        break;
    }
    //open
    global_port.open(QIODevice::ReadWrite);
    ui->lab_status->setText("Connected");
    //test
//    global_port.write("1");



    //timer test
    myTimer->start () ;
}
void Serial::btn_close_port(bool)
{
    ui->lab_status->setText("Disconnected");
    global_port.close();
}
/*------------sending data---------------------*/
void Serial::btn_send_data(bool)
{
    qDebug("11111");
    QString datatest = ui->lint_send_data->text();
    QByteArray array = QByteArray::fromHex (datatest.toLatin1().data());//QString--->QByteArray
    global_port.write(array);
}
/*-----------receive data-----------------*/
void Serial::receive_data()
{
   QByteArray array = global_port.readAll();
   qDebug()<<array;
   if(ui->checkBox->checkState() == Qt::Checked){
      ui->plainTextEdit->insertPlainText(QString(array.toHex(' ').toUpper().append(' ')));
   }else {
       ui->plainTextEdit->insertPlainText(QString(array));
   }
}

void Serial::btn_timed_send()
{
    myTimer->start () ;

}

界面如图


期望按下timed_send键定时发送数据串口,但是按下以后并没有反应
是定时器设置有问题



离线西门铁柱

只看该作者 3楼 发表于: 2021-02-02
是不是串口没有打开呢。
离线suzhuorui

只看该作者 2楼 发表于: 2021-02-01
你那个超时的槽函数里面的qDebug<<"111"会不会输出,会输出就是串口发送有问题,不会输出就是槽函数没连接上
离线teallen

只看该作者 1楼 发表于: 2021-01-31
求助
快速回复
限100 字节
 
上一个 下一个