Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

Revision:
13:3d207bd7f387
Parent:
12:f9060e568ff9
Child:
14:4adfd8e600fe
--- a/main.cpp	Sun May 23 18:11:51 2021 +0000
+++ b/main.cpp	Mon May 24 17:51:59 2021 +0000
@@ -4,7 +4,7 @@
 #include "TSISensor.h"
 #include "MMA8451Q.h"
 #include "ball.h"
-
+#include "bloques.h"
 
 #define WS2812_BUF 256
 #define NUM_COLORS 6
@@ -34,6 +34,7 @@
 ball m_ball;
 bool direct_ball=0;
 Ticker refresh_ball;
+bloques Bloques;
 
 int angle=1;
 bool lose=false;
@@ -42,10 +43,11 @@
 void tsi_ctr_modeBtn(float tsi_newRead);
 void tsi_ctr_modeSlider(float tsi_newRead);
 void accel_ctr();
-void print_pixel(uint8_t valR, uint8_t valG, uint8_t valB, int numPixelMatrix_i, int numPixelMatrix_j, int numPixelMatrixOLD_i, int numPixelMatrixOLD_j);
+void print_pixel(uint8_t valR, uint8_t valG, uint8_t valB, int numPixelMatrix_i, int numPixelMatrix_j, int numPixelMatrixOLD_i, int numPixelMatrixOLD_j, uint8_t size=1);
 void setPixelColor(int numPixelMatrix, int r, int g, int b);
 void ctr_ball();
 void clear_matrix();
+void angle_rebote();
 
 int main()
 {   
@@ -54,7 +56,10 @@
     pc.printf("\r\n\r\nHola!\r\ncompilado el " __DATE__ ", " __TIME__ "\r\n");
     
     ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling
-    
+    for(int i=0; i<Bloques.getNumBloques(); i++){
+        bloque temp_blq=Bloques.getBloque(i);
+        print_pixel(temp_blq.getColR(),temp_blq.getColG(),temp_blq.getColB(), temp_blq.getCoordX(),temp_blq.getCoordY(), -1, -1, temp_blq.getSize());
+    }
     // set up the colours we want to draw with
     //int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f};
 
@@ -79,7 +84,6 @@
     
     print_pixel(255, 255, 255, m_ball.getCoordX(), m_ball.getCoordY(),-1,-1);
 
-
     // Now the buffer is written, rotate it
     // by writing it out with an increasing offset
     ws.write(px.getBuf());
@@ -170,7 +174,7 @@
         posSliderTouchOLD1=posSliderTouchTemp;
         
         
-        if(contadorRebote>=70){
+        if(contadorRebote>=140){
             posSliderTouch=posSliderTouchTemp;
         }
         
@@ -235,7 +239,7 @@
             contadorReboteA=0;
         }
         posAcelerometerOLD1=posAcelerometerTemp;
-        if(contadorReboteA>=10){
+        if(contadorReboteA>=40){
             posAcelerometer=posAcelerometerTemp;
         }
              
@@ -265,31 +269,35 @@
     }
 }
 
