Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) How to respond to the user shaking the mobile phone, example 1

 

 

 

 

 

 

Technical facts

 

Application type(s)

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: QtAccelerometer.pro

 

HEADERS += accelerometer.h \
    athread.h
SOURCES += main.cpp \
    accelerometer.cpp \
    athread.cpp

 

 

 

 

 

accelerometer.cpp

 

///Code from the Nokia Wiki
///http://wiki.forum.nokia.com/index.php/How_to_get_accelerometer_data_of_N900_using_Qt
#include <QString>
#include <QFile>
#include <QTextStream>
#include <QGridLayout>

#include "accelerometer.h"

Accelerometer::Accelerometer(QWidget *parent)
    : QWidget(parent)
{
    setFont(QFont("Nokia Sans", 50, QFont::Bold));

    QGridLayout *grid = new QGridLayout;

    label1 = new QLabel("X");
    label1->setAlignment(Qt::AlignCenter);
    grid->addWidget(label1, 0, 0);

    label2 = new QLabel("Y");
    label2->setAlignment(Qt::AlignCenter);
    grid->addWidget(label2, 0, 1);

    label3 = new QLabel("Z");
    label3->setAlignment(Qt::AlignCenter);
    grid->addWidget(label3, 0, 2);

    xlabel = new QLabel("NaN");
    xlabel->setAlignment(Qt::AlignCenter);
    grid->addWidget(xlabel, 1, 0);

    ylabel = new QLabel("NaN");
    ylabel->setAlignment(Qt::AlignCenter);
    grid->addWidget(ylabel, 1, 1);

    zlabel = new QLabel("NaN");
    zlabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
    grid->addWidget(zlabel, 1, 2);

    setLayout(grid);

    myThread = new aThread(this);
    connect(myThread, SIGNAL(deviceOrientation(QString, QString, QString)),
            this, SLOT(showData(QString, QString, QString)));
    myThread->start(QThread::NormalPriority);
}

void Accelerometer::showData(QString x, QString y, QString z)
{
    xlabel->setText(x);
    ylabel->setText(y);
    zlabel->setText(z);
}


 

 

 

 

 

accelerometer.h

 

///Code from the Nokia Wiki
///http://wiki.forum.nokia.com/index.php/How_to_get_accelerometer_data_of_N900_using_Qt
#ifndef ACCELEROMETER_H
#define ACCELEROMETER_H

#include <QWidget>
#include <QLabel>

#include "athread.h"

class Accelerometer : public QWidget
{
    Q_OBJECT

public:
    Accelerometer(QWidget *parent = 0);

public slots:
    void showData(QString x, QString y, QString z);

private:
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
    QLabel *xlabel;
    QLabel *ylabel;
    QLabel *zlabel;
    aThread *myThread;
};

#endif // ACCELEROMETER_H

 

 

 

 

 

athread.cpp

 

///Code from the Nokia Wiki
///http://wiki.forum.nokia.com/index.php/How_to_get_accelerometer_data_of_N900_using_Qt
#include <QFile>
#include <QTextStream>
#include <QTimer>
#include <QStringList>

#include "athread.h"

aThread::aThread(QObject *parent)
    : QThread(parent)
{
}

void aThread::run()
{
    QTimer timer;
    connect(&timer, SIGNAL(timeout()), this, SLOT(updateCoords()));
    timer.start(20); // 50 Hz update rate
    exec();
}

void aThread::updateCoords()
{
     QFile file("/sys/class/i2c-adapter/i2c-3/3-001d/coord");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;
     QTextStream in(&file);
     QString data = in.readAll();
     processCoords(data);
}

void aThread::processCoords(QString &data)
{
    QStringList data_splited = data.split(" ");

    x = data_splited[0];
    y = data_splited[1];
    z = data_splited[2];

    emit deviceOrientation(x, y, z);
}



 

 

 

 

 

athread.h

 

///Code from the Nokia Wiki
///http://wiki.forum.nokia.com/index.php/How_to_get_accelerometer_data_of_N900_using_Qt
#ifndef ATHREAD_H
#define ATHREAD_H

#include <QThread>
#include <QString>

class aThread : public QThread
{
  Q_OBJECT

public:
    aThread(QObject *parent = 0);
    void run();

    QString x;
    QString y;
    QString z;

public slots:
    void updateCoords();
    void processCoords(QString &data);

signals:
    void deviceOrientation(QString x, QString y, QString z);
};

#endif // ATHREAD_H

 

 

 

 

 

main.cpp

 

///Code from the Nokia Wiki
///http://wiki.forum.nokia.com/index.php/How_to_get_accelerometer_data_of_N900_using_Qt
#include <QApplication>

#include "accelerometer.h"

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  Accelerometer acc;
  acc.showFullScreen();
  return app.exec();
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict