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@1:2ac3cf92c198, 2018-11-02 (annotated)
- Committer:
- sanchezzbrahian
- Date:
- Fri Nov 02 15:43:31 2018 +0000
- Revision:
- 1:2ac3cf92c198
- Parent:
- 0:ef627c2ce25b
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 | 1:2ac3cf92c198 | 4 | AnalogIn vrx(A0); |
| sanchezzbrahian | 1:2ac3cf92c198 | 5 | AnalogIn vry(A1); |
| sanchezzbrahian | 1:2ac3cf92c198 | 6 | |
| sanchezzbrahian | 0:ef627c2ce25b | 7 | |
| sanchezzbrahian | 0:ef627c2ce25b | 8 | SPI deviceM(PB_15, PB_14, PB_13); |
| sanchezzbrahian | 0:ef627c2ce25b | 9 | DigitalOut ssel (PB_12); |
| sanchezzbrahian | 0:ef627c2ce25b | 10 | |
| sanchezzbrahian | 0:ef627c2ce25b | 11 | Serial pc(USBTX,USBRX); |
| sanchezzbrahian | 0:ef627c2ce25b | 12 | |
| sanchezzbrahian | 0:ef627c2ce25b | 13 | uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla. |
| sanchezzbrahian | 0:ef627c2ce25b | 14 | uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0}; |
| sanchezzbrahian | 0:ef627c2ce25b | 15 | uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0}; //Matriz temporal de las fichas. |
| sanchezzbrahian | 0:ef627c2ce25b | 16 | uint8_t dat[MAXDAT]={0,0,0}; |
| sanchezzbrahian | 0:ef627c2ce25b | 17 | uint8_t fila=0,save=0,i=0,cont=0,mcol=0,num=0,grad=0; |
| sanchezzbrahian | 1:2ac3cf92c198 | 18 | float mx; |
| sanchezzbrahian | 1:2ac3cf92c198 | 19 | float msx; |
| sanchezzbrahian | 1:2ac3cf92c198 | 20 | float my; |
| sanchezzbrahian | 1:2ac3cf92c198 | 21 | float msy; |
| sanchezzbrahian | 0:ef627c2ce25b | 22 | |
| sanchezzbrahian | 0:ef627c2ce25b | 23 | void sendSPI(uint8_t d1, uint8_t d2) |
| sanchezzbrahian | 0:ef627c2ce25b | 24 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 25 | deviceM.unlock(); |
| sanchezzbrahian | 0:ef627c2ce25b | 26 | ssel=0; |
| sanchezzbrahian | 0:ef627c2ce25b | 27 | deviceM.write(d1); |
| sanchezzbrahian | 0:ef627c2ce25b | 28 | deviceM.write(d2); |
| sanchezzbrahian | 0:ef627c2ce25b | 29 | ssel=1; |
| sanchezzbrahian | 0:ef627c2ce25b | 30 | deviceM.lock(); |
| sanchezzbrahian | 0:ef627c2ce25b | 31 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 32 | void test() //Test |
| sanchezzbrahian | 0:ef627c2ce25b | 33 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 34 | sendSPI(0x09,0); //No decodificacion |
| sanchezzbrahian | 0:ef627c2ce25b | 35 | sendSPI(0x0B,0x07); //Usa 7 leds |
| sanchezzbrahian | 0:ef627c2ce25b | 36 | sendSPI(0x0C,1); //No se apaga |
| sanchezzbrahian | 0:ef627c2ce25b | 37 | sendSPI(0x0A,0x0); |
| sanchezzbrahian | 0:ef627c2ce25b | 38 | for (int i=0;i<2;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 39 | sendSPI(0x0F,1); |
| sanchezzbrahian | 0:ef627c2ce25b | 40 | wait (0.1); |
| sanchezzbrahian | 0:ef627c2ce25b | 41 | sendSPI(0x0f,0); |
| sanchezzbrahian | 0:ef627c2ce25b | 42 | wait (0.1); } |
| sanchezzbrahian | 0:ef627c2ce25b | 43 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 44 | void borrar() //borrar toda la matriz; |
| sanchezzbrahian | 0:ef627c2ce25b | 45 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 46 | int i; |
| sanchezzbrahian | 0:ef627c2ce25b | 47 | for(i=0;i<=8;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 48 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 49 | sendSPI(0x0+i,0x00); |
| sanchezzbrahian | 0:ef627c2ce25b | 50 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 51 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 52 | void imp_mat(uint8_t *temp)// Hace el desplazamiento hacia abajo de la figura |
| sanchezzbrahian | 0:ef627c2ce25b | 53 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 54 | sendSPI(cont-3,mat_act[cont-3]); |
| sanchezzbrahian | 0:ef627c2ce25b | 55 | sendSPI(cont-2,(*(temp+0) | mat_act[cont-2])); |
| sanchezzbrahian | 0:ef627c2ce25b | 56 | sendSPI(cont-1,(*(temp+1) | mat_act[cont-1])); |
| sanchezzbrahian | 0:ef627c2ce25b | 57 | sendSPI(cont,(*(temp+2) | mat_act[cont])); |
| sanchezzbrahian | 0:ef627c2ce25b | 58 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 59 | uint32_t read_command() //ingresa "<",">" y define el tamaño del vector "dat" |
| sanchezzbrahian | 0:ef627c2ce25b | 60 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 61 | char intc=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 62 | while(intc != '<') |
| sanchezzbrahian | 0:ef627c2ce25b | 63 | intc=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 64 | for (int i =0;i<MAXDAT;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 65 | dat[i]=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 66 | intc=pc.getc(); |
| sanchezzbrahian | 0:ef627c2ce25b | 67 | if(intc != '>'){ |
| sanchezzbrahian | 0:ef627c2ce25b | 68 | return 0; |
| sanchezzbrahian | 0:ef627c2ce25b | 69 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 70 | return 1; |
| sanchezzbrahian | 0:ef627c2ce25b | 71 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 72 | void cop_fi (uint8_t* tfig) //Almacena la figura en la matriz temporal |
| sanchezzbrahian | 0:ef627c2ce25b | 73 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 74 | for(i=0;i<8;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 75 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 76 | mat_tmp[i]=*(tfig+i)>>dat[1]-1; |
| sanchezzbrahian | 0:ef627c2ce25b | 77 | |
| sanchezzbrahian | 0:ef627c2ce25b | 78 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 79 | for(i=0;i<8;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 80 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 81 | mat_tmp1[i]= mat_tmp[i]; |
| sanchezzbrahian | 0:ef627c2ce25b | 82 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 83 | } |
| sanchezzbrahian | 1:2ac3cf92c198 | 84 | void d_ale() |
| sanchezzbrahian | 1:2ac3cf92c198 | 85 | { |
| sanchezzbrahian | 1:2ac3cf92c198 | 86 | num=rand()%5+1; |
| sanchezzbrahian | 1:2ac3cf92c198 | 87 | mcol=4; |
| sanchezzbrahian | 1:2ac3cf92c198 | 88 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 89 | void ingred_d() //Tipo de figuras |
| sanchezzbrahian | 0:ef627c2ce25b | 90 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 91 | uint8_t tf=dat[0]; |
| sanchezzbrahian | 1:2ac3cf92c198 | 92 | //uint8_t tf=num; |
| sanchezzbrahian | 0:ef627c2ce25b | 93 | |
| sanchezzbrahian | 0:ef627c2ce25b | 94 | switch(tf) |
| sanchezzbrahian | 0:ef627c2ce25b | 95 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 96 | case tipo_c: // Cuadrado |
| sanchezzbrahian | 0:ef627c2ce25b | 97 | cop_fi(FIG_C); |
| sanchezzbrahian | 0:ef627c2ce25b | 98 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 99 | case tipo_s: //S |
| sanchezzbrahian | 0:ef627c2ce25b | 100 | cop_fi(FIG_S); |
| sanchezzbrahian | 0:ef627c2ce25b | 101 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 102 | case tipo_t: //T |
| sanchezzbrahian | 0:ef627c2ce25b | 103 | cop_fi(FIG_T); |
| sanchezzbrahian | 0:ef627c2ce25b | 104 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 105 | case tipo_i: //I |
| sanchezzbrahian | 0:ef627c2ce25b | 106 | cop_fi(FIG_I); |
| sanchezzbrahian | 0:ef627c2ce25b | 107 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 108 | case tipo_l: //L |
| sanchezzbrahian | 0:ef627c2ce25b | 109 | cop_fi(FIG_L); |
| sanchezzbrahian | 0:ef627c2ce25b | 110 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 111 | |
| sanchezzbrahian | 0:ef627c2ce25b | 112 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 113 | } |
| sanchezzbrahian | 1:2ac3cf92c198 | 114 | void analogo() |
| sanchezzbrahian | 0:ef627c2ce25b | 115 | { |
| sanchezzbrahian | 1:2ac3cf92c198 | 116 | mx=vrx.read(); |
| sanchezzbrahian | 1:2ac3cf92c198 | 117 | msx=mx*3300; |
| sanchezzbrahian | 1:2ac3cf92c198 | 118 | my=vry.read(); |
| sanchezzbrahian | 1:2ac3cf92c198 | 119 | msy=my*3300; |
| sanchezzbrahian | 1:2ac3cf92c198 | 120 | printf("Datosx = %f",msx); |
| sanchezzbrahian | 1:2ac3cf92c198 | 121 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 122 | void move_fig()//mueve la figura por medio de botones |
| sanchezzbrahian | 0:ef627c2ce25b | 123 | { |
| sanchezzbrahian | 1:2ac3cf92c198 | 124 | analogo(); |
| sanchezzbrahian | 1:2ac3cf92c198 | 125 | int mfig; |
| sanchezzbrahian | 1:2ac3cf92c198 | 126 | |
| sanchezzbrahian | 1:2ac3cf92c198 | 127 | if(msx>1800){ |
| sanchezzbrahian | 0:ef627c2ce25b | 128 | mfig=1;} |
| sanchezzbrahian | 1:2ac3cf92c198 | 129 | if(msy<25){//mover figura a la derecha |
| sanchezzbrahian | 0:ef627c2ce25b | 130 | mfig=2;} |
| sanchezzbrahian | 1:2ac3cf92c198 | 131 | if(msy>1800){//mover figura a la izquierda |
| sanchezzbrahian | 0:ef627c2ce25b | 132 | mfig=3;} |
| sanchezzbrahian | 1:2ac3cf92c198 | 133 | |
| sanchezzbrahian | 0:ef627c2ce25b | 134 | switch(mfig) |
| sanchezzbrahian | 0:ef627c2ce25b | 135 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 136 | case 0: |
| sanchezzbrahian | 0:ef627c2ce25b | 137 | |
| sanchezzbrahian | 0:ef627c2ce25b | 138 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 139 | case 1: |
| sanchezzbrahian | 0:ef627c2ce25b | 140 | grad++; |
| sanchezzbrahian | 0:ef627c2ce25b | 141 | if(grad<5){ |
| sanchezzbrahian | 0:ef627c2ce25b | 142 | |
| sanchezzbrahian | 0:ef627c2ce25b | 143 | switch (grad) |
| sanchezzbrahian | 0:ef627c2ce25b | 144 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 145 | case 1: |
| sanchezzbrahian | 0:ef627c2ce25b | 146 | mat_tmp[0]=mat_tmp1[4]; |
| sanchezzbrahian | 0:ef627c2ce25b | 147 | mat_tmp[1]=mat_tmp1[5]; |
| sanchezzbrahian | 0:ef627c2ce25b | 148 | mat_tmp[2]=mat_tmp1[6]; |
| sanchezzbrahian | 0:ef627c2ce25b | 149 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 150 | case 2: |
| sanchezzbrahian | 0:ef627c2ce25b | 151 | mat_tmp[0]=mat_tmp1[0]; |
| sanchezzbrahian | 0:ef627c2ce25b | 152 | mat_tmp[1]=mat_tmp1[2]; |
| sanchezzbrahian | 0:ef627c2ce25b | 153 | mat_tmp[2]=mat_tmp1[1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 154 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 155 | case 3: |
| sanchezzbrahian | 0:ef627c2ce25b | 156 | mat_tmp[0]=mat_tmp1[6]; |
| sanchezzbrahian | 0:ef627c2ce25b | 157 | mat_tmp[1]=mat_tmp1[5]; |
| sanchezzbrahian | 0:ef627c2ce25b | 158 | mat_tmp[2]=mat_tmp1[4]; |
| sanchezzbrahian | 0:ef627c2ce25b | 159 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 160 | case 4: |
| sanchezzbrahian | 0:ef627c2ce25b | 161 | mat_tmp[0]=mat_tmp1[0]; |
| sanchezzbrahian | 0:ef627c2ce25b | 162 | mat_tmp[1]=mat_tmp1[1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 163 | mat_tmp[2]=mat_tmp1[2]; |
| sanchezzbrahian | 0:ef627c2ce25b | 164 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 165 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 166 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 167 | if(grad>4){ |
| sanchezzbrahian | 0:ef627c2ce25b | 168 | grad=0; |
| sanchezzbrahian | 0:ef627c2ce25b | 169 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 170 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 171 | case 2: |
| sanchezzbrahian | 0:ef627c2ce25b | 172 | mcol=1; //se pone valor 1 para que haga el deplazamiento hacia los lados |
| sanchezzbrahian | 0:ef627c2ce25b | 173 | |
| sanchezzbrahian | 0:ef627c2ce25b | 174 | for(i=0;i<3;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 175 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 176 | mat_tmp[i]=mat_tmp[i]>>mcol; //mover derecha |
| sanchezzbrahian | 1:2ac3cf92c198 | 177 | |
| sanchezzbrahian | 0:ef627c2ce25b | 178 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 179 | for(i=0;i<7;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 180 | mat_tmp1[i]=mat_tmp1[i]>>mcol; |
| sanchezzbrahian | 0:ef627c2ce25b | 181 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 182 | |
| sanchezzbrahian | 0:ef627c2ce25b | 183 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 184 | case 3: |
| sanchezzbrahian | 0:ef627c2ce25b | 185 | mcol=1; |
| sanchezzbrahian | 0:ef627c2ce25b | 186 | for(i=0;i<7;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 187 | mat_tmp1[i]=mat_tmp1[i]<<mcol; |
| sanchezzbrahian | 0:ef627c2ce25b | 188 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 189 | for(i=0;i<3;i++) |
| sanchezzbrahian | 0:ef627c2ce25b | 190 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 191 | mat_tmp[i]=mat_tmp[i]<<mcol; //mover izquierda |
| sanchezzbrahian | 0:ef627c2ce25b | 192 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 193 | |
| sanchezzbrahian | 0:ef627c2ce25b | 194 | break; |
| sanchezzbrahian | 0:ef627c2ce25b | 195 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 196 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 197 | void act_matrix(uint8_t* temp)//Evalua figura guardada y su espacio |
| sanchezzbrahian | 0:ef627c2ce25b | 198 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 199 | for (i=0;i<9;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 200 | save=*(temp+2)& mat_act[i]; |
| sanchezzbrahian | 0:ef627c2ce25b | 201 | if (save==0 ) |
| sanchezzbrahian | 0:ef627c2ce25b | 202 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 203 | fila=i+1; |
| sanchezzbrahian | 0:ef627c2ce25b | 204 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 205 | if (save!=0) |
| sanchezzbrahian | 0:ef627c2ce25b | 206 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 207 | fila=i; |
| sanchezzbrahian | 0:ef627c2ce25b | 208 | i=9; |
| sanchezzbrahian | 0:ef627c2ce25b | 209 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 210 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 211 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 212 | |
| sanchezzbrahian | 0:ef627c2ce25b | 213 | void guardar_mat(uint8_t *temp)//guarda la matriz |
| sanchezzbrahian | 0:ef627c2ce25b | 214 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 215 | mat_act[fila-3]=(*(temp+0))| mat_act[fila-3]; |
| sanchezzbrahian | 0:ef627c2ce25b | 216 | mat_act[fila-2]=(*(temp+1))| mat_act[fila-2]; |
| sanchezzbrahian | 0:ef627c2ce25b | 217 | mat_act[fila-1]=(*(temp+2))| mat_act[fila-1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 218 | }; |
| sanchezzbrahian | 0:ef627c2ce25b | 219 | void elim_lin() |
| sanchezzbrahian | 0:ef627c2ce25b | 220 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 221 | for(i=0;i<9;i++){ |
| sanchezzbrahian | 0:ef627c2ce25b | 222 | if(mat_act[i]==255){ |
| sanchezzbrahian | 0:ef627c2ce25b | 223 | for(uint8_t a=i;a>=1;a--){ |
| sanchezzbrahian | 0:ef627c2ce25b | 224 | sendSPI(a,mat_act[a-1]); |
| sanchezzbrahian | 0:ef627c2ce25b | 225 | mat_act[a]=mat_act[a-1]; |
| sanchezzbrahian | 0:ef627c2ce25b | 226 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 227 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 228 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 229 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 230 | int main() |
| sanchezzbrahian | 0:ef627c2ce25b | 231 | { |
| sanchezzbrahian | 0:ef627c2ce25b | 232 | test(); |
| sanchezzbrahian | 0:ef627c2ce25b | 233 | borrar(); |
| sanchezzbrahian | 0:ef627c2ce25b | 234 | while(1){ |
| sanchezzbrahian | 0:ef627c2ce25b | 235 | while(read_command()==0); |
| sanchezzbrahian | 0:ef627c2ce25b | 236 | //d_ale(); |
| sanchezzbrahian | 0:ef627c2ce25b | 237 | ingred_d(); |
| sanchezzbrahian | 0:ef627c2ce25b | 238 | act_matrix(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 239 | for (cont=0;cont<fila;cont++) |
| sanchezzbrahian | 1:2ac3cf92c198 | 240 | { |
| sanchezzbrahian | 1:2ac3cf92c198 | 241 | analogo(); |
| sanchezzbrahian | 0:ef627c2ce25b | 242 | move_fig(); |
| sanchezzbrahian | 0:ef627c2ce25b | 243 | act_matrix(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 244 | imp_mat(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 245 | wait_ms(500); |
| sanchezzbrahian | 0:ef627c2ce25b | 246 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 247 | guardar_mat(mat_tmp); |
| sanchezzbrahian | 0:ef627c2ce25b | 248 | elim_lin(); |
| sanchezzbrahian | 0:ef627c2ce25b | 249 | } |
| sanchezzbrahian | 0:ef627c2ce25b | 250 | } |