-void print_pixel(uint8_t valR, uint8_t valG, uint8_t valB, int numPixelMatrix_i, int numPixelMatrix_j, int numPixelMatrixOLD_i, int numPixelMatrixOLD_j) {
+void print_pixel(uint8_t valR, uint8_t valG, uint8_t valB, int numPixelMatrix_i, int numPixelMatrix_j, int numPixelMatrixOLD_i, int numPixelMatrixOLD_j, uint8_t size) {
     
     //printf ("\r\nRGB=> %ld, %ld, %ld \r\n", valR, valG, valB);
-    int numPixelMatrix;
-    if(numPixelMatrix_i%2==0){
-        numPixelMatrix=(numPixelMatrix_i*16)+numPixelMatrix_j;
-    }else{
-        numPixelMatrix=((numPixelMatrix_i*16)+15)-numPixelMatrix_j;
-    }
     
     if(numPixelMatrixOLD_i!=-1 and numPixelMatrixOLD_j!=-1){
-        
-        int numPixelMatrixOLD;
-        if(numPixelMatrixOLD_i%2==0){
-            numPixelMatrixOLD=(numPixelMatrixOLD_i*16)+numPixelMatrixOLD_j;
-        }else{
-            numPixelMatrixOLD=((numPixelMatrixOLD_i*16)+15)-numPixelMatrixOLD_j;
-        }        
-        
-        setPixelColor(numPixelMatrixOLD, 0, 0, 0);
+        for(int j=numPixelMatrixOLD_j; j<(numPixelMatrixOLD_j+size); j++){
+            uint8_t numPixelMatrixOLD;
+            if(numPixelMatrixOLD_i%2==0){
+                numPixelMatrixOLD=(numPixelMatrixOLD_i*16)+j;
+            }else{
+                numPixelMatrixOLD=((numPixelMatrixOLD_i*16)+15)-j;
+            }        
             
+            setPixelColor(numPixelMatrixOLD, 0, 0, 0);
+                
+        }
     }
-        
-    
-    setPixelColor(numPixelMatrix, valR, valG, valB);    
+    if(numPixelMatrix_i!=-1 or numPixelMatrix_j!=-1){
+        for(int j=numPixelMatrix_j; j<(numPixelMatrix_j+size); j++){
+            uint8_t numPixelMatrix;
+            if(numPixelMatrix_i%2==0){
+                numPixelMatrix=(numPixelMatrix_i*16)+j;
+            }else{
+                numPixelMatrix=((numPixelMatrix_i*16)+15)-j;
+            }            
+            
+            setPixelColor(numPixelMatrix, valR, valG, valB);   
+        } 
+    }
     ws.write(px.getBuf());
     
 }
@@ -312,12 +320,7 @@
     }
     else{
         if( (old_j==15 or old_j==0) and (angle!=1) ){
-            
-            if(angle==0){
-                angle=2;
-            }else{
-                angle=0;
-            }
+            angle_rebote();
             
         }else{
         
@@ -346,22 +349,58 @@
             
         }
     }
-    
+        
     /*if((barra[0]==old_j or barra[1]==old_j or barra[2]==old_j or barra[3]==old_j) and old_i==1){
         direct_ball=!direct_ball; 
     }*/
     
     if(!lose){
+        bool found_blq_i=false;
+        int i=0;
+        
+        while(!found_blq_i and i<Bloques.getNumBloques() ){
+            bloque temp_blq=Bloques.getBloque(i);
+            if((temp_blq.getCoordX()==(m_ball.getCoordX()+1))){
+                found_blq_i=true;
+            }
+            i++;
+        }
+        
+        bool found_blq_j=false;
+        int j=0;
+        if(found_blq_i){
+            int predict_Y=m_ball.predict_Y_axis(direct_ball, angle);
+            while(!found_blq_j and j<Bloques.getNumBloques() ){
+                bloque temp_blq=Bloques.getBloque(j);
+                int blq_pos_Y=(temp_blq.getCoordY()+temp_blq.getSize());
+                if((blq_pos_Y>=predict_Y and predict_Y>=temp_blq.getCoordY()) and temp_blq.getEnabled()){
+                    found_blq_j=true;
+                    direct_ball=!direct_ball;
+                    angle_rebote();
+                    print_pixel(temp_blq.getColR(), temp_blq.getColG(), temp_blq.getColB(), -1, -1, temp_blq.getCoordX(), temp_blq.getCoordY(), temp_blq.getSize());
+                    Bloques.disable_blq(j);
+                    //pc.printf("Bloques --> %d", Bloques.getBloque(j).getEnabled());
+                }
+                j++;
+            }
+        }
         m_ball.movement(direct_ball, angle);   
         print_pixel(255, 255, 255, m_ball.getCoordX(), m_ball.getCoordY(),old_i, old_j);
     }
 }
 
 void clear_matrix(){
-    for(int i=0; i<255; i++){
+    for(int i=0; i<256; i++){
         setPixelColor(i,0,0,0);
     }
     ws.write(px.getBuf());
 }
 
+void angle_rebote(){
+    if(angle==0){
+        angle=2;
+    }else if(angle==2){
+        angle=0;
+    }
+}