Nicolas Gonzalez gil / Mbed 2 deprecated Tetris

Dependencies:   mbed MPU6050

Committer:
Nicolas_11
Date:
Fri Nov 23 13:21:38 2018 +0000
Revision:
0:cf64daf01e11
Child:
2:5faf2fd6c613
Tetris con acelerometro;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nicolas_11 0:cf64daf01e11 1 #include "mbed.h"
Nicolas_11 0:cf64daf01e11 2 #include "MPU6050.h"
Nicolas_11 0:cf64daf01e11 3 SPI deviceM(PB_15, PB_14, PB_13);
Nicolas_11 0:cf64daf01e11 4 DigitalOut ssel (PB_12);
Nicolas_11 0:cf64daf01e11 5 Serial a(USBTX,USBRX);
Nicolas_11 0:cf64daf01e11 6
Nicolas_11 0:cf64daf01e11 7 MPU6050 mpu1(PB_9,PB_8);
Nicolas_11 0:cf64daf01e11 8
Nicolas_11 0:cf64daf01e11 9
Nicolas_11 0:cf64daf01e11 10 #define uint8_t unsigned char
Nicolas_11 0:cf64daf01e11 11 int Tipofig=0;
Nicolas_11 0:cf64daf01e11 12 int vcol;
Nicolas_11 0:cf64daf01e11 13 float Vel=0.8;
Nicolas_11 0:cf64daf01e11 14 int grado=0;
Nicolas_11 0:cf64daf01e11 15 float value_accelerox;
Nicolas_11 0:cf64daf01e11 16 float value_acceleroy;
Nicolas_11 0:cf64daf01e11 17 int in,out;
Nicolas_11 0:cf64daf01e11 18 int lim;
Nicolas_11 0:cf64daf01e11 19 int lim2;
Nicolas_11 0:cf64daf01e11 20 int m;
Nicolas_11 0:cf64daf01e11 21 int hhh;
Nicolas_11 0:cf64daf01e11 22 int col2;
Nicolas_11 0:cf64daf01e11 23 int rot;
Nicolas_11 0:cf64daf01e11 24 int pos_x;
Nicolas_11 0:cf64daf01e11 25 int pos_y;
Nicolas_11 0:cf64daf01e11 26 int juego=1;
Nicolas_11 0:cf64daf01e11 27 uint8_t Matr[9]={0,0,0,0,0,0,0,0,0};
Nicolas_11 0:cf64daf01e11 28 uint8_t F_t[3]={0b11100000,0b01000000,0};
Nicolas_11 0:cf64daf01e11 29 uint8_t F_s[3]={0b11000000,0b01100000,0};
Nicolas_11 0:cf64daf01e11 30 uint8_t F_c[3]={0b11000000,0b11000000,0};
Nicolas_11 0:cf64daf01e11 31 uint8_t F_l[3]={0b11000000,0b10000000,0b10000000};
Nicolas_11 0:cf64daf01e11 32 uint8_t F_I[3]={0b10000000,0b10000000,0b10000000};
Nicolas_11 0:cf64daf01e11 33 uint8_t Fig[3]={0,0,0};
Nicolas_11 0:cf64daf01e11 34 int poscol;
Nicolas_11 0:cf64daf01e11 35
Nicolas_11 0:cf64daf01e11 36
Nicolas_11 0:cf64daf01e11 37
Nicolas_11 0:cf64daf01e11 38
Nicolas_11 0:cf64daf01e11 39 void seleccion(uint8_t sc);
Nicolas_11 0:cf64daf01e11 40 void giro(uint8_t gi);
Nicolas_11 0:cf64daf01e11 41 void save(uint8_t *vC,uint8_t col);
Nicolas_11 0:cf64daf01e11 42 void imprimir();
Nicolas_11 0:cf64daf01e11 43 void Izq();
Nicolas_11 0:cf64daf01e11 44 void Der();
Nicolas_11 0:cf64daf01e11 45 void accelerometro();
Nicolas_11 0:cf64daf01e11 46 void tetris();
Nicolas_11 0:cf64daf01e11 47
Nicolas_11 0:cf64daf01e11 48
Nicolas_11 0:cf64daf01e11 49 void sendSPI(uint8_t d1, uint8_t d2)
Nicolas_11 0:cf64daf01e11 50 {
Nicolas_11 0:cf64daf01e11 51 deviceM.unlock();
Nicolas_11 0:cf64daf01e11 52 ssel=0;
Nicolas_11 0:cf64daf01e11 53 deviceM.write(d1);
Nicolas_11 0:cf64daf01e11 54 deviceM.write(d2);
Nicolas_11 0:cf64daf01e11 55 ssel=1;
Nicolas_11 0:cf64daf01e11 56 deviceM.lock();
Nicolas_11 0:cf64daf01e11 57 }
Nicolas_11 0:cf64daf01e11 58
Nicolas_11 0:cf64daf01e11 59 void borrar()
Nicolas_11 0:cf64daf01e11 60 {
Nicolas_11 0:cf64daf01e11 61 for(int i;i<=8;i++) {
Nicolas_11 0:cf64daf01e11 62 sendSPI(i,0);
Nicolas_11 0:cf64daf01e11 63 }
Nicolas_11 0:cf64daf01e11 64 }
Nicolas_11 0:cf64daf01e11 65
Nicolas_11 0:cf64daf01e11 66 void inicializar(){
Nicolas_11 0:cf64daf01e11 67
Nicolas_11 0:cf64daf01e11 68 a.baud(9600);
Nicolas_11 0:cf64daf01e11 69 sendSPI(0x0c,1);
Nicolas_11 0:cf64daf01e11 70 sendSPI(0x09,0);
Nicolas_11 0:cf64daf01e11 71 sendSPI(0x0A,0x01);
Nicolas_11 0:cf64daf01e11 72 sendSPI(0x0F,1);
Nicolas_11 0:cf64daf01e11 73 wait (0.5);
Nicolas_11 0:cf64daf01e11 74 sendSPI(0x0F,0);
Nicolas_11 0:cf64daf01e11 75 wait(0.5);
Nicolas_11 0:cf64daf01e11 76 sendSPI(0xB,0x7);
Nicolas_11 0:cf64daf01e11 77 mpu1.setAcceleroRange('MPU6050_ACCELERO_RANGE_4G');
Nicolas_11 0:cf64daf01e11 78 borrar();
Nicolas_11 0:cf64daf01e11 79 }
Nicolas_11 0:cf64daf01e11 80
Nicolas_11 0:cf64daf01e11 81 void seleccion(uint8_t sc){
Nicolas_11 0:cf64daf01e11 82 switch(sc) {
Nicolas_11 0:cf64daf01e11 83 case 1: Fig[0]=F_t[0]; Fig[1]=F_t[1];Fig[2]=F_t[2]; break;
Nicolas_11 0:cf64daf01e11 84 case 2: Fig[0]=F_s[0]; Fig[1]=F_s[1];Fig[2]=F_s[2]; break;
Nicolas_11 0:cf64daf01e11 85 case 3: Fig[0]=F_c[0]; Fig[1]=F_c[1];Fig[2]=F_c[2]; break;
Nicolas_11 0:cf64daf01e11 86 case 4: Fig[0]=F_l[0]; Fig[1]=F_l[1];Fig[2]=F_l[2]; break;
Nicolas_11 0:cf64daf01e11 87 case 5: Fig[0]=F_I[0]; Fig[1]=F_I[1];Fig[2]=F_I[2]; break;
Nicolas_11 0:cf64daf01e11 88 default:break;}
Nicolas_11 0:cf64daf01e11 89 }
Nicolas_11 0:cf64daf01e11 90
Nicolas_11 0:cf64daf01e11 91 void giro(uint8_t gi)
Nicolas_11 0:cf64daf01e11 92 {
Nicolas_11 0:cf64daf01e11 93 int i;
Nicolas_11 0:cf64daf01e11 94 int j;
Nicolas_11 0:cf64daf01e11 95 int k;
Nicolas_11 0:cf64daf01e11 96 uint8_t vec_aux[3]={0,0,0};
Nicolas_11 0:cf64daf01e11 97 switch(gi){
Nicolas_11 0:cf64daf01e11 98 case 1:
Nicolas_11 0:cf64daf01e11 99 break;
Nicolas_11 0:cf64daf01e11 100 case 2:
Nicolas_11 0:cf64daf01e11 101 for(j=0;j<3;j++){
Nicolas_11 0:cf64daf01e11 102 for(i=0;i<3;i++){
Nicolas_11 0:cf64daf01e11 103 vec_aux[i]=(((((Fig[j]))<<2-i)&0b10000000)>>j)+vec_aux[i];
Nicolas_11 0:cf64daf01e11 104 }
Nicolas_11 0:cf64daf01e11 105 }
Nicolas_11 0:cf64daf01e11 106 for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
Nicolas_11 0:cf64daf01e11 107
Nicolas_11 0:cf64daf01e11 108 break;
Nicolas_11 0:cf64daf01e11 109 case 3:
Nicolas_11 0:cf64daf01e11 110 for(j=0;j<3;j++){
Nicolas_11 0:cf64daf01e11 111 for(i=0;i<3;i++){
Nicolas_11 0:cf64daf01e11 112 vec_aux[i]=(((((Fig[2-i]))>>2-j)&0b00100000)<<j)+vec_aux[i];
Nicolas_11 0:cf64daf01e11 113 }
Nicolas_11 0:cf64daf01e11 114 }
Nicolas_11 0:cf64daf01e11 115 for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
Nicolas_11 0:cf64daf01e11 116 break;
Nicolas_11 0:cf64daf01e11 117 case 4:
Nicolas_11 0:cf64daf01e11 118 for(j=0;j<3;j++){
Nicolas_11 0:cf64daf01e11 119 for(i=0;i<3;i++){
Nicolas_11 0:cf64daf01e11 120 vec_aux[i]= ( ( ((Fig[j])>>2-i) & (0b00100000) )<<j )+vec_aux[i];
Nicolas_11 0:cf64daf01e11 121 }
Nicolas_11 0:cf64daf01e11 122 }
Nicolas_11 0:cf64daf01e11 123 for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
Nicolas_11 0:cf64daf01e11 124 break;
Nicolas_11 0:cf64daf01e11 125 default:
Nicolas_11 0:cf64daf01e11 126 break;
Nicolas_11 0:cf64daf01e11 127 }
Nicolas_11 0:cf64daf01e11 128
Nicolas_11 0:cf64daf01e11 129 }
Nicolas_11 0:cf64daf01e11 130
Nicolas_11 0:cf64daf01e11 131
Nicolas_11 0:cf64daf01e11 132
Nicolas_11 0:cf64daf01e11 133 void limite(uint8_t *sc,uint8_t trasladar)
Nicolas_11 0:cf64daf01e11 134 {
Nicolas_11 0:cf64daf01e11 135 int i;
Nicolas_11 0:cf64daf01e11 136 int f;
Nicolas_11 0:cf64daf01e11 137 uint8_t t;
Nicolas_11 0:cf64daf01e11 138 for(i=1;i<=8;i++)
Nicolas_11 0:cf64daf01e11 139 {
Nicolas_11 0:cf64daf01e11 140 t=(Fig[0])>>(trasladar-1);
Nicolas_11 0:cf64daf01e11 141 if(i>7){f=(*(sc+(8)))&(t);break;}
Nicolas_11 0:cf64daf01e11 142
Nicolas_11 0:cf64daf01e11 143 else{f=(*(sc+(i+1)))&(t);}
Nicolas_11 0:cf64daf01e11 144
Nicolas_11 0:cf64daf01e11 145 if(f>0){lim=i;break;}
Nicolas_11 0:cf64daf01e11 146 else{lim=8;}
Nicolas_11 0:cf64daf01e11 147 }
Nicolas_11 0:cf64daf01e11 148 a.printf("\n stop de fila \n %d",i);
Nicolas_11 0:cf64daf01e11 149 a.printf("\n limite \n %d",lim);
Nicolas_11 0:cf64daf01e11 150 }
Nicolas_11 0:cf64daf01e11 151
Nicolas_11 0:cf64daf01e11 152 void imprimir(uint8_t colum)
Nicolas_11 0:cf64daf01e11 153 {
Nicolas_11 0:cf64daf01e11 154
Nicolas_11 0:cf64daf01e11 155 if(col2>6){col2=6;}
Nicolas_11 0:cf64daf01e11 156
Nicolas_11 0:cf64daf01e11 157 uint8_t dat [8];
Nicolas_11 0:cf64daf01e11 158 int i;
Nicolas_11 0:cf64daf01e11 159 //int verif=0;
Nicolas_11 0:cf64daf01e11 160 int aux;
Nicolas_11 0:cf64daf01e11 161
Nicolas_11 0:cf64daf01e11 162 limite(Matr,colum);
Nicolas_11 0:cf64daf01e11 163
Nicolas_11 0:cf64daf01e11 164 for(i=1;i<=lim;i++){
Nicolas_11 0:cf64daf01e11 165 accelerometro();
Nicolas_11 0:cf64daf01e11 166 a.printf("valor columna %d\n",col2);
Nicolas_11 0:cf64daf01e11 167 /* if(verif == pos_x ){aux=1;}
Nicolas_11 0:cf64daf01e11 168 else{
Nicolas_11 0:cf64daf01e11 169 aux=0;
Nicolas_11 0:cf64daf01e11 170 if(pos_x==3){col2--;if(col2<2){col2=1;}}
Nicolas_11 0:cf64daf01e11 171 if(pos_x==1){col2++;if(col2>=6){col2=6;}}
Nicolas_11 0:cf64daf01e11 172 a.printf("chichico\n");
Nicolas_11 0:cf64daf01e11 173 }
Nicolas_11 0:cf64daf01e11 174 if(aux == 0){verif=pos_x;aux=1;}
Nicolas_11 0:cf64daf01e11 175 */
Nicolas_11 0:cf64daf01e11 176 if(pos_x==3){col2--;if(col2<2){col2=1;}}
Nicolas_11 0:cf64daf01e11 177 if(pos_x==1){col2++;if(col2>=6){col2=6;}}
Nicolas_11 0:cf64daf01e11 178 //if(value_acceleroy>3){grado++;if(grado>4){grado=1;}giro(grado);}
Nicolas_11 0:cf64daf01e11 179 if(i>=1){
Nicolas_11 0:cf64daf01e11 180 dat[1]=((Fig[0])>>col2-1) ;
Nicolas_11 0:cf64daf01e11 181 dat[2]=((Fig[1])>>col2-1) ;
Nicolas_11 0:cf64daf01e11 182 dat[3]=((Fig[2])>>col2-1) ;
Nicolas_11 0:cf64daf01e11 183 uint8_t e=~((0b11100000)>>col2-1);
Nicolas_11 0:cf64daf01e11 184 Matr[i]=dat[1] | Matr[i];
Nicolas_11 0:cf64daf01e11 185 Matr[i-1]=((dat[2] | Matr[i-1])&(dat[2]|e));
Nicolas_11 0:cf64daf01e11 186 Matr[i-2]=((dat[3] | Matr[i-2])&(dat[3]|e));
Nicolas_11 0:cf64daf01e11 187 if(i>3){Matr[i-3]=Matr[i-3]& e;}
Nicolas_11 0:cf64daf01e11 188 sendSPI(i,(Matr[i]));
Nicolas_11 0:cf64daf01e11 189 sendSPI(i-1,(Matr[i-1]));
Nicolas_11 0:cf64daf01e11 190 sendSPI(i-2,(Matr[i-2]));
Nicolas_11 0:cf64daf01e11 191 sendSPI((i-3),(Matr[i-3]));
Nicolas_11 0:cf64daf01e11 192 wait(Vel);
Nicolas_11 0:cf64daf01e11 193 }
Nicolas_11 0:cf64daf01e11 194 }
Nicolas_11 0:cf64daf01e11 195 }
Nicolas_11 0:cf64daf01e11 196 /*
Nicolas_11 0:cf64daf01e11 197 void tetris(){
Nicolas_11 0:cf64daf01e11 198 while(1){
Nicolas_11 0:cf64daf01e11 199
Nicolas_11 0:cf64daf01e11 200 in=a.getc();
Nicolas_11 0:cf64daf01e11 201 Tipofig=a.getc();
Nicolas_11 0:cf64daf01e11 202 //vcol=a.getc();
Nicolas_11 0:cf64daf01e11 203 grado=a.getc();
Nicolas_11 0:cf64daf01e11 204 out=a.getc();
Nicolas_11 0:cf64daf01e11 205 vcol=rand()%7 +1;
Nicolas_11 0:cf64daf01e11 206 if(in==60 && Tipofig<=5 && grado<=4 && out==62){
Nicolas_11 0:cf64daf01e11 207 seleccion(Tipofig);
Nicolas_11 0:cf64daf01e11 208 giro(grado);
Nicolas_11 0:cf64daf01e11 209 imprimir(vcol);
Nicolas_11 0:cf64daf01e11 210
Nicolas_11 0:cf64daf01e11 211 }
Nicolas_11 0:cf64daf01e11 212 else{
Nicolas_11 0:cf64daf01e11 213 if(juego==2){break;}
Nicolas_11 0:cf64daf01e11 214 break;
Nicolas_11 0:cf64daf01e11 215 }
Nicolas_11 0:cf64daf01e11 216
Nicolas_11 0:cf64daf01e11 217 }
Nicolas_11 0:cf64daf01e11 218 }
Nicolas_11 0:cf64daf01e11 219 */
Nicolas_11 0:cf64daf01e11 220
Nicolas_11 0:cf64daf01e11 221
Nicolas_11 0:cf64daf01e11 222 int main() {
Nicolas_11 0:cf64daf01e11 223
Nicolas_11 0:cf64daf01e11 224 inicializar();
Nicolas_11 0:cf64daf01e11 225
Nicolas_11 0:cf64daf01e11 226 while(1){
Nicolas_11 0:cf64daf01e11 227 in=a.getc();
Nicolas_11 0:cf64daf01e11 228 Tipofig=a.getc();
Nicolas_11 0:cf64daf01e11 229 //vcol=a.getc();
Nicolas_11 0:cf64daf01e11 230 grado=a.getc();
Nicolas_11 0:cf64daf01e11 231 out=a.getc();
Nicolas_11 0:cf64daf01e11 232 vcol=rand()%7 +1;
Nicolas_11 0:cf64daf01e11 233 if(in==60 && Tipofig<=5 && grado<=4 && out==62){
Nicolas_11 0:cf64daf01e11 234 seleccion(Tipofig);
Nicolas_11 0:cf64daf01e11 235 giro(grado);
Nicolas_11 0:cf64daf01e11 236 imprimir(vcol);
Nicolas_11 0:cf64daf01e11 237
Nicolas_11 0:cf64daf01e11 238 }
Nicolas_11 0:cf64daf01e11 239 else{
Nicolas_11 0:cf64daf01e11 240 break;
Nicolas_11 0:cf64daf01e11 241 }
Nicolas_11 0:cf64daf01e11 242 }
Nicolas_11 0:cf64daf01e11 243 }
Nicolas_11 0:cf64daf01e11 244
Nicolas_11 0:cf64daf01e11 245
Nicolas_11 0:cf64daf01e11 246 void accelerometro(){
Nicolas_11 0:cf64daf01e11 247
Nicolas_11 0:cf64daf01e11 248 float accelero[3];
Nicolas_11 0:cf64daf01e11 249 mpu1.getAccelero(accelero);
Nicolas_11 0:cf64daf01e11 250 value_accelerox = accelero[1];
Nicolas_11 0:cf64daf01e11 251 value_acceleroy = accelero[0];
Nicolas_11 0:cf64daf01e11 252 if(value_accelerox>-9 && value_accelerox<-2){//a.printf("valor acelerometro 1 %f\n",value_accelerox); a.printf("valor1 pos_x %d\n",col2);
Nicolas_11 0:cf64daf01e11 253
Nicolas_11 0:cf64daf01e11 254 pos_x=1;}
Nicolas_11 0:cf64daf01e11 255 if(value_accelerox>-1 && value_accelerox<3){//a.printf("valor acelerometro 2 %f\n",value_accelerox); a.printf("valor2 pos_x %d\n",col2);
Nicolas_11 0:cf64daf01e11 256
Nicolas_11 0:cf64daf01e11 257 pos_x=2;}
Nicolas_11 0:cf64daf01e11 258 if(value_accelerox>3 && value_accelerox<9){//a.printf("valor acelerometro 3 %f\n",value_accelerox); a.printf("valor2 pos_x %d\n",col2);
Nicolas_11 0:cf64daf01e11 259
Nicolas_11 0:cf64daf01e11 260 pos_x=3;}
Nicolas_11 0:cf64daf01e11 261
Nicolas_11 0:cf64daf01e11 262 if(value_acceleroy>3){//a.printf("valor acelerometro 3 %f\n",value_acceleroy);
Nicolas_11 0:cf64daf01e11 263 pos_y=1;}
Nicolas_11 0:cf64daf01e11 264 }
Nicolas_11 0:cf64daf01e11 265
Nicolas_11 0:cf64daf01e11 266
Nicolas_11 0:cf64daf01e11 267
Nicolas_11 0:cf64daf01e11 268
Nicolas_11 0:cf64daf01e11 269
Nicolas_11 0:cf64daf01e11 270
Nicolas_11 0:cf64daf01e11 271