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
00001 #include "mbed.h" 00002 #include "datos.h" 00003 00004 Serial pc(SERIAL_TX, SERIAL_RX); 00005 SPI deviceM(PA_7, PA_6, PA_5); 00006 DigitalOut ssel (PA_4); 00007 00008 00009 #define uint8_t unsigned char 00010 uint8_t screen[8]={0,0,0,0,0,0,0,0}; 00011 uint8_t screen2[8]={0,0,0,0,0,0,0,0}; 00012 uint8_t verifica; 00013 uint8_t mascara; 00014 int velocidad=70; 00015 int segundo=1; 00016 00017 /////////////////////////////////////////////////////////////////////////////// 00018 void sendSPI(uint8_t d1, uint8_t d2)// envio de datos al max 00019 { 00020 deviceM.unlock(); 00021 ssel=0; 00022 deviceM.write(d1); 00023 deviceM.write(d2); 00024 ssel=1; 00025 deviceM.lock(); 00026 }; 00027 /////////////////////////////////////////////////////////////////////////////// 00028 void borrar() // Borrar todos los datos de la matriz 00029 { 00030 int j; 00031 for(j=1;j<9;j++) 00032 { 00033 sendSPI(j,0); 00034 wait_ms(1); 00035 } 00036 } 00037 /////////////////////////////////////////////////////////////////////////////// 00038 void enviar() // Encargado de enviar la matriz completa 00039 { 00040 int i; 00041 00042 for(i=0;i<8;i++) 00043 { 00044 sendSPI(i+1,screen[i]); 00045 } 00046 } 00047 /////////////////////////////////////////////////////////////////////////////// 00048 void ver() // Informe de datos "no se usa " 00049 { 00050 int i; 00051 for(i=0;i<8;i++) 00052 { 00053 pc.printf("posicion %d ",i); 00054 pc.printf("= %d \n",screen[i]); 00055 } 00056 } 00057 /////////////////////////////////////////////////////////////////////////////// 00058 void escribir() // Guarda y compara los datos entrantes a la matriz y los que ya estaban 00059 { 00060 int i; 00061 00062 for(i=0;i<tamano;i++) 00063 { 00064 screen2[posicion-i]=(start[posicion-i] & 128); 00065 start[posicion-i]=start[posicion-i] << 1; 00066 } 00067 00068 //pc.printf("1 \n"); 00069 //ver(); 00070 00071 00072 for(i=0;i<tamano;i++) 00073 { 00074 screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] ) | (screen[posicion-i] & mascara) | (screen[posicion-i] & mascara*segundo); 00075 } 00076 00077 //pc.printf("2 \n"); 00078 //ver(); 00079 enviar(); 00080 } 00081 /////////////////////////////////////////////////////////////////////////////// 00082 int ubicacion() //Limita el ingreso de posicion no mayor a 7 00083 { 00084 int a; 00085 if((posicion_original+tamano) <= 8 && (posicion_original+tamano) >= 0 ) 00086 { 00087 a=1; 00088 } 00089 else 00090 { 00091 //pc.printf("Error de posicion \n"); 00092 //pc.printf("Posicion original %d \n",posicion_original); 00093 //pc.printf("tamano %d \n",tamano); 00094 a=0; 00095 } 00096 return a; 00097 } 00098 /////////////////////////////////////////////////////////////////////////////// 00099 void analisis() // Verifica la siguiente fila para saber si se puede desplazar 00100 { 00101 int i; 00102 uint8_t a; 00103 00104 for(i=0;i<tamano;i++) 00105 { 00106 a=screen[posicion-i] & mascara; 00107 // pc.printf("verificacion siguiente fila = %d \n ",a); 00108 if(mascara==a) 00109 { 00110 i=tamano; 00111 verifica=1; 00112 } 00113 else 00114 { 00115 verifica=0; 00116 } 00117 } 00118 } 00119 //////////////////////////////////////////////////////////////////////////////// 00120 void analisis2() // Prueba 00121 { 00122 int i; 00123 uint8_t a; 00124 00125 for(i=0;i<tamano;i++) 00126 { 00127 a=screen[posicion-i] & mascara; 00128 a= a & ((screen[posicion-i]>>1) & ~(mascara - 1)); 00129 pc.printf("verificacion siguiente fila = %d \n ",a); 00130 if(a!=0) 00131 { 00132 i=tamano; 00133 verifica=1; 00134 segundo=1; 00135 if(verificar2==1) 00136 { 00137 verificar2=0; 00138 verifica=0; 00139 segundo=2; 00140 } 00141 } 00142 else 00143 { 00144 segundo=1; 00145 verifica=0; 00146 } 00147 } 00148 00149 } 00150 /////////////////////////////////////////////////////////////////////////////// 00151 void play () // Funcion encargada de determianr el estado de la mascara 00152 { 00153 int a=1; 00154 mascara=128; 00155 //pc.printf("Posicion original 1 %d \n",posicion_original); 00156 a=ubicacion(); 00157 while(a==1) 00158 { 00159 analisis2(); 00160 00161 if (verifica==1 || mascara==0) 00162 { 00163 a=0; 00164 //pc.printf("SI \n"); 00165 } 00166 else 00167 { 00168 //pc.printf("NO \n"); 00169 escribir(); 00170 mascara=mascara/2; 00171 wait_ms(velocidad); 00172 //pc.printf("_____________________\n\n"); 00173 } 00174 } 00175 } 00176 00177 /////////////////////////////////////////////////////////////////////////////// 00178 00179 int main() { // fucnion principal 00180 00181 sendSPI(0x0c,1); 00182 sendSPI(0x0F,1); 00183 wait (1); 00184 00185 sendSPI(0x0F,0); 00186 wait (1); 00187 sendSPI(0xB,0x7); 00188 borrar(); 00189 00190 int n; 00191 int giro, inicio , fin; 00192 while(1){ 00193 00194 inicio=pc.getc(); 00195 //pc.printf("Ingrese el numero de la figura \n"); 00196 n = pc.getc(); 00197 //pc.printf("figura %d \n ",n); 00198 00199 //pc.printf("Ingrese el numero de angulo de giro \n"); 00200 giro = pc.getc(); 00201 //pc.printf("giro %d \n ",giro); 00202 00203 //pc.printf("Ingrese la posicion \n"); 00204 posicion = pc.getc(); 00205 //pc.printf("posicion %d \n ",posicion); 00206 00207 fin=pc.getc(); 00208 wait(0.2); 00209 00210 if((inicio==60) && (fin==62)) 00211 { 00212 00213 switch(n) 00214 { 00215 case 0: a(giro); play(); break; 00216 00217 case 1: b(giro); play(); break; 00218 00219 case 2: c(giro); play(); break; 00220 00221 case 3: d(giro); play(); break; 00222 00223 case 4: e(giro); play(); break; 00224 00225 case 5: f(giro); play(); break; 00226 00227 case 6: g(giro); play(); break; 00228 00229 default: pc.printf("Error en figura \n"); 00230 } 00231 } 00232 } 00233 }
Generated on Tue Jul 19 2022 20:47:01 by
1.7.2