Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

Committer:
aarmdlr
Date:
Sun May 23 18:11:51 2021 +0000
Revision:
12:f9060e568ff9
Parent:
11:4908defcd9d9
Child:
13:3d207bd7f387
rebote esquinas completado

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 0:eb102efc70ff 7
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 0:eb102efc70ff 37
aarmdlr 12:f9060e568ff9 38 int angle=1;
aarmdlr 12:f9060e568ff9 39 bool lose=false;
anna_dot 9:777b0535d3bb 40
anna_dot 0:eb102efc70ff 41 void update_barra(int led_apagar, int led_encender, int act_barra );
anna_dot 0:eb102efc70ff 42 void tsi_ctr_modeBtn(float tsi_newRead);
aarmdlr 7:59efb2d370b3 43 void tsi_ctr_modeSlider(float tsi_newRead);
anna_dot 4:3f515bbfd20c 44 void accel_ctr();
anna_dot 9:777b0535d3bb 45 void print_pixel(uint8_t valR, uint8_t valG, uint8_t valB, int numPixelMatrix_i, int numPixelMatrix_j, int numPixelMatrixOLD_i, int numPixelMatrixOLD_j);
anna_dot 9:777b0535d3bb 46 void setPixelColor(int numPixelMatrix, int r, int g, int b);
anna_dot 10:dccb2be41fbd 47 void ctr_ball();
aarmdlr 12:f9060e568ff9 48 void clear_matrix();
anna_dot 0:eb102efc70ff 49
anna_dot 0:eb102efc70ff 50 int main()
aarmdlr 12:f9060e568ff9 51 {
aarmdlr 12:f9060e568ff9 52 int sel_opcio=0;
anna_dot 4:3f515bbfd20c 53 pc.baud(115200);
anna_dot 4:3f515bbfd20c 54 pc.printf("\r\n\r\nHola!\r\ncompilado el " __DATE__ ", " __TIME__ "\r\n");
anna_dot 4:3f515bbfd20c 55
anna_dot 0:eb102efc70ff 56 ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling
anna_dot 0:eb102efc70ff 57
anna_dot 0:eb102efc70ff 58 // set up the colours we want to draw with
anna_dot 4:3f515bbfd20c 59 //int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f};
anna_dot 0:eb102efc70ff 60
anna_dot 0:eb102efc70ff 61 // for each of the colours (j) write out 10 of them
anna_dot 0:eb102efc70ff 62 // the pixels are written at the colour*10, plus the colour position
anna_dot 0:eb102efc70ff 63 // all modulus 60 so it wraps around
anna_dot 0:eb102efc70ff 64 /*for (int i = 0; i < WS2812_BUF; i++) {
anna_dot 0:eb102efc70ff 65 px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]);
anna_dot 0:eb102efc70ff 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 9:777b0535d3bb 74
anna_dot 8:9e69e576d1be 75
anna_dot 9:777b0535d3bb 76 /*for(int i=0; i<NUM_LEDS_BARRA; i++){
anna_dot 8:9e69e576d1be 77 matrix_tablero[0][barra[i]]=1;
anna_dot 9:777b0535d3bb 78 }*/
anna_dot 0:eb102efc70ff 79
anna_dot 9:777b0535d3bb 80 print_pixel(255, 255, 255, m_ball.getCoordX(), m_ball.getCoordY(),-1,-1);
anna_dot 9:777b0535d3bb 81
anna_dot 9:777b0535d3bb 82
anna_dot 0:eb102efc70ff 83 // Now the buffer is written, rotate it
anna_dot 0:eb102efc70ff 84 // by writing it out with an increasing offset
anna_dot 0:eb102efc70ff 85 ws.write(px.getBuf());
anna_dot 10:dccb2be41fbd 86
aarmdlr 12:f9060e568ff9 87 refresh_ball.attach(&ctr_ball, 0.2);
anna_dot 0:eb102efc70ff 88 while (1) {
anna_dot 0:eb102efc70ff 89 /*for (int z=WS2812_BUF; z >= 0 ; z--) {
anna_dot 0:eb102efc70ff 90 ws.write_offsets(px.getBuf(),z,z,z);
anna_dot 0:eb102efc70ff 91 wait(0.075);
anna_dot 0:eb102efc70ff 92 }*/
anna_dot 6:0004357c1faa 93 if(sel_opcio==0){
anna_dot 6:0004357c1faa 94 tsi_ctr_modeBtn(tsi.readPercentage());
anna_dot 6:0004357c1faa 95 }
anna_dot 6:0004357c1faa 96 else{
anna_dot 6:0004357c1faa 97 if(sel_opcio==1){
aarmdlr 7:59efb2d370b3 98 tsi_ctr_modeSlider(tsi.readPercentage());
anna_dot 6:0004357c1faa 99 }
anna_dot 6:0004357c1faa 100 else if(sel_opcio==2){
anna_dot 6:0004357c1faa 101 accel_ctr();
anna_dot 6:0004357c1faa 102 }
anna_dot 6:0004357c1faa 103 }
anna_dot 10:dccb2be41fbd 104 //pc.printf("\r\n Touch %d", (rand()%(9-6 + 1) + 6));
anna_dot 9:777b0535d3bb 105
anna_dot 0:eb102efc70ff 106 }
anna_dot 10:dccb2be41fbd 107
anna_dot 0:eb102efc70ff 108 }
anna_dot 0:eb102efc70ff 109
anna_dot 0:eb102efc70ff 110 void tsi_ctr_modeBtn(float tsi_newRead){
anna_dot 0:eb102efc70ff 111
anna_dot 0:eb102efc70ff 112 if(tsi_newRead!=0.0){
anna_dot 0:eb102efc70ff 113 if(tsi_newRead>0.6 and tsi_oldRead>0.6){
anna_dot 0:eb102efc70ff 114 counter_tsi++;
anna_dot 0:eb102efc70ff 115 }
anna_dot 0:eb102efc70ff 116 else {
anna_dot 0:eb102efc70ff 117 if(tsi_newRead<0.4 and tsi_oldRead<0.4){
anna_dot 0:eb102efc70ff 118 counter_tsi++;
anna_dot 0:eb102efc70ff 119 }
anna_dot 0:eb102efc70ff 120 else{
anna_dot 0:eb102efc70ff 121 counter_tsi=0;
anna_dot 0:eb102efc70ff 122 }
anna_dot 0:eb102efc70ff 123 }
anna_dot 0:eb102efc70ff 124 tsi_oldRead=tsi_newRead;
anna_dot 0:eb102efc70ff 125
anna_dot 0:eb102efc70ff 126
aarmdlr 12:f9060e568ff9 127 if(counter_tsi == 10450){
anna_dot 0:eb102efc70ff 128 if( (tsi_newRead < 0.4) && tsi_newRead!=0 ){ //if left
anna_dot 0:eb102efc70ff 129 if(barra[0]>0){
anna_dot 0:eb102efc70ff 130 update_barra((NUM_LEDS_BARRA-1),0, -1 );
anna_dot 0:eb102efc70ff 131 }
anna_dot 0:eb102efc70ff 132 }
anna_dot 0:eb102efc70ff 133 else{
anna_dot 0:eb102efc70ff 134 if(tsi_newRead > 0.6){ //if right
anna_dot 0:eb102efc70ff 135 if(barra[NUM_LEDS_BARRA-1]<15){
anna_dot 0:eb102efc70ff 136 update_barra(0,(NUM_LEDS_BARRA-1), 1 );
anna_dot 0:eb102efc70ff 137 }
anna_dot 0:eb102efc70ff 138 }
anna_dot 0:eb102efc70ff 139 }
anna_dot 0:eb102efc70ff 140 //control_tsi(tsi_newRead);
anna_dot 0:eb102efc70ff 141 ws.write(px.getBuf());
anna_dot 0:eb102efc70ff 142 counter_tsi=0;
anna_dot 0:eb102efc70ff 143 }
anna_dot 0:eb102efc70ff 144 }
anna_dot 0:eb102efc70ff 145 else{
anna_dot 0:eb102efc70ff 146 counter_tsi=0;
anna_dot 0:eb102efc70ff 147 }
anna_dot 0:eb102efc70ff 148
anna_dot 0:eb102efc70ff 149
anna_dot 0:eb102efc70ff 150 //tsi_oldRead=tsi_newRead;
anna_dot 0:eb102efc70ff 151 }
anna_dot 0:eb102efc70ff 152
aarmdlr 7:59efb2d370b3 153 void tsi_ctr_modeSlider(float tsi_newRead){
aarmdlr 7:59efb2d370b3 154 //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 155 //Lo multiplicamos por 1.4 para obtener un ranto de entre 0 y 140.
aarmdlr 7:59efb2d370b3 156 //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 157 //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 158 posSliderTouchTemp=(((tsi_newRead*100)*1.4)-70)/10;
aarmdlr 7:59efb2d370b3 159
aarmdlr 7:59efb2d370b3 160 //Controlamos que no se salga de las posiciones posibles de la barra inferior.
aarmdlr 7:59efb2d370b3 161 if(posSliderTouchTemp>-7 and posSliderTouchTemp<7){
aarmdlr 7:59efb2d370b3 162 //pc.printf("\r\n Porcentaje=%d",posSliderTouchTemp);
aarmdlr 7:59efb2d370b3 163
aarmdlr 7:59efb2d370b3 164 //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 165 if(posSliderTouchTemp==posSliderTouchOLD1){
aarmdlr 7:59efb2d370b3 166 contadorRebote=contadorRebote+1;
aarmdlr 7:59efb2d370b3 167 }else{
aarmdlr 7:59efb2d370b3 168 contadorRebote=0;
aarmdlr 7:59efb2d370b3 169 }
aarmdlr 7:59efb2d370b3 170 posSliderTouchOLD1=posSliderTouchTemp;
aarmdlr 7:59efb2d370b3 171
aarmdlr 7:59efb2d370b3 172
anna_dot 8:9e69e576d1be 173 if(contadorRebote>=70){
aarmdlr 7:59efb2d370b3 174 posSliderTouch=posSliderTouchTemp;
aarmdlr 7:59efb2d370b3 175 }
aarmdlr 7:59efb2d370b3 176
aarmdlr 7:59efb2d370b3 177
aarmdlr 7:59efb2d370b3 178 }
aarmdlr 7:59efb2d370b3 179
aarmdlr 7:59efb2d370b3 180 if(posSliderTouch!=posSliderTouchOLD){
aarmdlr 7:59efb2d370b3 181 //Se suaviza el movimiento de la barra inferior para que de un efecto de scroll mas bonito y no tan brusco,
aarmdlr 7:59efb2d370b3 182 //por eso se realiza un for para que pase por todas las posiciones hasta la posicoon de la barra objetivo.
aarmdlr 7:59efb2d370b3 183 if(posSliderTouch>posSliderTouchOLD){
aarmdlr 7:59efb2d370b3 184 for(int p=posSliderTouchOLD; p<posSliderTouch; p++){
aarmdlr 7:59efb2d370b3 185 update_barra(0,(NUM_LEDS_BARRA-1), 1 ); //if rigth
aarmdlr 7:59efb2d370b3 186 ws.write(px.getBuf());
aarmdlr 7:59efb2d370b3 187 //printBar( 249, 0, 0, p);
aarmdlr 7:59efb2d370b3 188 }
aarmdlr 7:59efb2d370b3 189 }else if(posSliderTouch<posSliderTouchOLD){
aarmdlr 7:59efb2d370b3 190 for(int p=posSliderTouchOLD; p>posSliderTouch; p--){
aarmdlr 7:59efb2d370b3 191 update_barra((NUM_LEDS_BARRA-1), 0, -1 ); //if left
aarmdlr 7:59efb2d370b3 192 ws.write(px.getBuf());
aarmdlr 7:59efb2d370b3 193 //printBar( 249, 0, 0, p);
aarmdlr 7:59efb2d370b3 194 }
aarmdlr 7:59efb2d370b3 195 }
aarmdlr 7:59efb2d370b3 196 posSliderTouchOLD=posSliderTouch;
aarmdlr 7:59efb2d370b3 197 //pc.printf("\r\n Touch");
aarmdlr 7:59efb2d370b3 198
aarmdlr 7:59efb2d370b3 199 }
aarmdlr 7:59efb2d370b3 200
aarmdlr 7:59efb2d370b3 201 }
aarmdlr 7:59efb2d370b3 202
anna_dot 9:777b0535d3bb 203
anna_dot 0:eb102efc70ff 204 void update_barra(int led_apagar, int led_encender, int act_barra ){
anna_dot 10:dccb2be41fbd 205 if(m_ball.getCoordX()!=0){
anna_dot 10:dccb2be41fbd 206 px.Set(barra[led_apagar], 0x0); //apagamos el led
anna_dot 10:dccb2be41fbd 207
anna_dot 10:dccb2be41fbd 208 for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array
anna_dot 10:dccb2be41fbd 209 barra[i]=barra[i]+act_barra;
anna_dot 10:dccb2be41fbd 210 pc.printf("\r\n UPDATEEE ------- =%d", barra[i]);
anna_dot 10:dccb2be41fbd 211 }
anna_dot 0:eb102efc70ff 212
anna_dot 10:dccb2be41fbd 213 px.Set(barra[led_encender], 0x2f0000); //encendemos el siguiente led
anna_dot 10:dccb2be41fbd 214 px.SetI(barra[led_encender]%WS2812_BUF, 255); //0xff
anna_dot 10:dccb2be41fbd 215 //ctr_ball_barra();
anna_dot 0:eb102efc70ff 216 }
anna_dot 0:eb102efc70ff 217 }
anna_dot 0:eb102efc70ff 218
anna_dot 4:3f515bbfd20c 219
anna_dot 4:3f515bbfd20c 220 void accel_ctr(){
anna_dot 4:3f515bbfd20c 221 float nearest = floor(abs(((acc.getAccY()+1)*100)/2)); //para obtener un valor 0 y 100
anna_dot 4:3f515bbfd20c 222 posAcelerometerTemp=(((nearest)*2.8)-140)/10;
anna_dot 4:3f515bbfd20c 223 //pc.printf("\r\n Porcentaje=%d",posAcelerometerTemp);
anna_dot 4:3f515bbfd20c 224 if(posAcelerometerTemp<=-7){
anna_dot 4:3f515bbfd20c 225 posAcelerometerTemp=-6;
anna_dot 4:3f515bbfd20c 226 }else if(posAcelerometerTemp>=7){
anna_dot 4:3f515bbfd20c 227 posAcelerometerTemp=6;
anna_dot 4:3f515bbfd20c 228 }
anna_dot 4:3f515bbfd20c 229 if(posAcelerometerTemp>-7 and posAcelerometerTemp<7){
anna_dot 6:0004357c1faa 230 //pc.printf("\r\n Porcentaje=%d",posAcelerometerTemp);
anna_dot 4:3f515bbfd20c 231 //pc.printf("\r\n Ha entrat");
anna_dot 4:3f515bbfd20c 232 if(posAcelerometerTemp==posAcelerometerOLD1){
anna_dot 4:3f515bbfd20c 233 contadorReboteA=contadorReboteA+1;
anna_dot 4:3f515bbfd20c 234 }else{
anna_dot 4:3f515bbfd20c 235 contadorReboteA=0;
anna_dot 4:3f515bbfd20c 236 }
anna_dot 4:3f515bbfd20c 237 posAcelerometerOLD1=posAcelerometerTemp;
anna_dot 6:0004357c1faa 238 if(contadorReboteA>=10){
anna_dot 4:3f515bbfd20c 239 posAcelerometer=posAcelerometerTemp;
anna_dot 4:3f515bbfd20c 240 }
anna_dot 4:3f515bbfd20c 241
anna_dot 4:3f515bbfd20c 242 }
anna_dot 4:3f515bbfd20c 243 if(posAcelerometer!=posAcelerometerOLD){
anna_dot 4:3f515bbfd20c 244 if(posAcelerometer>posAcelerometerOLD){
anna_dot 6:0004357c1faa 245 for(int p=posAcelerometerOLD; p<posAcelerometer; p++){ //movemos la barrita hasta la posición actual, mostrando la animación
anna_dot 6:0004357c1faa 246 update_barra(0,(NUM_LEDS_BARRA-1), 1 ); //if rigth
anna_dot 6:0004357c1faa 247 ws.write(px.getBuf());
anna_dot 4:3f515bbfd20c 248 //pc.printf("\r\n HOLAAAA DRETA=%d",p);
anna_dot 4:3f515bbfd20c 249
anna_dot 6:0004357c1faa 250 }
anna_dot 4:3f515bbfd20c 251 }else if(posAcelerometer<posAcelerometerOLD){
anna_dot 6:0004357c1faa 252 //pc.printf("\r\n HOLAAAA ESQUERRA");
anna_dot 6:0004357c1faa 253 for(int p=posAcelerometerOLD; p>posAcelerometer; p--){
anna_dot 6:0004357c1faa 254 update_barra((NUM_LEDS_BARRA-1), 0, -1 ); //if left
anna_dot 6:0004357c1faa 255 ws.write(px.getBuf());
anna_dot 6:0004357c1faa 256 //pc.printf("\r\n HOLAAAA ESQUERRA=%d",p);
anna_dot 4:3f515bbfd20c 257
anna_dot 6:0004357c1faa 258 }
anna_dot 4:3f515bbfd20c 259
anna_dot 4:3f515bbfd20c 260 }
anna_dot 4:3f515bbfd20c 261
anna_dot 4:3f515bbfd20c 262 posAcelerometerOLD=posAcelerometer;
anna_dot 4:3f515bbfd20c 263
anna_dot 4:3f515bbfd20c 264 //pc.printf("\r\n Acelerometer");
anna_dot 4:3f515bbfd20c 265 }
anna_dot 0:eb102efc70ff 266 }
anna_dot 0:eb102efc70ff 267
anna_dot 9:777b0535d3bb 268 void print_pixel(uint8_t valR, uint8_t valG, uint8_t valB, int numPixelMatrix_i, int numPixelMatrix_j, int numPixelMatrixOLD_i, int numPixelMatrixOLD_j) {
anna_dot 9:777b0535d3bb 269
anna_dot 9:777b0535d3bb 270 //printf ("\r\nRGB=> %ld, %ld, %ld \r\n", valR, valG, valB);
anna_dot 9:777b0535d3bb 271 int numPixelMatrix;
anna_dot 9:777b0535d3bb 272 if(numPixelMatrix_i%2==0){
anna_dot 11:4908defcd9d9 273 numPixelMatrix=(numPixelMatrix_i*16)+numPixelMatrix_j;
anna_dot 9:777b0535d3bb 274 }else{
anna_dot 11:4908defcd9d9 275 numPixelMatrix=((numPixelMatrix_i*16)+15)-numPixelMatrix_j;
anna_dot 9:777b0535d3bb 276 }
anna_dot 9:777b0535d3bb 277
anna_dot 9:777b0535d3bb 278 if(numPixelMatrixOLD_i!=-1 and numPixelMatrixOLD_j!=-1){
anna_dot 9:777b0535d3bb 279
anna_dot 9:777b0535d3bb 280 int numPixelMatrixOLD;
anna_dot 9:777b0535d3bb 281 if(numPixelMatrixOLD_i%2==0){
anna_dot 11:4908defcd9d9 282 numPixelMatrixOLD=(numPixelMatrixOLD_i*16)+numPixelMatrixOLD_j;
anna_dot 9:777b0535d3bb 283 }else{
anna_dot 11:4908defcd9d9 284 numPixelMatrixOLD=((numPixelMatrixOLD_i*16)+15)-numPixelMatrixOLD_j;
anna_dot 9:777b0535d3bb 285 }
anna_dot 9:777b0535d3bb 286
anna_dot 9:777b0535d3bb 287 setPixelColor(numPixelMatrixOLD, 0, 0, 0);
anna_dot 9:777b0535d3bb 288
anna_dot 9:777b0535d3bb 289 }
anna_dot 9:777b0535d3bb 290
anna_dot 9:777b0535d3bb 291
anna_dot 9:777b0535d3bb 292 setPixelColor(numPixelMatrix, valR, valG, valB);
anna_dot 9:777b0535d3bb 293 ws.write(px.getBuf());
anna_dot 9:777b0535d3bb 294
anna_dot 9:777b0535d3bb 295 }
anna_dot 0:eb102efc70ff 296
anna_dot 9:777b0535d3bb 297 void setPixelColor(int numPixelMatrix, int r, int g, int b){
anna_dot 9:777b0535d3bb 298 px.SetI(numPixelMatrix,255);
anna_dot 9:777b0535d3bb 299 px.SetR(numPixelMatrix,r);
anna_dot 9:777b0535d3bb 300 px.SetG(numPixelMatrix,g);
anna_dot 9:777b0535d3bb 301 px.SetB(numPixelMatrix,b);
anna_dot 9:777b0535d3bb 302 }
anna_dot 9:777b0535d3bb 303
anna_dot 10:dccb2be41fbd 304 void ctr_ball(){
anna_dot 10:dccb2be41fbd 305 int old_i=m_ball.getCoordX();
anna_dot 10:dccb2be41fbd 306 int old_j=m_ball.getCoordY();
anna_dot 10:dccb2be41fbd 307
anna_dot 10:dccb2be41fbd 308 bool found_barra=false;
anna_dot 10:dccb2be41fbd 309 int i=0;
anna_dot 11:4908defcd9d9 310 if(old_i==15){
anna_dot 11:4908defcd9d9 311 direct_ball=!direct_ball;
anna_dot 11:4908defcd9d9 312 }
anna_dot 11:4908defcd9d9 313 else{
aarmdlr 12:f9060e568ff9 314 if( (old_j==15 or old_j==0) and (angle!=1) ){
aarmdlr 12:f9060e568ff9 315
aarmdlr 12:f9060e568ff9 316 if(angle==0){
aarmdlr 12:f9060e568ff9 317 angle=2;
aarmdlr 12:f9060e568ff9 318 }else{
aarmdlr 12:f9060e568ff9 319 angle=0;
aarmdlr 12:f9060e568ff9 320 }
aarmdlr 12:f9060e568ff9 321
aarmdlr 12:f9060e568ff9 322 }else{
aarmdlr 12:f9060e568ff9 323
aarmdlr 12:f9060e568ff9 324 while(!found_barra and i<NUM_LEDS_BARRA){
aarmdlr 12:f9060e568ff9 325 if(barra[i]==old_j and old_i==1){
aarmdlr 12:f9060e568ff9 326 found_barra=true;
aarmdlr 12:f9060e568ff9 327 direct_ball=!direct_ball;
aarmdlr 12:f9060e568ff9 328 }
aarmdlr 12:f9060e568ff9 329 i++;
anna_dot 11:4908defcd9d9 330 }
aarmdlr 12:f9060e568ff9 331 if(found_barra){
aarmdlr 12:f9060e568ff9 332 if(barra[0]==old_j){
aarmdlr 12:f9060e568ff9 333 angle=0;
aarmdlr 12:f9060e568ff9 334 }else{
aarmdlr 12:f9060e568ff9 335 if(barra[3]==old_j){
aarmdlr 12:f9060e568ff9 336 angle=2;
aarmdlr 12:f9060e568ff9 337 }else{
aarmdlr 12:f9060e568ff9 338 angle=1;
aarmdlr 12:f9060e568ff9 339 }
aarmdlr 12:f9060e568ff9 340 }
aarmdlr 12:f9060e568ff9 341 }else if(old_i==0){
aarmdlr 12:f9060e568ff9 342 refresh_ball.detach();
aarmdlr 12:f9060e568ff9 343 clear_matrix();
aarmdlr 12:f9060e568ff9 344 lose=true;
aarmdlr 12:f9060e568ff9 345 }
aarmdlr 12:f9060e568ff9 346
anna_dot 10:dccb2be41fbd 347 }
anna_dot 11:4908defcd9d9 348 }
anna_dot 11:4908defcd9d9 349
anna_dot 11:4908defcd9d9 350 /*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 351 direct_ball=!direct_ball;
anna_dot 10:dccb2be41fbd 352 }*/
anna_dot 10:dccb2be41fbd 353
aarmdlr 12:f9060e568ff9 354 if(!lose){
aarmdlr 12:f9060e568ff9 355 m_ball.movement(direct_ball, angle);
aarmdlr 12:f9060e568ff9 356 print_pixel(255, 255, 255, m_ball.getCoordX(), m_ball.getCoordY(),old_i, old_j);
aarmdlr 12:f9060e568ff9 357 }
aarmdlr 12:f9060e568ff9 358 }
aarmdlr 12:f9060e568ff9 359
aarmdlr 12:f9060e568ff9 360 void clear_matrix(){
aarmdlr 12:f9060e568ff9 361 for(int i=0; i<255; i++){
aarmdlr 12:f9060e568ff9 362 setPixelColor(i,0,0,0);
aarmdlr 12:f9060e568ff9 363 }
aarmdlr 12:f9060e568ff9 364 ws.write(px.getBuf());
anna_dot 10:dccb2be41fbd 365 }
anna_dot 9:777b0535d3bb 366
anna_dot 9:777b0535d3bb 367