Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

Revision:
7:59efb2d370b3
Parent:
6:0004357c1faa
Child:
8:9e69e576d1be
--- a/main.cpp	Fri May 21 18:44:58 2021 +0000
+++ b/main.cpp	Fri May 21 19:09:00 2021 +0000
@@ -27,6 +27,7 @@
 float tsi_oldRead=0;
 int counter_tsi=0;
 int posAcelerometerTemp, posAcelerometer=0, posAcelerometerOLD=0, posAcelerometerOLD1=0, contadorReboteA=0;
+int posSliderTouchTemp, posSliderTouch=0, posSliderTouchOLD=0, posSliderTouchOLD1=0, contadorRebote=0;
 
 //int pixel=8;
 
@@ -34,6 +35,7 @@
 //void control_accel();
 void update_barra(int led_apagar, int led_encender, int act_barra );
 void tsi_ctr_modeBtn(float tsi_newRead);
+void tsi_ctr_modeSlider(float tsi_newRead);
 void accel_ctr();
 
 
@@ -85,6 +87,7 @@
         }
         else{
             if(sel_opcio==1){
+                tsi_ctr_modeSlider(tsi.readPercentage());
             }
             else if(sel_opcio==2){
                 accel_ctr();
@@ -138,6 +141,56 @@
     //tsi_oldRead=tsi_newRead;
 }
 
+void tsi_ctr_modeSlider(float tsi_newRead){
+    //Multiplicamos lo que lee el tsi.readPercentage() por 100 para tener un porcentaje del 0 al 100% en lugar del 0 al 1 que devuelve dicha función tsi.readPercentage().
+    //Lo multiplicamos por 1.4 para obtener un ranto de entre 0 y 140.
+    //Le restamos 70 para que el 50% leido por el tsi represente el 0, de esta forma ahora el rango es de -70 a +70.
+    //Dividimos entre 10 para obtener unos valores entre -7 y +7 que son las posiciones que puede tomar la barra inferior si se trata de una barra de 4 pixeles como es el caso.
+    posSliderTouchTemp=(((tsi_newRead*100)*1.4)-70)/10;
+     
+    //Controlamos que no se salga de las posiciones posibles de la barra inferior.
+    if(posSliderTouchTemp>-7 and posSliderTouchTemp<7){
+        //pc.printf("\r\n Porcentaje=%d",posSliderTouchTemp);
+        
+        //Se controla los rebotes del TSI ya que sino da saltos, por eso se incrementa un contador cuando detecta una misma posicion mas de una vez seguida.
+        if(posSliderTouchTemp==posSliderTouchOLD1){
+            contadorRebote=contadorRebote+1;
+        }else{
+            contadorRebote=0;
+        }
+        posSliderTouchOLD1=posSliderTouchTemp;
+        
+        
+        if(contadorRebote>=8){
+            posSliderTouch=posSliderTouchTemp;
+        }
+        
+         
+    }
+    
+    if(posSliderTouch!=posSliderTouchOLD){
+        //Se suaviza el movimiento de la barra inferior para que de un efecto de scroll mas bonito y no tan brusco, 
+        //por eso se realiza un for para que pase por todas las posiciones hasta la posicoon de la barra objetivo.
+        if(posSliderTouch>posSliderTouchOLD){
+            for(int p=posSliderTouchOLD; p<posSliderTouch; p++){
+                update_barra(0,(NUM_LEDS_BARRA-1), 1 ); //if rigth
+                ws.write(px.getBuf());
+                //printBar( 249, 0, 0, p);
+            }
+        }else if(posSliderTouch<posSliderTouchOLD){
+            for(int p=posSliderTouchOLD; p>posSliderTouch; p--){
+                update_barra((NUM_LEDS_BARRA-1), 0, -1 ); //if left
+                ws.write(px.getBuf());
+                //printBar( 249, 0, 0, p);
+            }
+        }
+        posSliderTouchOLD=posSliderTouch;
+        //pc.printf("\r\n Touch");
+        
+    }
+    
+}
+
 /*void control_tsi(float tsi_newRead){
     float percent= tsi_newRead; //tsi.readPercentage();
     if( (percent < 0.4) && percent!=0 ){ //if left