Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

Committer:
anna_dot
Date:
Wed May 26 18:28:49 2021 +0000
Revision:
19:e57116ff4c59
Parent:
17:0ecf3108f79e
Child:
20:6f5f486bd5c3
hecho con vectores, y bloques salen automaticamente

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anna_dot 0:eb102efc70ff 1 #include "mbed.h"
anna_dot 0:eb102efc70ff 2 #include "WS2812.h"
anna_dot 0:eb102efc70ff 3 #include "PixelArray.h"
anna_dot 0:eb102efc70ff 4 #include "TSISensor.h"
anna_dot 0:eb102efc70ff 5 #include "MMA8451Q.h"
anna_dot 9:777b0535d3bb 6 #include "ball.h"
anna_dot 13:3d207bd7f387 7 #include "bloques.h"
anna_dot 0:eb102efc70ff 8
anna_dot 0:eb102efc70ff 9 #define WS2812_BUF 256
anna_dot 0:eb102efc70ff 10 #define NUM_COLORS 6
anna_dot 0:eb102efc70ff 11 #define NUM_LEDS_PER_COLOR 10
anna_dot 0:eb102efc70ff 12 #define NUM_LEDS_BARRA 4
anna_dot 0:eb102efc70ff 13 #define ACCEL_ADRESS_I2C (0X1D<<1)
anna_dot 19:e57116ff4c59 14
anna_dot 19:e57116ff4c59 15
anna_dot 0:eb102efc70ff 16
anna_dot 0:eb102efc70ff 17 PixelArray px(WS2812_BUF);
anna_dot 0:eb102efc70ff 18
anna_dot 0:eb102efc70ff 19 // See the program page for information on the timing numbers
anna_dot 0:eb102efc70ff 20 // The given numbers are for the K64F
anna_dot 19:e57116ff4c59 21 WS2812 wsLEDS(D9, WS2812_BUF, 0, 5, 5, 0);
anna_dot 4:3f515bbfd20c 22 MMA8451Q acc(PTE25, PTE24, ACCEL_ADRESS_I2C );
anna_dot 4:3f515bbfd20c 23
anna_dot 4:3f515bbfd20c 24 ///////
anna_dot 4:3f515bbfd20c 25 Serial pc(USBTX, USBRX);
anna_dot 4:3f515bbfd20c 26 //////
anna_dot 0:eb102efc70ff 27
anna_dot 0:eb102efc70ff 28 TSISensor tsi;
anna_dot 0:eb102efc70ff 29 int barra[NUM_LEDS_BARRA]={6,7,8,9};
anna_dot 0:eb102efc70ff 30 float tsi_oldRead=0;
anna_dot 0:eb102efc70ff 31 int counter_tsi=0;
anna_dot 4:3f515bbfd20c 32 int posAcelerometerTemp, posAcelerometer=0, posAcelerometerOLD=0, posAcelerometerOLD1=0, contadorReboteA=0;
aarmdlr 7:59efb2d370b3 33 int posSliderTouchTemp, posSliderTouch=0, posSliderTouchOLD=0, posSliderTouchOLD1=0, contadorRebote=0;
anna_dot 9:777b0535d3bb 34 ball m_ball;
anna_dot 10:dccb2be41fbd 35 bool direct_ball=0;
anna_dot 10:dccb2be41fbd 36 Ticker refresh_ball;
anna_dot 13:3d207bd7f387 37 bloques Bloques;
anna_dot 19:e57116ff4c59 38 Ticker refresh_bloques;
anna_dot 19:e57116ff4c59 39 int cont_ball_rebote=0;
anna_dot 0:eb102efc70ff 40
aarmdlr 12:f9060e568ff9 41 int angle=1;
aarmdlr 12:f9060e568ff9 42 bool lose=false;
anna_dot 9:777b0535d3bb 43
anna_dot 0:eb102efc70ff 44 void update_barra(int led_apagar, int led_encender, int act_barra );
anna_dot 0:eb102efc70ff 45 void tsi_ctr_modeBtn(float tsi_newRead);
aarmdlr 7:59efb2d370b3 46 void tsi_ctr_modeSlider(float tsi_newRead);
anna_dot 4:3f515bbfd20c 47 void accel_ctr();
anna_dot 13:3d207bd7f387 48 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);
anna_dot 9:777b0535d3bb 49 void setPixelColor(int numPixelMatrix, int r, int g, int b);
anna_dot 10:dccb2be41fbd 50 void ctr_ball();
anna_dot 19:e57116ff4c59 51 void clear_matrix(int offset);
anna_dot 13:3d207bd7f387 52 void angle_rebote();
anna_dot 19:e57116ff4c59 53 bool addLineOfBloques();
anna_dot 0:eb102efc70ff 54
anna_dot 0:eb102efc70ff 55 int main()
aarmdlr 12:f9060e568ff9 56 {
aarmdlr 12:f9060e568ff9 57 int sel_opcio=0;
anna_dot 4:3f515bbfd20c 58 pc.baud(115200);
anna_dot 4:3f515bbfd20c 59 pc.printf("\r\n\r\nHola!\r\ncompilado el " __DATE__ ", " __TIME__ "\r\n");
anna_dot 4:3f515bbfd20c 60
anna_dot 19:e57116ff4c59 61 wsLEDS.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling
anna_dot 13:3d207bd7f387 62 for(int i=0; i<Bloques.getNumBloques(); i++){
anna_dot 13:3d207bd7f387 63 bloque temp_blq=Bloques.getBloque(i);
anna_dot 13:3d207bd7f387 64 print_pixel(temp_blq.getColR(),temp_blq.getColG(),temp_blq.getColB(), temp_blq.getCoordX(),temp_blq.getCoordY(), -1, -1, temp_blq.getSize());
anna_dot 13:3d207bd7f387 65 }
anna_dot 19:e57116ff4c59 66
anna_dot 0:eb102efc70ff 67 for(int i=0; i<NUM_LEDS_BARRA; i++){
anna_dot 0:eb102efc70ff 68 px.Set(barra[i], 0x2f0000);
anna_dot 0:eb102efc70ff 69 }
anna_dot 9:777b0535d3bb 70
anna_dot 0:eb102efc70ff 71 for(int i=0; i<NUM_LEDS_BARRA; i++){
anna_dot 8:9e69e576d1be 72 px.SetI(barra[i]%WS2812_BUF, 255); //0xff
anna_dot 8:9e69e576d1be 73 }
anna_dot 0:eb102efc70ff 74
anna_dot 9:777b0535d3bb 75 print_pixel(255, 255, 255, m_ball.getCoordX(), m_ball.getCoordY(),-1,-1);
anna_dot 19:e57116ff4c59 76 wsLEDS.write(px.getBuf());
anna_dot 10:dccb2be41fbd 77
anna_dot 19:e57116ff4c59 78 refresh_ball.attach(&ctr_ball, 0.1);
anna_dot 19:e57116ff4c59 79 //refresh_bloques.attach(&addLineOfBloques, 7);
anna_dot 0:eb102efc70ff 80 while (1) {
anna_dot 6:0004357c1faa 81 if(sel_opcio==0){
anna_dot 6:0004357c1faa 82 tsi_ctr_modeBtn(tsi.readPercentage());
anna_dot 6:0004357c1faa 83 }
anna_dot 6:0004357c1faa 84 else{
anna_dot 6:0004357c1faa 85 if(sel_opcio==1){
aarmdlr 7:59efb2d370b3 86 tsi_ctr_modeSlider(tsi.readPercentage());
anna_dot 6:0004357c1faa 87 }
anna_dot 6:0004357c1faa 88 else if(sel_opcio==2){
anna_dot 6:0004357c1faa 89 accel_ctr();
anna_dot 6:0004357c1faa 90 }
anna_dot 6:0004357c1faa 91 }
anna_dot 10:dccb2be41fbd 92 //pc.printf("\r\n Touch %d", (rand()%(9-6 + 1) + 6));
anna_dot 9:777b0535d3bb 93
anna_dot 0:eb102efc70ff 94 }
anna_dot 10:dccb2be41fbd 95
anna_dot 0:eb102efc70ff 96 }
anna_dot 0:eb102efc70ff 97
anna_dot 0:eb102efc70ff 98 void tsi_ctr_modeBtn(float tsi_newRead){
anna_dot 0:eb102efc70ff 99
anna_dot 0:eb102efc70ff 100 if(tsi_newRead!=0.0){
anna_dot 0:eb102efc70ff 101 if(tsi_newRead>0.6 and tsi_oldRead>0.6){
anna_dot 0:eb102efc70ff 102 counter_tsi++;
anna_dot 0:eb102efc70ff 103 }
anna_dot 0:eb102efc70ff 104 else {
anna_dot 0:eb102efc70ff 105 if(tsi_newRead<0.4 and tsi_oldRead<0.4){
anna_dot 0:eb102efc70ff 106 counter_tsi++;
anna_dot 0:eb102efc70ff 107 }
anna_dot 0:eb102efc70ff 108 else{
anna_dot 0:eb102efc70ff 109 counter_tsi=0;
anna_dot 0:eb102efc70ff 110 }
anna_dot 0:eb102efc70ff 111 }
anna_dot 0:eb102efc70ff 112 tsi_oldRead=tsi_newRead;
anna_dot 0:eb102efc70ff 113
anna_dot 0:eb102efc70ff 114
aarmdlr 12:f9060e568ff9 115 if(counter_tsi == 10450){
anna_dot 0:eb102efc70ff 116 if( (tsi_newRead < 0.4) && tsi_newRead!=0 ){ //if left
anna_dot 0:eb102efc70ff 117 if(barra[0]>0){
anna_dot 0:eb102efc70ff 118 update_barra((NUM_LEDS_BARRA-1),0, -1 );
anna_dot 0:eb102efc70ff 119 }
anna_dot 0:eb102efc70ff 120 }
anna_dot 0:eb102efc70ff 121 else{
anna_dot 0:eb102efc70ff 122 if(tsi_newRead > 0.6){ //if right
anna_dot 0:eb102efc70ff 123 if(barra[NUM_LEDS_BARRA-1]<15){
anna_dot 0:eb102efc70ff 124 update_barra(0,(NUM_LEDS_BARRA-1), 1 );
anna_dot 0:eb102efc70ff 125 }
anna_dot 0:eb102efc70ff 126 }
anna_dot 0:eb102efc70ff 127 }
anna_dot 0:eb102efc70ff 128 //control_tsi(tsi_newRead);
anna_dot 19:e57116ff4c59 129 wsLEDS.write(px.getBuf());
anna_dot 0:eb102efc70ff 130 counter_tsi=0;
anna_dot 0:eb102efc70ff 131 }
anna_dot 0:eb102efc70ff 132 }
anna_dot 0:eb102efc70ff 133 else{
anna_dot 0:eb102efc70ff 134 counter_tsi=0;
anna_dot 0:eb102efc70ff 135 }
anna_dot 0:eb102efc70ff 136
anna_dot 0:eb102efc70ff 137
anna_dot 0:eb102efc70ff 138 //tsi_oldRead=tsi_newRead;
anna_dot 0:eb102efc70ff 139 }
anna_dot 0:eb102efc70ff 140
aarmdlr 7:59efb2d370b3 141 void tsi_ctr_modeSlider(float tsi_newRead){
aarmdlr 7:59efb2d370b3 142 //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().
aarmdlr 7:59efb2d370b3 143 //Lo multiplicamos por 1.4 para obtener un ranto de entre 0 y 140.
aarmdlr 7:59efb2d370b3 144 //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.
aarmdlr 7:59efb2d370b3 145 //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.
aarmdlr 7:59efb2d370b3 146 posSliderTouchTemp=(((tsi_newRead*100)*1.4)-70)/10;
aarmdlr 7:59efb2d370b3 147
aarmdlr 7:59efb2d370b3 148 //Controlamos que no se salga de las posiciones posibles de la barra inferior.
aarmdlr 7:59efb2d370b3 149 if(posSliderTouchTemp>-7 and posSliderTouchTemp<7){
aarmdlr 7:59efb2d370b3 150 //pc.printf("\r\n Porcentaje=%d",posSliderTouchTemp);
aarmdlr 7:59efb2d370b3 151
aarmdlr 7:59efb2d370b3 152 //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.
aarmdlr 7:59efb2d370b3 153 if(posSliderTouchTemp==posSliderTouchOLD1){
aarmdlr 7:59efb2d370b3 154 contadorRebote=contadorRebote+1;
aarmdlr 7:59efb2d370b3 155 }else{
aarmdlr 7:59efb2d370b3 156 contadorRebote=0;
aarmdlr 7:59efb2d370b3 157 }
aarmdlr 7:59efb2d370b3 158 posSliderTouchOLD1=posSliderTouchTemp;
aarmdlr 7:59efb2d370b3 159
aarmdlr 7:59efb2d370b3 160
anna_dot 13:3d207bd7f387 161 if(contadorRebote>=140){
aarmdlr 7:59efb2d370b3 162 posSliderTouch=posSliderTouchTemp;
aarmdlr 7:59efb2d370b3 163 }
aarmdlr 7:59efb2d370b3 164
aarmdlr 7:59efb2d370b3 165
aarmdlr 7:59efb2d370b3 166 }
aarmdlr 7:59efb2d370b3 167
aarmdlr 7:59efb2d370b3 168 if(posSliderTouch!=posSliderTouchOLD){
aarmdlr 7:59efb2d370b3 169 //Se suaviza el movimiento de la barra inferior para que de un efecto de scroll mas bonito y no tan brusco,
aarmdlr 7:59efb2d370b3 170 //por eso se realiza un for para que pase por todas las posiciones hasta la posicoon de la barra objetivo.
aarmdlr 7:59efb2d370b3 171 if(posSliderTouch>posSliderTouchOLD){
aarmdlr 7:59efb2d370b3 172 for(int p=posSliderTouchOLD; p<posSliderTouch; p++){
aarmdlr 7:59efb2d370b3 173 update_barra(0,(NUM_LEDS_BARRA-1), 1 ); //if rigth
anna_dot 19:e57116ff4c59 174 wsLEDS.write(px.getBuf());
aarmdlr 7:59efb2d370b3 175 //printBar( 249, 0, 0, p);
aarmdlr 7:59efb2d370b3 176 }
aarmdlr 7:59efb2d370b3 177 }else if(posSliderTouch<posSliderTouchOLD){
aarmdlr 7:59efb2d370b3 178 for(int p=posSliderTouchOLD; p>posSliderTouch; p--){
aarmdlr 7:59efb2d370b3 179 update_barra((NUM_LEDS_BARRA-1), 0, -1 ); //if left
anna_dot 19:e57116ff4c59 180 wsLEDS.write(px.getBuf());
aarmdlr 7:59efb2d370b3 181 //printBar( 249, 0, 0, p);
aarmdlr 7:59efb2d370b3 182 }
aarmdlr 7:59efb2d370b3 183 }
aarmdlr 7:59efb2d370b3 184 posSliderTouchOLD=posSliderTouch;
aarmdlr 7:59efb2d370b3 185 //pc.printf("\r\n Touch");
aarmdlr 7:59efb2d370b3 186
aarmdlr 7:59efb2d370b3 187 }
aarmdlr 7:59efb2d370b3 188
aarmdlr 7:59efb2d370b3 189 }
aarmdlr 7:59efb2d370b3 190
anna_dot 9:777b0535d3bb 191
anna_dot 0:eb102efc70ff 192 void update_barra(int led_apagar, int led_encender, int act_barra ){
anna_dot 10:dccb2be41fbd 193 if(m_ball.getCoordX()!=0){
anna_dot 10:dccb2be41fbd 194 px.Set(barra[led_apagar], 0x0); //apagamos el led
anna_dot 10:dccb2be41fbd 195
anna_dot 10:dccb2be41fbd 196 for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array
anna_dot 10:dccb2be41fbd 197 barra[i]=barra[i]+act_barra;
anna_dot 15:706dd4761fbe 198 //pc.printf("\r\n UPDATEEE ------- =%d", barra[i]);
anna_dot 10:dccb2be41fbd 199 }
anna_dot 0:eb102efc70ff 200
anna_dot 10:dccb2be41fbd 201 px.Set(barra[led_encender], 0x2f0000); //encendemos el siguiente led
anna_dot 10:dccb2be41fbd 202 px.SetI(barra[led_encender]%WS2812_BUF, 255); //0xff
anna_dot 10:dccb2be41fbd 203 //ctr_ball_barra();
anna_dot 0:eb102efc70ff 204 }
anna_dot 0:eb102efc70ff 205 }
anna_dot 0:eb102efc70ff 206
anna_dot 4:3f515bbfd20c 207
anna_dot 4:3f515bbfd20c 208 void accel_ctr(){
anna_dot 4:3f515bbfd20c 209 float nearest = floor(abs(((acc.getAccY()+1)*100)/2)); //para obtener un valor 0 y 100
anna_dot 4:3f515bbfd20c 210 posAcelerometerTemp=(((nearest)*2.8)-140)/10;
anna_dot 4:3f515bbfd20c 211 //pc.printf("\r\n Porcentaje=%d",posAcelerometerTemp);
anna_dot 4:3f515bbfd20c 212 if(posAcelerometerTemp<=-7){
anna_dot 4:3f515bbfd20c 213 posAcelerometerTemp=-6;
anna_dot 4:3f515bbfd20c 214 }else if(posAcelerometerTemp>=7){
anna_dot 4:3f515bbfd20c 215 posAcelerometerTemp=6;
anna_dot 4:3f515bbfd20c 216 }
anna_dot 4:3f515bbfd20c 217 if(posAcelerometerTemp>-7 and posAcelerometerTemp<7){
anna_dot 6:0004357c1faa 218 //pc.printf("\r\n Porcentaje=%d",posAcelerometerTemp);
anna_dot 4:3f515bbfd20c 219 //pc.printf("\r\n Ha entrat");
anna_dot 4:3f515bbfd20c 220 if(posAcelerometerTemp==posAcelerometerOLD1){
anna_dot 4:3f515bbfd20c 221 contadorReboteA=contadorReboteA+1;
anna_dot 4:3f515bbfd20c 222 }else{
anna_dot 4:3f515bbfd20c 223 contadorReboteA=0;
anna_dot 4:3f515bbfd20c 224 }
anna_dot 4:3f515bbfd20c 225 posAcelerometerOLD1=posAcelerometerTemp;
anna_dot 13:3d207bd7f387 226 if(contadorReboteA>=40){
anna_dot 4:3f515bbfd20c 227 posAcelerometer=posAcelerometerTemp;
anna_dot 4:3f515bbfd20c 228 }
anna_dot 4:3f515bbfd20c 229
anna_dot 4:3f515bbfd20c 230 }
anna_dot 4:3f515bbfd20c 231 if(posAcelerometer!=posAcelerometerOLD){
anna_dot 4:3f515bbfd20c 232 if(posAcelerometer>posAcelerometerOLD){
anna_dot 6:0004357c1faa 233 for(int p=posAcelerometerOLD; p<posAcelerometer; p++){ //movemos la barrita hasta la posición actual, mostrando la animación
anna_dot 6:0004357c1faa 234 update_barra(0,(NUM_LEDS_BARRA-1), 1 ); //if rigth
anna_dot 19:e57116ff4c59 235 wsLEDS.write(px.getBuf());
anna_dot 4:3f515bbfd20c 236 //pc.printf("\r\n HOLAAAA DRETA=%d",p);
anna_dot 4:3f515bbfd20c 237
anna_dot 6:0004357c1faa 238 }
anna_dot 4:3f515bbfd20c 239 }else if(posAcelerometer<posAcelerometerOLD){
anna_dot 6:0004357c1faa 240 //pc.printf("\r\n HOLAAAA ESQUERRA");
anna_dot 6:0004357c1faa 241 for(int p=posAcelerometerOLD; p>posAcelerometer; p--){
anna_dot 6:0004357c1faa 242 update_barra((NUM_LEDS_BARRA-1), 0, -1 ); //if left
anna_dot 19:e57116ff4c59 243 wsLEDS.write(px.getBuf());
anna_dot 6:0004357c1faa 244 //pc.printf("\r\n HOLAAAA ESQUERRA=%d",p);
anna_dot 4:3f515bbfd20c 245
anna_dot 6:0004357c1faa 246 }
anna_dot 4:3f515bbfd20c 247
anna_dot 4:3f515bbfd20c 248 }
anna_dot 4:3f515bbfd20c 249
anna_dot 4:3f515bbfd20c 250 posAcelerometerOLD=posAcelerometer;
anna_dot 4:3f515bbfd20c 251
anna_dot 4:3f515bbfd20c 252 //pc.printf("\r\n Acelerometer");
anna_dot 4:3f515bbfd20c 253 }
anna_dot 0:eb102efc70ff 254 }
anna_dot 0:eb102efc70ff 255
anna_dot 13:3d207bd7f387 256 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) {
anna_dot 9:777b0535d3bb 257
anna_dot 9:777b0535d3bb 258 //printf ("\r\nRGB=> %ld, %ld, %ld \r\n", valR, valG, valB);
anna_dot 9:777b0535d3bb 259
anna_dot 9:777b0535d3bb 260 if(numPixelMatrixOLD_i!=-1 and numPixelMatrixOLD_j!=-1){
anna_dot 13:3d207bd7f387 261 for(int j=numPixelMatrixOLD_j; j<(numPixelMatrixOLD_j+size); j++){
anna_dot 13:3d207bd7f387 262 uint8_t numPixelMatrixOLD;
anna_dot 13:3d207bd7f387 263 if(numPixelMatrixOLD_i%2==0){
anna_dot 13:3d207bd7f387 264 numPixelMatrixOLD=(numPixelMatrixOLD_i*16)+j;
anna_dot 13:3d207bd7f387 265 }else{
anna_dot 13:3d207bd7f387 266 numPixelMatrixOLD=((numPixelMatrixOLD_i*16)+15)-j;
anna_dot 13:3d207bd7f387 267 }
anna_dot 9:777b0535d3bb 268
anna_dot 13:3d207bd7f387 269 setPixelColor(numPixelMatrixOLD, 0, 0, 0);
anna_dot 13:3d207bd7f387 270
anna_dot 13:3d207bd7f387 271 }
anna_dot 9:777b0535d3bb 272 }
anna_dot 13:3d207bd7f387 273 if(numPixelMatrix_i!=-1 or numPixelMatrix_j!=-1){
anna_dot 13:3d207bd7f387 274 for(int j=numPixelMatrix_j; j<(numPixelMatrix_j+size); j++){
anna_dot 13:3d207bd7f387 275 uint8_t numPixelMatrix;
anna_dot 13:3d207bd7f387 276 if(numPixelMatrix_i%2==0){
anna_dot 13:3d207bd7f387 277 numPixelMatrix=(numPixelMatrix_i*16)+j;
anna_dot 13:3d207bd7f387 278 }else{
anna_dot 13:3d207bd7f387 279 numPixelMatrix=((numPixelMatrix_i*16)+15)-j;
anna_dot 13:3d207bd7f387 280 }
anna_dot 13:3d207bd7f387 281
anna_dot 13:3d207bd7f387 282 setPixelColor(numPixelMatrix, valR, valG, valB);
anna_dot 13:3d207bd7f387 283 }
anna_dot 13:3d207bd7f387 284 }
anna_dot 19:e57116ff4c59 285 //wsLEDS.write(px.getBuf());
anna_dot 9:777b0535d3bb 286
anna_dot 9:777b0535d3bb 287 }
anna_dot 0:eb102efc70ff 288
anna_dot 9:777b0535d3bb 289 void setPixelColor(int numPixelMatrix, int r, int g, int b){
anna_dot 9:777b0535d3bb 290 px.SetI(numPixelMatrix,255);
anna_dot 9:777b0535d3bb 291 px.SetR(numPixelMatrix,r);
anna_dot 9:777b0535d3bb 292 px.SetG(numPixelMatrix,g);
anna_dot 9:777b0535d3bb 293 px.SetB(numPixelMatrix,b);
anna_dot 9:777b0535d3bb 294 }
anna_dot 9:777b0535d3bb 295
anna_dot 10:dccb2be41fbd 296 void ctr_ball(){
anna_dot 10:dccb2be41fbd 297 int old_i=m_ball.getCoordX();
anna_dot 10:dccb2be41fbd 298 int old_j=m_ball.getCoordY();
anna_dot 10:dccb2be41fbd 299
anna_dot 10:dccb2be41fbd 300 bool found_barra=false;
anna_dot 10:dccb2be41fbd 301 int i=0;
anna_dot 11:4908defcd9d9 302 if(old_i==15){
anna_dot 16:eab9a8d27969 303 //pc.printf("TECHO Angle ANTES REBOTE --> %d \r\n", angle);
anna_dot 11:4908defcd9d9 304 direct_ball=!direct_ball;
aarmdlr 14:4adfd8e600fe 305 angle_rebote();
anna_dot 16:eab9a8d27969 306 //pc.printf("TECHO Angle DESPUES REBOTE --> %d \r\n", angle);
anna_dot 11:4908defcd9d9 307 }
anna_dot 11:4908defcd9d9 308 else{
anna_dot 16:eab9a8d27969 309 if( (old_j==15 or old_j==0) and (angle!=1)){ //and old_i!=1){
anna_dot 16:eab9a8d27969 310 //pc.printf("PAREEEED Angle ANTES REBOTE --> %d \r\n", angle);
anna_dot 13:3d207bd7f387 311 angle_rebote();
anna_dot 16:eab9a8d27969 312 //pc.printf("PAREEEED Angle DESPUES REBOTE --> %d \r\n", angle);
aarmdlr 12:f9060e568ff9 313
anna_dot 16:eab9a8d27969 314 }//else{
anna_dot 19:e57116ff4c59 315 int predict_Y=m_ball.predict_Y_axis(direct_ball, angle); //sino poner el barra
anna_dot 16:eab9a8d27969 316 pc.printf("\r\n Coord X %d, Coord Y %d y predictY %d, angle %d, direction %d --> ",m_ball.getCoordX(), m_ball.getCoordY() , predict_Y, angle, direct_ball );
aarmdlr 12:f9060e568ff9 317 while(!found_barra and i<NUM_LEDS_BARRA){
aarmdlr 14:4adfd8e600fe 318 if(barra[i]==predict_Y and old_i==1){
aarmdlr 12:f9060e568ff9 319 found_barra=true;
aarmdlr 12:f9060e568ff9 320 direct_ball=!direct_ball;
aarmdlr 17:0ecf3108f79e 321 }//else{
aarmdlr 17:0ecf3108f79e 322 i++;
aarmdlr 17:0ecf3108f79e 323 //}
anna_dot 11:4908defcd9d9 324 }
aarmdlr 12:f9060e568ff9 325 if(found_barra){
aarmdlr 14:4adfd8e600fe 326 if(barra[0]==predict_Y){
aarmdlr 12:f9060e568ff9 327 angle=0;
aarmdlr 12:f9060e568ff9 328 }else{
aarmdlr 14:4adfd8e600fe 329 if(barra[3]==predict_Y){
aarmdlr 12:f9060e568ff9 330 angle=2;
aarmdlr 12:f9060e568ff9 331 }else{
aarmdlr 12:f9060e568ff9 332 angle=1;
aarmdlr 12:f9060e568ff9 333 }
aarmdlr 12:f9060e568ff9 334 }
anna_dot 19:e57116ff4c59 335 if(cont_ball_rebote==3){
anna_dot 19:e57116ff4c59 336 cont_ball_rebote=0;
anna_dot 19:e57116ff4c59 337 lose=addLineOfBloques();
anna_dot 19:e57116ff4c59 338
anna_dot 19:e57116ff4c59 339 }
anna_dot 19:e57116ff4c59 340 cont_ball_rebote++;
aarmdlr 12:f9060e568ff9 341 }else if(old_i==0){
aarmdlr 12:f9060e568ff9 342 refresh_ball.detach();
anna_dot 19:e57116ff4c59 343 clear_matrix(0);
anna_dot 19:e57116ff4c59 344 wsLEDS.write(px.getBuf());
aarmdlr 12:f9060e568ff9 345 lose=true;
aarmdlr 12:f9060e568ff9 346 }
aarmdlr 12:f9060e568ff9 347
anna_dot 16:eab9a8d27969 348 //}
anna_dot 11:4908defcd9d9 349 }
anna_dot 13:3d207bd7f387 350
anna_dot 11:4908defcd9d9 351 /*if((barra[0]==old_j or barra[1]==old_j or barra[2]==old_j or barra[3]==old_j) and old_i==1){
anna_dot 11:4908defcd9d9 352 direct_ball=!direct_ball;
anna_dot 10:dccb2be41fbd 353 }*/
anna_dot 10:dccb2be41fbd 354
aarmdlr 12:f9060e568ff9 355 if(!lose){
anna_dot 13:3d207bd7f387 356 bool found_blq_i=false;
anna_dot 13:3d207bd7f387 357 int i=0;
anna_dot 13:3d207bd7f387 358
anna_dot 19:e57116ff4c59 359
anna_dot 19:e57116ff4c59 360 int next_CoordX;
anna_dot 19:e57116ff4c59 361 if(direct_ball){
anna_dot 19:e57116ff4c59 362 next_CoordX=old_i+1;
anna_dot 19:e57116ff4c59 363 }else if(!direct_ball){
anna_dot 19:e57116ff4c59 364 next_CoordX=old_i-1;
anna_dot 19:e57116ff4c59 365 }
anna_dot 19:e57116ff4c59 366
anna_dot 13:3d207bd7f387 367 while(!found_blq_i and i<Bloques.getNumBloques() ){
anna_dot 13:3d207bd7f387 368 bloque temp_blq=Bloques.getBloque(i);
anna_dot 19:e57116ff4c59 369 if((temp_blq.getCoordX()==next_CoordX)){
anna_dot 13:3d207bd7f387 370 found_blq_i=true;
anna_dot 13:3d207bd7f387 371 }
anna_dot 13:3d207bd7f387 372 i++;
anna_dot 13:3d207bd7f387 373 }
anna_dot 13:3d207bd7f387 374
anna_dot 13:3d207bd7f387 375 bool found_blq_j=false;
anna_dot 13:3d207bd7f387 376 int j=0;
anna_dot 13:3d207bd7f387 377 if(found_blq_i){
anna_dot 13:3d207bd7f387 378 int predict_Y=m_ball.predict_Y_axis(direct_ball, angle);
anna_dot 16:eab9a8d27969 379 //pc.printf("\r\n Coord X %d, Coord Y %d y predictY %d, angle %d, direction %d --> ",m_ball.getCoordX(), m_ball.getCoordY() , predict_Y, angle, direct_ball );
anna_dot 13:3d207bd7f387 380 while(!found_blq_j and j<Bloques.getNumBloques() ){
anna_dot 13:3d207bd7f387 381 bloque temp_blq=Bloques.getBloque(j);
anna_dot 13:3d207bd7f387 382 int blq_pos_Y=(temp_blq.getCoordY()+temp_blq.getSize());
anna_dot 19:e57116ff4c59 383
anna_dot 19:e57116ff4c59 384 if((blq_pos_Y>predict_Y and predict_Y>=temp_blq.getCoordY()) and temp_blq.getCoordX()==next_CoordX){ //and temp_blq.getEnabled()
anna_dot 13:3d207bd7f387 385 found_blq_j=true;
anna_dot 13:3d207bd7f387 386 direct_ball=!direct_ball;
anna_dot 19:e57116ff4c59 387 //angle_rebote();
anna_dot 13:3d207bd7f387 388 print_pixel(temp_blq.getColR(), temp_blq.getColG(), temp_blq.getColB(), -1, -1, temp_blq.getCoordX(), temp_blq.getCoordY(), temp_blq.getSize());
anna_dot 19:e57116ff4c59 389 wsLEDS.write(px.getBuf());
anna_dot 13:3d207bd7f387 390 Bloques.disable_blq(j);
anna_dot 15:706dd4761fbe 391 //pc.printf("BloqY %d, temp_bloq.CoordY %d y predictY %d --> %d", blq_pos_Y, temp_blq.getCoordY() , predict_Y );
anna_dot 19:e57116ff4c59 392
anna_dot 19:e57116ff4c59 393 if(!direct_ball){
anna_dot 19:e57116ff4c59 394 angle_rebote();
anna_dot 19:e57116ff4c59 395 }else{
anna_dot 19:e57116ff4c59 396 m_ball.setCoordX(next_CoordX);
anna_dot 19:e57116ff4c59 397 m_ball.setCoordY(predict_Y);
anna_dot 19:e57116ff4c59 398 }
anna_dot 13:3d207bd7f387 399 }
anna_dot 13:3d207bd7f387 400 j++;
anna_dot 13:3d207bd7f387 401 }
anna_dot 13:3d207bd7f387 402 }
aarmdlr 12:f9060e568ff9 403 m_ball.movement(direct_ball, angle);
aarmdlr 12:f9060e568ff9 404 print_pixel(255, 255, 255, m_ball.getCoordX(), m_ball.getCoordY(),old_i, old_j);
anna_dot 19:e57116ff4c59 405 wsLEDS.write(px.getBuf());
aarmdlr 12:f9060e568ff9 406 }
aarmdlr 12:f9060e568ff9 407 }
aarmdlr 12:f9060e568ff9 408
anna_dot 19:e57116ff4c59 409 void clear_matrix(int offset){
anna_dot 19:e57116ff4c59 410 for(int i=offset; i<256; i++){
aarmdlr 12:f9060e568ff9 411 setPixelColor(i,0,0,0);
aarmdlr 12:f9060e568ff9 412 }
anna_dot 19:e57116ff4c59 413
anna_dot 10:dccb2be41fbd 414 }
anna_dot 9:777b0535d3bb 415
anna_dot 13:3d207bd7f387 416 void angle_rebote(){
anna_dot 13:3d207bd7f387 417 if(angle==0){
anna_dot 13:3d207bd7f387 418 angle=2;
anna_dot 13:3d207bd7f387 419 }else if(angle==2){
anna_dot 13:3d207bd7f387 420 angle=0;
anna_dot 13:3d207bd7f387 421 }
anna_dot 13:3d207bd7f387 422 }
anna_dot 9:777b0535d3bb 423
anna_dot 19:e57116ff4c59 424 bool addLineOfBloques(){
anna_dot 19:e57116ff4c59 425
anna_dot 19:e57116ff4c59 426 bool end_game=Bloques.addLineBloques();
anna_dot 19:e57116ff4c59 427 if(end_game){
anna_dot 19:e57116ff4c59 428 refresh_ball.detach();
anna_dot 19:e57116ff4c59 429 clear_matrix(0);
anna_dot 19:e57116ff4c59 430 wsLEDS.write(px.getBuf());
anna_dot 19:e57116ff4c59 431 }
anna_dot 19:e57116ff4c59 432 else{
anna_dot 19:e57116ff4c59 433 clear_matrix(32);
anna_dot 19:e57116ff4c59 434 for(int i=0; i<Bloques.getNumBloques(); i++){
anna_dot 19:e57116ff4c59 435 bloque temp_blq=Bloques.getBloque(i);
anna_dot 19:e57116ff4c59 436 print_pixel(temp_blq.getColR(),temp_blq.getColG(),temp_blq.getColB(), temp_blq.getCoordX(),temp_blq.getCoordY(), -1, -1, temp_blq.getSize());
anna_dot 19:e57116ff4c59 437 }
anna_dot 19:e57116ff4c59 438 wsLEDS.write(px.getBuf());
anna_dot 19:e57116ff4c59 439 }
anna_dot 19:e57116ff4c59 440 return end_game;
anna_dot 19:e57116ff4c59 441
anna_dot 19:e57116ff4c59 442 }
anna_dot 19:e57116ff4c59 443