Qt实验----控制蜂鸣器

11 篇文章 1 订阅

一、Qt程序

1. mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

/*
 * file name:beep
 * date: 2021-08-21  08:13
 * version:1.0
 * author:luatao
 * describe:beep
 */

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    /* 按钮 */
    QPushButton *pushButton;
    /* 设置LED的状态 */
    void setBeepState();
    /* 获取LED的状态 */
    bool getBeepState();
private slots:
    /* 按键点击事件 */
    void pushButtonClicked();
};
#endif // MAINWINDOW_H

2. mainwindow.cpp

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

#include "mainwindow.h"
#include <QDebug>
#include <QGuiApplication>
#include <QScreen>
#include <QRect>

/*
 * file name:beep
 * date: 2021-08-21  08:14
 * version:1.0
 * author:luatao
 * describe:beep
 */

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 获取屏幕的分辨率 Qt官方建议使用这种方法设置屏幕分辨率
防止多屏设备导致对应不上,注意,这是获取整个桌面系统的分辨率*/
    QList <QScreen *> list_screen = QGuiApplication::screens();

    /* 如果是ARM平台,直接设置大小为屏幕的大小 */
    #if __arm__
        /* 重设大小 */
        this->resize(list_screen.at(0)->geometry().width(),list_screen.at(0)->geometry().height());
    #else
        /* 否则则设置主窗体大小为 800x480 */
        this->resize(800,480);
    #endif

    /* 实例化按键 */
    pushButton = new QPushButton(this);

    /* 按键居中显示 */
    pushButton->setMinimumSize(200,50);  // 设置按键的大小
    pushButton->setGeometry((this->width() - pushButton->width())/2,
                            (this->height() - pushButton->height())/2,
                            pushButton->width(),pushButton->height()); // 设置按键的大小和位置

    /* 获取Beep的状态 */
    //getBeepState();

    /* 信号槽连接 */
    connect(pushButton, SIGNAL(clicked()),this, SLOT(pushButtonClicked()));

}


MainWindow::~MainWindow()
{
}

/* 设置Beep的状态 */
void MainWindow::setBeepState()
{
    char const *filename = "/dev/miscbeep";  // 可执行文件名
    int fd,ret;  //  fd: 文件句柄 ret:函数操作返回值
    unsigned char databuf[1]; // 缓冲区
    static bool state = false;


    /* 在设置状态前先读取状态 */
  //  bool state = getBeepState();

    /* 打开LED文件 */
    fd = open(filename, O_RDWR);  // 可读可写
    if(fd < 0){  // 打开文件错误
       ::close(fd);
    }

    // 判断蜂鸣器的状态
    if(state){
        databuf[0] = 0;
        state = false;
    }
    else{
        databuf[0] = 1;
        state = true;
    }

    /* 向文件中写入数据 */
     ret = write(fd, databuf, sizeof(databuf));
        if(ret < 0){
            ::close(fd);
        }else{ // 写入成功
     }

    /* 关闭文件 */
    ::close(fd);

    /* 重新获取Beep的状态 */
   // getBeepState();
}

/* 获取Beep的状态 */

bool MainWindow::getBeepState()
{
    char const *filename = "/dev/miscbeep";  // 可执行文件名
    int fd,ret;  //  fd: 文件句柄 ret:函数操作返回值
    char databuf[1]; // 缓冲区

    /* 打开LED文件 */
    fd = open(filename, O_RDWR);  // 可读可写
    if(fd < 0){  // 打开文件错误
       ::close(fd);
    }

    /* 读取文件所有数据 */
    ret = read(fd, databuf, sizeof(databuf));
    if (ret < 0) {  // 读取文件失败
        ::close(fd);
    }

    /* 打印出读出的值 */
    qDebug()<<"databuf:" <<databuf <<endl;

    /* 关闭文件 */
    ::close(fd);

    QString irValue = databuf;

    if(irValue == "1"){  // 关闭Beep
        pushButton->setText("light up");
        return true;
    }else{
        pushButton->setText("extinguish");
        return false;
    }
}
/* 按键点击事件 */
void MainWindow::pushButtonClicked()
{
    /* 反转Beep的状态 */
    setBeepState();
}

二、运行效果

运行后在屏幕上显示一个按钮,通过点击按钮可以实现beep的状态的反转。

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值