Test application for Freedom KL25Z, mouse driven by accelerometer and click with TSI interface

Dependencies:   MMA8451Q TSI USBDevice mbed

Fork of Airmouse by Frederic Thierry

main.cpp

Committer:
matheusBordin
Date:
2016-09-10
Revision:
1:1ab1608b4249
Parent:
0:a7df8e8cc00c

File content as of revision 1:1ab1608b4249:

/****************************************
 * AirMouse em FRDM - KL25Z
 * Utiliza os movimentos do acelerômetro nos
 * eixos x e y para movimentar o cursor e o
 * touch capacitivo como os botôes esquerdo
 * e direito. Também possui a função de scroll
 * utilizando o touch e o acelerômetro.
 *
 * Projeto feito por Matheus Bordin Gomes
 ****************************************/
 
#include "mbed.h"
#include "USBMouse.h" //Parte da biblioteca "USBDevice"
#include "MMA8451Q.h" //Biblioteca para utilizar o acelerômetro
#include "TSISensor.h" //Biblioteca do sensor touch capacitivo

#define MMA8451_I2C_ADDRESS (0x1d<<1)

USBMouse mouse;
TSISensor tsi;
MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);

DigitalOut ledRight(LED_RED);
DigitalOut ledLeft(LED_BLUE);
DigitalOut working(LED_GREEN);

int main(){  
    float click = 0; //Representa os botões do mouse
    int16_t x = 0; //Representa a coordenada x do cursor
    int16_t y = 0; //Representa a coordenada y do cursor
    int16_t scroll = 0; //Representa a velocidade de scroll
    
    ledRight = 1; //Led de status do botão direito
    ledLeft = 1; //Led de status do botão esquerdo
    working = 0; //Led de status do mouse

    while (true){
        x = -9.8 * acc.getAccY(); //Leitura do acelerômetro em y para o 'x'
        y = 9.8 * acc.getAccX(); //Leitura do acelerômetro em x pra o 'y'
        scroll = 1.8 * acc.getAccX(); //Leitura do acelerômetro em y para scroll
        
        click = tsi.readPercentage(); //Leitura do touch capacitivo
        
        /**
         * Implementa a movimentação do cursor com base
         * nos movimentos de rotação do microcontrolador
         * nos eixos x e y.
         **/
        mouse.move(x, y);
            
       /**
         * Implementa o botão direito do mouse
         * na parte direita do touch capacitivo.
         * Também acende o led amarelo para mostrar
         * que o botão está pressionado.
         **/    
        if((click<0.30) && (click>0)){
            mouse.press(MOUSE_RIGHT);
            working = 1;
            ledRight = 0; 
        } else{
            mouse.release(MOUSE_RIGHT);
            ledRight = 1;
            working = 0;
        }
        
        wait(0.001);
       
        /**
         * Implementa o botão esquerdo do mouse
         * na parte esquerda do touch capacitivo.
         * Também acende o led azul para mostrar
         * que o botão está pressionado.
         **/
        if (click>0.70){
            mouse.press(MOUSE_LEFT);
            working = 1;
            ledLeft = 0;           
        } else{
            mouse.release(MOUSE_LEFT);
            ledLeft = 1;
            working = 0;
        }
        
        wait(0.001);
        
        /**
         * Implementa o scroll na parte central
         * do touch capacitivo.
         * Também acende o led rosa para mostrar
         * que o scroll está em funcionamento.
         **/ 
        if((click>0.35) && (click<0.65)){
            mouse.scroll(scroll);
            working = 1;
            ledRight = 0;
            ledLeft = 0;
        } else{
            ledRight = 1;
            ledLeft = 1;
            working = 0;
        }
            
        wait(0.001);
    }
}