Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:ef627c2ce25b, 2018-10-18 (annotated)
- Committer:
- sanchezzbrahian
- Date:
- Thu Oct 18 23:40:53 2018 +0000
- Revision:
- 0:ef627c2ce25b
- Child:
- 1:2ac3cf92c198
C?digo tetrix
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| sanchezzbrahian | 0:ef627c2ce25b | 1 | #include "mbed.h" |
| sanchezzbrahian | 0:ef627c2ce25b | 2 | #include "algo.h" |
| sanchezzbrahian | 0:ef627c2ce25b | 3 | #define MAXDAT 3 |
| sanchezzbrahian | 0:ef627c2ce25b | 4 | |
| sanchezzbrahian | 0:ef627c2ce25b | 5 | SPI deviceM(PB_15, PB_14, PB_13); |
| sanchezzbrahian | 0:ef627c2ce25b | 6 | DigitalOut ssel (PB_12); |
| sanchezzbrahian | 0:ef627c2ce25b | 7 | |
| sanchezzbrahian | 0:ef627c2ce25b | 8 | Serial pc(USBTX,USBRX); |
| sanchezzbrahian | 0:ef627c2ce25b | 9 | |
| sanchezzbrahian | 0:ef627c2ce25b | 10 | uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla. |
| sanchezzbrahian | 0:ef627c2ce25b | 11 | uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0}; |
| sanchezzbrahian | 0:ef627c2ce25b | 12 | uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0}; //Matriz temporal de las fichas. |
| sanchezzbrahian | 0:ef627c2ce25b | 13 | uint8_t dat[MAXDAT]={0,0,0}; |
| sanchezzbrahian | 0:ef627c2ce25b | 14 | uint8_t fila=0,save=0,i=0,cont=0,mcol=0,num=0,grad=0; |
| sanchezzbrahian | 0:ef627c2ce25b | 15 | |
| sanchezzbrahian | 0:ef627c2ce25b | 16 | void sendSPI(uint8_t d1, uint8_t d2) |
| sanchezzbrahian | 0:ef627c2ce25b | 17 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 18 | deviceM.unlock(); |
| sanchezzbrahian | 0:ef627c2ce25b | 19 | ssel=0; |
| sanchezzbrahian | 0:ef627c2ce25b | 20 | deviceM.write(d1); |
| sanchezzbrahian | 0:ef627c2ce25b | 21 | deviceM.write(d2); |
| sanchezzbrahian | 0:ef627c2ce25b | 22 | ssel=1; |
| sanchezzbrahian | 0:ef627c2ce25b | 23 | deviceM.lock(); |
| sanchezzbrahian | 0:ef627c2ce25b | 24 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 25 | void test() //Test |
| sanchezzbrahian | 0:ef627c2ce25b | 26 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 27 | sendSPI(0x09,0); //No decodificacion |
| sanchezzbrahian | 0:ef627c2ce25b | 28 | sendSPI(0x0B,0x07); //Usa 7 leds |
| sanchezzbrahian | 0:ef627c2ce25b | 29 | sendSPI(0x0C,1); //No se apaga |
| sanchezzbrahian | 0:ef627c2ce25b | 30 | sendSPI(0x0A,0x0); |
| sanchezzbrahian | 0:ef627c2ce25b | 31 | for (int i=0;i<2;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 32 | sendSPI(0x0F,1); |
| sanchezzbrahian | 0:ef627c2ce25b | 33 | wait (0.1); |
| sanchezzbrahian | 0:ef627c2ce25b | 34 | sendSPI(0x0f,0); |
| sanchezzbrahian | 0:ef627c2ce25b | 35 | wait (0.1); } |
| sanchezzbrahian | 0:ef627c2ce25b | 36 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 37 | void borrar() //borrar toda la matriz; |
| sanchezzbrahian | 0:ef627c2ce25b | 38 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 39 | int i; |
| sanchezzbrahian | 0:ef627c2ce25b | 40 | for(i=0;i<=8;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 41 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 42 | sendSPI(0x0+i,0x00); |
| sanchezzbrahian | 0:ef627c2ce25b | 43 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 44 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 45 | void imp_mat(uint8_t *temp)// Hace el desplazamiento hacia abajo de la figura |
| sanchezzbrahian | 0:ef627c2ce25b | 46 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 47 | sendSPI(cont-3,mat_act[cont-3]); |
| sanchezzbrahian | 0:ef627c2ce25b | 48 | sendSPI(cont-2,(*(temp+0) | mat_act[cont-2])); |
| sanchezzbrahian | 0:ef627c2ce25b | 49 | sendSPI(cont-1,(*(temp+1) | mat_act[cont-1])); |
| sanchezzbrahian | 0:ef627c2ce25b | 50 | sendSPI(cont,(*(temp+2) | mat_act[cont])); |
| sanchezzbrahian | 0:ef627c2ce25b | 51 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 52 | uint32_t read_command() //ingresa "<",">" y define el tamaño del vector "dat" |
| sanchezzbrahian | 0:ef627c2ce25b | 53 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 54 | char intc=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 55 | while(intc != '<') |
| sanchezzbrahian | 0:ef627c2ce25b | 56 | intc=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 57 | for (int i =0;i<MAXDAT;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 58 | dat[i]=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 59 | intc=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 60 | if(intc != '>'){ |
| sanchezzbrahian | 0:ef627c2ce25b | 61 | return 0; |
| sanchezzbrahian | 0:ef627c2ce25b | 62 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 63 | return 1; |
| sanchezzbrahian | 0:ef627c2ce25b | 64 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 65 | void cop_fi (uint8_t* tfig) //Almacena la figura en la matriz temporal |
| sanchezzbrahian | 0:ef627c2ce25b | 66 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 67 | for(i=0;i<8;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 68 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 69 | mat_tmp[i]=*(tfig+i)>>dat[1]-1; |
| sanchezzbrahian | 0:ef627c2ce25b | 70 | |
| sanchezzbrahian | 0:ef627c2ce25b | 71 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 72 | for(i=0;i<8;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 73 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 74 | mat_tmp1[i]= mat_tmp[i]; |
| sanchezzbrahian | 0:ef627c2ce25b | 75 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 76 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 77 | void ingred_d() //Tipo de figuras |
| sanchezzbrahian | 0:ef627c2ce25b | 78 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 79 | uint8_t tf=dat[0]; |
| sanchezzbrahian | 0:ef627c2ce25b | 80 | |
| sanchezzbrahian | 0:ef627c2ce25b | 81 | switch(tf) |
| sanchezzbrahian | 0:ef627c2ce25b | 82 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 83 | case tipo_c: // Cuadrado |
| sanchezzbrahian | 0:ef627c2ce25b | 84 | cop_fi(FIG_C); |
| sanchezzbrahian | 0:ef627c2ce25b | 85 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 86 | case tipo_s: //S |
| sanchezzbrahian | 0:ef627c2ce25b | 87 | cop_fi(FIG_S); |
| sanchezzbrahian | 0:ef627c2ce25b | 88 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 89 | case tipo_t: //T |
| sanchezzbrahian | 0:ef627c2ce25b | 90 | cop_fi(FIG_T); |
| sanchezzbrahian | 0:ef627c2ce25b | 91 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 92 | case tipo_i: //I |
| sanchezzbrahian | 0:ef627c2ce25b | 93 | cop_fi(FIG_I); |
| sanchezzbrahian | 0:ef627c2ce25b | 94 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 95 | case tipo_l: //L |
| sanchezzbrahian | 0:ef627c2ce25b | 96 | cop_fi(FIG_L); |
| sanchezzbrahian | 0:ef627c2ce25b | 97 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 98 | |
| sanchezzbrahian | 0:ef627c2ce25b | 99 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 100 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 101 | void d_ale() |
| sanchezzbrahian | 0:ef627c2ce25b | 102 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 103 | num=rand()%5+1; |
| sanchezzbrahian | 0:ef627c2ce25b | 104 | mcol=4; |
| sanchezzbrahian | 0:ef627c2ce25b | 105 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 106 | void move_fig()//mueve la figura por medio de botones |
| sanchezzbrahian | 0:ef627c2ce25b | 107 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 108 | int mfig=0; |
| sanchezzbrahian | 0:ef627c2ce25b | 109 | mfig=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 110 | if(mfig==30){ |
| sanchezzbrahian | 0:ef627c2ce25b | 111 | mfig=1;} |
| sanchezzbrahian | 0:ef627c2ce25b | 112 | if(mfig==29){//mover figura a la derecha |
| sanchezzbrahian | 0:ef627c2ce25b | 113 | mfig=2;} |
| sanchezzbrahian | 0:ef627c2ce25b | 114 | if(mfig==28){//mover figura a la izquierda |
| sanchezzbrahian | 0:ef627c2ce25b | 115 | mfig=3;} |
| sanchezzbrahian | 0:ef627c2ce25b | 116 | switch(mfig) |
| sanchezzbrahian | 0:ef627c2ce25b | 117 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 118 | case 0: |
| sanchezzbrahian | 0:ef627c2ce25b | 119 | |
| sanchezzbrahian | 0:ef627c2ce25b | 120 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 121 | case 1: |
| sanchezzbrahian | 0:ef627c2ce25b | 122 | grad++; |
| sanchezzbrahian | 0:ef627c2ce25b | 123 | if(grad<5){ |
| sanchezzbrahian | 0:ef627c2ce25b | 124 | |
| sanchezzbrahian | 0:ef627c2ce25b | 125 | switch (grad) |
| sanchezzbrahian | 0:ef627c2ce25b | 126 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 127 | case 1: |
| sanchezzbrahian | 0:ef627c2ce25b | 128 | mat_tmp[0]=mat_tmp1[4]; |
| sanchezzbrahian | 0:ef627c2ce25b | 129 | mat_tmp[1]=mat_tmp1[5]; |
| sanchezzbrahian | 0:ef627c2ce25b | 130 | mat_tmp[2]=mat_tmp1[6]; |
| sanchezzbrahian | 0:ef627c2ce25b | 131 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 132 | case 2: |
| sanchezzbrahian | 0:ef627c2ce25b | 133 | mat_tmp[0]=mat_tmp1[0]; |
| sanchezzbrahian | 0:ef627c2ce25b | 134 | mat_tmp[1]=mat_tmp1[2]; |
| sanchezzbrahian | 0:ef627c2ce25b | 135 | mat_tmp[2]=mat_tmp1[1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 136 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 137 | case 3: |
| sanchezzbrahian | 0:ef627c2ce25b | 138 | mat_tmp[0]=mat_tmp1[6]; |
| sanchezzbrahian | 0:ef627c2ce25b | 139 | mat_tmp[1]=mat_tmp1[5]; |
| sanchezzbrahian | 0:ef627c2ce25b | 140 | mat_tmp[2]=mat_tmp1[4]; |
| sanchezzbrahian | 0:ef627c2ce25b | 141 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 142 | case 4: |
| sanchezzbrahian | 0:ef627c2ce25b | 143 | mat_tmp[0]=mat_tmp1[0]; |
| sanchezzbrahian | 0:ef627c2ce25b | 144 | mat_tmp[1]=mat_tmp1[1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 145 | mat_tmp[2]=mat_tmp1[2]; |
| sanchezzbrahian | 0:ef627c2ce25b | 146 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 147 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 148 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 149 | if(grad>4){ |
| sanchezzbrahian | 0:ef627c2ce25b | 150 | grad=0; |
| sanchezzbrahian | 0:ef627c2ce25b | 151 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 152 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 153 | case 2: |
| sanchezzbrahian | 0:ef627c2ce25b | 154 | mcol=1; //se pone valor 1 para que haga el deplazamiento hacia los lados |
| sanchezzbrahian | 0:ef627c2ce25b | 155 | |
| sanchezzbrahian | 0:ef627c2ce25b | 156 | for(i=0;i<3;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 157 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 158 | mat_tmp[i]=mat_tmp[i]>>mcol; //mover derecha |
| sanchezzbrahian | 0:ef627c2ce25b | 159 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 160 | for(i=0;i<7;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 161 | mat_tmp1[i]=mat_tmp1[i]>>mcol; |
| sanchezzbrahian | 0:ef627c2ce25b | 162 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 163 | |
| sanchezzbrahian | 0:ef627c2ce25b | 164 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 165 | case 3: |
| sanchezzbrahian | 0:ef627c2ce25b | 166 | mcol=1; |
| sanchezzbrahian | 0:ef627c2ce25b | 167 | for(i=0;i<7;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 168 | mat_tmp1[i]=mat_tmp1[i]<<mcol; |
| sanchezzbrahian | 0:ef627c2ce25b | 169 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 170 | for(i=0;i<3;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 171 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 172 | mat_tmp[i]=mat_tmp[i]<<mcol; //mover izquierda |
| sanchezzbrahian | 0:ef627c2ce25b | 173 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 174 | |
| sanchezzbrahian | 0:ef627c2ce25b | 175 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 176 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 177 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 178 | void act_matrix(uint8_t* temp)//Evalua figura guardada y su espacio |
| sanchezzbrahian | 0:ef627c2ce25b | 179 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 180 | for (i=0;i<9;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 181 | save=*(temp+2)& mat_act[i]; |
| sanchezzbrahian | 0:ef627c2ce25b | 182 | if (save==0 ) |
| sanchezzbrahian | 0:ef627c2ce25b | 183 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 184 | fila=i+1; |
| sanchezzbrahian | 0:ef627c2ce25b | 185 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 186 | if (save!=0) |
| sanchezzbrahian | 0:ef627c2ce25b | 187 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 188 | fila=i; |
| sanchezzbrahian | 0:ef627c2ce25b | 189 | i=9; |
| sanchezzbrahian | 0:ef627c2ce25b | 190 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 191 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 192 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 193 | |
| sanchezzbrahian | 0:ef627c2ce25b | 194 | void guardar_mat(uint8_t *temp)//guarda la matriz |
| sanchezzbrahian | 0:ef627c2ce25b | 195 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 196 | mat_act[fila-3]=(*(temp+0))| mat_act[fila-3]; |
| sanchezzbrahian | 0:ef627c2ce25b | 197 | mat_act[fila-2]=(*(temp+1))| mat_act[fila-2]; |
| sanchezzbrahian | 0:ef627c2ce25b | 198 | mat_act[fila-1]=(*(temp+2))| mat_act[fila-1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 199 | }; |
| sanchezzbrahian | 0:ef627c2ce25b | 200 | void elim_lin() |
| sanchezzbrahian | 0:ef627c2ce25b | 201 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 202 | for(i=0;i<9;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 203 | if(mat_act[i]==255){ |
| sanchezzbrahian | 0:ef627c2ce25b | 204 | for(uint8_t a=i;a>=1;a--){ |
| sanchezzbrahian | 0:ef627c2ce25b | 205 | sendSPI(a,mat_act[a-1]); |
| sanchezzbrahian | 0:ef627c2ce25b | 206 | mat_act[a]=mat_act[a-1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 207 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 208 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 209 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 210 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 211 | int main() |
| sanchezzbrahian | 0:ef627c2ce25b | 212 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 213 | test(); |
| sanchezzbrahian | 0:ef627c2ce25b | 214 | borrar(); |
| sanchezzbrahian | 0:ef627c2ce25b | 215 | while(1){ |
| sanchezzbrahian | 0:ef627c2ce25b | 216 | while(read_command()==0); |
| sanchezzbrahian | 0:ef627c2ce25b | 217 | //d_ale(); |
| sanchezzbrahian | 0:ef627c2ce25b | 218 | ingred_d(); |
| sanchezzbrahian | 0:ef627c2ce25b | 219 | act_matrix(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 220 | for (cont=0;cont<fila;cont++) |
| sanchezzbrahian | 0:ef627c2ce25b | 221 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 222 | move_fig(); |
| sanchezzbrahian | 0:ef627c2ce25b | 223 | act_matrix(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 224 | imp_mat(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 225 | wait_ms(500); |
| sanchezzbrahian | 0:ef627c2ce25b | 226 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 227 | guardar_mat(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 228 | elim_lin(); |
| sanchezzbrahian | 0:ef627c2ce25b | 229 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 230 | } |