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

Revision:
1:1ab1608b4249
Parent:
0:a7df8e8cc00c
--- a/main.cpp	Mon Jun 24 23:23:47 2013 +0000
+++ b/main.cpp	Sat Sep 10 19:22:49 2016 +0000
@@ -1,41 +1,106 @@
+/****************************************
+ * 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"
-#include "MMA8451Q.h"
-#include "TSISensor.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;
-Serial pc(USBTX, USBRX); // tx, rx
+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;
-    int16_t x = 0;
-    int16_t y = 0;
-    TSISensor tsi;
-    MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
-
-    while (1) {
-        x = -10*acc.getAccY();
-        y = 10*acc.getAccX();
+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);
-    
-        click=tsi.readPercentage();
-        //pc.printf("%f\n",click);
-        if (click>0.70)
+            
+       /**
+         * 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);
-            else
+            working = 1;
+            ledLeft = 0;           
+        } else{
             mouse.release(MOUSE_LEFT);
-            
-          if((click<0.30)&&(click>0))
-            
-            mouse.press(MOUSE_RIGHT);
-            else
-            mouse.release(MOUSE_RIGHT);
+            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);
-       
     }
 }
\ No newline at end of file