Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

Revision:
4:3f515bbfd20c
Parent:
3:769c63f85711
Child:
5:a0c1625fae57
--- a/main.cpp	Wed May 19 19:12:53 2021 +0000
+++ b/main.cpp	Fri May 21 18:01:42 2021 +0000
@@ -16,28 +16,36 @@
 // See the program page for information on the timing numbers
 // The given numbers are for the K64F
 WS2812 ws(D9, WS2812_BUF, 0, 5, 5, 0);
-MMA8451Q accel(PTE25, PTE24, ACCEL_ADRESS_I2C );
+MMA8451Q acc(PTE25, PTE24, ACCEL_ADRESS_I2C );
+
+///////
+Serial pc(USBTX, USBRX);
+//////
 
 TSISensor tsi;
 int barra[NUM_LEDS_BARRA]={6,7,8,9};
 float tsi_oldRead=0;
 int counter_tsi=0;
+int posAcelerometerTemp, posAcelerometer=0, posAcelerometerOLD=0, posAcelerometerOLD1=0, contadorReboteA=0;
 
 //int pixel=8;
 
 //void control_tsi(float tsi_newRead);
-void control_accel();
+//void control_accel();
 void update_barra(int led_apagar, int led_encender, int act_barra );
 void tsi_ctr_modeBtn(float tsi_newRead);
+void accel_ctr();
 
 
 int main()
 {
- 
+    pc.baud(115200);
+    pc.printf("\r\n\r\nHola!\r\ncompilado el " __DATE__ ", " __TIME__ "\r\n");
+    
     ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling
     
     // set up the colours we want to draw with
-    int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f};
+    //int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f};
 
     // for each of the colours (j) write out 10 of them
     // the pixels are written at the colour*10, plus the colour position
@@ -73,9 +81,9 @@
             wait(0.075);
         }*/
          
-        tsi_ctr_modeBtn(tsi.readPercentage());
+        //tsi_ctr_modeBtn(tsi.readPercentage());
         
-        control_accel();
+        accel_ctr();
         
     }
  
@@ -163,17 +171,18 @@
     //ws.write(px.getBuf());
 }*/
 void update_barra(int led_apagar, int led_encender, int act_barra ){
-    px.Set(barra[led_apagar], 0x0);  //apagamos el último led
+    px.Set(barra[led_apagar], 0x0);  //apagamos el led
                 
     for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array
         barra[i]=barra[i]+act_barra;
+        pc.printf("\r\n UPDATEEE ------- =%d", barra[i]);
     }
             
-    px.Set(barra[led_encender], 0x2f0000); //encendemos el siguiente led a la izquierda
+    px.Set(barra[led_encender], 0x2f0000); //encendemos el siguiente led
     px.SetI(barra[led_encender]%WS2812_BUF, 0xff);
 }
 
-void control_accel(){
+/*void control_accel(){
     float acY= accel.getAccY();
     if(acY>0.3){
         if(barra[NUM_LEDS_BARRA-1]<15){
@@ -204,6 +213,93 @@
             }
         }
     }
+}*/
+
+/*    void setPixelColor(int numPixelMatrix, int r, int g, int b){
+        px.SetI(numPixelMatrix,255);
+        px.SetR(numPixelMatrix,r);
+        px.SetG(numPixelMatrix,g);
+        px.SetB(numPixelMatrix,b);
+    }
+ 
+    void refreshLightStrips(){
+        ws.write(px.getBuf());  
+    }
+    
+ void printBar(uint8_t valR, uint8_t valG, uint8_t valB, int pos) {
+    
+    printf ("\r\nRGB=> %ld, %ld, %ld \r\n", valR, valG, valB);
+    
+    if(pos>=-6 and pos<=6){
+        for (unsigned ii = 240; ii < 256; ii++) {
+            setPixelColor(ii, 0, 0, 0);
+        }
+        setPixelColor(256-10+pos, valR, valG, valB);
+        setPixelColor(256-9+pos, valR, valG, valB);
+        setPixelColor(256-8+pos, valR, valG, valB);
+        setPixelColor(256-7+pos, valR, valG, valB);
+
+    }
+    
+    refreshLightStrips();
+    
+}
+
+*/
+void accel_ctr(){
+    float nearest = floor(abs(((acc.getAccY()+1)*100)/2)); //para obtener un valor 0 y 100 
+    posAcelerometerTemp=(((nearest)*2.8)-140)/10;
+    //pc.printf("\r\n Porcentaje=%d",posAcelerometerTemp);
+    if(posAcelerometerTemp<=-7){
+        posAcelerometerTemp=-6;
+    }else if(posAcelerometerTemp>=7){
+        posAcelerometerTemp=6;
+    }
+    if(posAcelerometerTemp>-7 and posAcelerometerTemp<7){
+        pc.printf("\r\n Porcentaje=%d",posAcelerometerTemp);
+        
+        //pc.printf("\r\n Ha entrat");
+        if(posAcelerometerTemp==posAcelerometerOLD1){
+            contadorReboteA=contadorReboteA+1;
+        }else{
+            contadorReboteA=0;
+        }
+        posAcelerometerOLD1=posAcelerometerTemp;
+        if(contadorReboteA>=100){
+            posAcelerometer=posAcelerometerTemp;
+            pc.printf("\r\n NEWWWW =%d",posAcelerometer);
+            pc.printf("\r\n OOOLD =%d",posAcelerometerOLD);
+        }
+             
+    }
+    if(posAcelerometer!=posAcelerometerOLD){
+        if(posAcelerometer>posAcelerometerOLD){
+            for(int p=posAcelerometerOLD; p<=posAcelerometer; p++){ //movemos la barrita hasta la posición actual, mostrando la animación
+                if(barra[NUM_LEDS_BARRA-1]<15){
+                    update_barra(0,(NUM_LEDS_BARRA-1), 1 ); //if rigth
+                    ws.write(px.getBuf());
+                }
+                //pc.printf("\r\n HOLAAAA DRETA=%d",p);
+                //printBar( 255, 0, 0, p);
+                
+            }
+        }else if(posAcelerometer<posAcelerometerOLD){
+            for(int p=posAcelerometerOLD; p>=posAcelerometer; p--){
+                //printBar( 255, 0, 0, p);
+                if(barra[0]>0){
+                    update_barra((NUM_LEDS_BARRA-1), 0, -1 ); //if left
+                    ws.write(px.getBuf());
+                }
+                //pc.printf("\r\n HOLAAAA ESQUERRA=%d",p);
+                
+            }
+         
+        }
+            
+       posAcelerometerOLD=posAcelerometer;
+        
+        //pc.printf("\r\n Acelerometer");
+    }
 }