讯为4412开发板利用嗡鸣器实现按键beep音
环境:
讯为4412开发板,linux系统,QT5.10.0
原理:
1、通过设备文件来实现嗡鸣器功能,文件在开发板的路径为“/dev/buzzer_ctl”
实现方法:
fb=open("/dev/buzzer_ctl",0)
如果打开成功,就可以进行嗡鸣器操作。
2、通过ioctl进行嗡鸣器的开关控制
打开嗡鸣器:ioctl(fb,1,0)
关闭嗡鸣器:ioctl(fb,0,0)
3、通过延时函数,使嗡鸣器响一定的时间后关闭
延时50毫秒后关闭:usleep(50000);
函数“usleep”的参数是微妙,50000表示的是50毫秒,其他时间可以根据需要自由设定。
以下是代码实现
buzzer.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = buzzer
TEMPLATE = app
SOURCES += main.cpp\
buzzertest.cpp
HEADERS += buzzertest.h
FORMS += buzzertest.ui
buzzertest.h
#ifndef BUZZERTEST_H
#define BUZZERTEST_H
#include <QMainWindow>
namespace Ui {
class buzzertest;
}
class buzzertest : public QMainWindow
{
Q_OBJECT
public:
explicit buzzertest(QWidget *parent = 0);
~buzzertest();
protected:
void changeEvent(QEvent *e);
private slots:
void on_pushButton_clicked();
private:
Ui::buzzertest *ui;
};
#endif // BUZZERTEST_H
buzzertest.cpp
#include "buzzertest.h"
#include "ui_buzzertest.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
static int fb;
buzzertest::buzzertest(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::buzzertest)
{
ui->setupUi(this);
fb=open("/dev/buzzer_ctl",0);
if(fb<0)
{
perror("open device buzzer failed!");
exit(1);
}
}
buzzertest::~buzzertest()
{
delete ui;
}
void buzzertest::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void buzzertest::on_pushButton_clicked()
{
ioctl(fb,1,0);
usleep(50000);
ioctl(fb,0,0);
}
main.cpp
#include "buzzertest.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
buzzertest w;
w.show();
return a.exec();
}