| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #include "gpiobutten.h"
- #include "QFile"
- GpioButten::GpioButten(QObject *parent) : QObject(parent)
- {
- QFile exportFile("/sys/class/gpio/export");
- if (exportFile.open(QIODevice::WriteOnly)) {
- exportFile.write(QByteArray::number(PG(8)));
- exportFile.close();
- }
- QFile dirFile(QString("/sys/class/gpio/gpio%1/direction").arg(PG(8)));
- dirFile.open(QIODevice::WriteOnly);
- dirFile.write("in");
- dirFile.close();
- m_lastvalue = 0;
- connect(&m_timer, &QTimer::timeout, this, &GpioButten::onPoll);
- m_timer.start(20);
- }
- void GpioButten::onPoll()
- {
- QString valPath = QString("/sys/class/gpio/gpio%1/value").arg(PG(8));
- QFile valFile(valPath);
- if (!valFile.open(QIODevice::ReadOnly)) return;
- QTextStream in(&valFile);
- int currentValue = in.readLine().toInt();
- valFile.close();
- if(currentValue != m_lastvalue)
- {
- if (!m_debounceTimer.isValid()) {
- m_debounceTimer.start();
- } else if (m_debounceTimer.elapsed() > 50) {
- // 假设低电平有效(按下为0),高电平释放
- if (currentValue == 0) {
- emit pressed();
- } else {
- //emit released();
- }
- m_lastvalue = currentValue;
- m_debounceTimer.invalidate();
- }
- } else {
- m_debounceTimer.invalidate();
- }
- }
- GpioButten:: ~GpioButten()
- {
- QFile unexportFile("/sys/class/gpio/unexport");
- if (unexportFile.open(QIODevice::WriteOnly)) {
- unexportFile.write(QByteArray::number(PG(8)));
- unexportFile.close();
- }
- }
|