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