Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

Committer:
aarmdlr
Date:
Wed May 26 15:37:15 2021 +0000
Revision:
18:fe6f0cbd51ce
Parent:
17:0ecf3108f79e
Line of bloques added

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