Programa de MIP
Dependencies: bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q
Diff: main.cpp
- 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; + } +}