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.
Diff: main.cpp
- Revision:
- 0:cf64daf01e11
- Child:
- 2:5faf2fd6c613
diff -r 000000000000 -r cf64daf01e11 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Nov 23 13:21:38 2018 +0000
@@ -0,0 +1,271 @@
+#include "mbed.h"
+#include "MPU6050.h"
+SPI deviceM(PB_15, PB_14, PB_13);
+DigitalOut ssel (PB_12);
+Serial a(USBTX,USBRX);
+
+MPU6050 mpu1(PB_9,PB_8);
+
+
+#define uint8_t unsigned char
+int Tipofig=0;
+int vcol;
+float Vel=0.8;
+int grado=0;
+float value_accelerox;
+float value_acceleroy;
+int in,out;
+int lim;
+int lim2;
+int m;
+int hhh;
+int col2;
+int rot;
+int pos_x;
+int pos_y;
+int juego=1;
+uint8_t Matr[9]={0,0,0,0,0,0,0,0,0};
+uint8_t F_t[3]={0b11100000,0b01000000,0};
+uint8_t F_s[3]={0b11000000,0b01100000,0};
+uint8_t F_c[3]={0b11000000,0b11000000,0};
+uint8_t F_l[3]={0b11000000,0b10000000,0b10000000};
+uint8_t F_I[3]={0b10000000,0b10000000,0b10000000};
+uint8_t Fig[3]={0,0,0};
+int poscol;
+
+
+
+
+void seleccion(uint8_t sc);
+void giro(uint8_t gi);
+void save(uint8_t *vC,uint8_t col);
+void imprimir();
+void Izq();
+void Der();
+void accelerometro();
+void tetris();
+
+
+void sendSPI(uint8_t d1, uint8_t d2)
+{
+ deviceM.unlock();
+ ssel=0;
+ deviceM.write(d1);
+ deviceM.write(d2);
+ ssel=1;
+ deviceM.lock();
+}
+
+void borrar()
+{
+ for(int i;i<=8;i++) {
+ sendSPI(i,0);
+ }
+}
+
+void inicializar(){
+
+ a.baud(9600);
+ sendSPI(0x0c,1);
+ sendSPI(0x09,0);
+ sendSPI(0x0A,0x01);
+ sendSPI(0x0F,1);
+ wait (0.5);
+ sendSPI(0x0F,0);
+ wait(0.5);
+ sendSPI(0xB,0x7);
+ mpu1.setAcceleroRange('MPU6050_ACCELERO_RANGE_4G');
+ borrar();
+ }
+
+void seleccion(uint8_t sc){
+ switch(sc) {
+ case 1: Fig[0]=F_t[0]; Fig[1]=F_t[1];Fig[2]=F_t[2]; break;
+ case 2: Fig[0]=F_s[0]; Fig[1]=F_s[1];Fig[2]=F_s[2]; break;
+ case 3: Fig[0]=F_c[0]; Fig[1]=F_c[1];Fig[2]=F_c[2]; break;
+ case 4: Fig[0]=F_l[0]; Fig[1]=F_l[1];Fig[2]=F_l[2]; break;
+ case 5: Fig[0]=F_I[0]; Fig[1]=F_I[1];Fig[2]=F_I[2]; break;
+ default:break;}
+ }
+
+void giro(uint8_t gi)
+ {
+ int i;
+ int j;
+ int k;
+ uint8_t vec_aux[3]={0,0,0};
+ switch(gi){
+ case 1:
+ break;
+ case 2:
+ for(j=0;j<3;j++){
+ for(i=0;i<3;i++){
+ vec_aux[i]=(((((Fig[j]))<<2-i)&0b10000000)>>j)+vec_aux[i];
+ }
+ }
+ for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
+
+ break;
+ case 3:
+ for(j=0;j<3;j++){
+ for(i=0;i<3;i++){
+ vec_aux[i]=(((((Fig[2-i]))>>2-j)&0b00100000)<<j)+vec_aux[i];
+ }
+ }
+ for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
+ break;
+ case 4:
+ for(j=0;j<3;j++){
+ for(i=0;i<3;i++){
+ vec_aux[i]= ( ( ((Fig[j])>>2-i) & (0b00100000) )<<j )+vec_aux[i];
+ }
+ }
+ for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
+ break;
+ default:
+ break;
+ }
+
+ }
+
+
+
+void limite(uint8_t *sc,uint8_t trasladar)
+{
+ int i;
+ int f;
+ uint8_t t;
+ for(i=1;i<=8;i++)
+ {
+ t=(Fig[0])>>(trasladar-1);
+ if(i>7){f=(*(sc+(8)))&(t);break;}
+
+ else{f=(*(sc+(i+1)))&(t);}
+
+ if(f>0){lim=i;break;}
+ else{lim=8;}
+ }
+ a.printf("\n stop de fila \n %d",i);
+ a.printf("\n limite \n %d",lim);
+}
+
+void imprimir(uint8_t colum)
+{
+
+ if(col2>6){col2=6;}
+
+ uint8_t dat [8];
+ int i;
+ //int verif=0;
+ int aux;
+
+ limite(Matr,colum);
+
+ for(i=1;i<=lim;i++){
+ accelerometro();
+ a.printf("valor columna %d\n",col2);
+ /* if(verif == pos_x ){aux=1;}
+ else{
+ aux=0;
+ if(pos_x==3){col2--;if(col2<2){col2=1;}}
+ if(pos_x==1){col2++;if(col2>=6){col2=6;}}
+ a.printf("chichico\n");
+ }
+ if(aux == 0){verif=pos_x;aux=1;}
+ */
+ if(pos_x==3){col2--;if(col2<2){col2=1;}}
+ if(pos_x==1){col2++;if(col2>=6){col2=6;}}
+ //if(value_acceleroy>3){grado++;if(grado>4){grado=1;}giro(grado);}
+ if(i>=1){
+ dat[1]=((Fig[0])>>col2-1) ;
+ dat[2]=((Fig[1])>>col2-1) ;
+ dat[3]=((Fig[2])>>col2-1) ;
+ uint8_t e=~((0b11100000)>>col2-1);
+ Matr[i]=dat[1] | Matr[i];
+ Matr[i-1]=((dat[2] | Matr[i-1])&(dat[2]|e));
+ Matr[i-2]=((dat[3] | Matr[i-2])&(dat[3]|e));
+ if(i>3){Matr[i-3]=Matr[i-3]& e;}
+ sendSPI(i,(Matr[i]));
+ sendSPI(i-1,(Matr[i-1]));
+ sendSPI(i-2,(Matr[i-2]));
+ sendSPI((i-3),(Matr[i-3]));
+ wait(Vel);
+ }
+ }
+}
+/*
+void tetris(){
+ while(1){
+
+ in=a.getc();
+ Tipofig=a.getc();
+ //vcol=a.getc();
+ grado=a.getc();
+ out=a.getc();
+ vcol=rand()%7 +1;
+ if(in==60 && Tipofig<=5 && grado<=4 && out==62){
+ seleccion(Tipofig);
+ giro(grado);
+ imprimir(vcol);
+
+ }
+ else{
+ if(juego==2){break;}
+ break;
+ }
+
+ }
+ }
+*/
+
+
+int main() {
+
+ inicializar();
+
+ while(1){
+ in=a.getc();
+ Tipofig=a.getc();
+ //vcol=a.getc();
+ grado=a.getc();
+ out=a.getc();
+ vcol=rand()%7 +1;
+ if(in==60 && Tipofig<=5 && grado<=4 && out==62){
+ seleccion(Tipofig);
+ giro(grado);
+ imprimir(vcol);
+
+ }
+ else{
+ break;
+ }
+ }
+}
+
+
+void accelerometro(){
+
+ float accelero[3];
+ mpu1.getAccelero(accelero);
+ value_accelerox = accelero[1];
+ value_acceleroy = accelero[0];
+ if(value_accelerox>-9 && value_accelerox<-2){//a.printf("valor acelerometro 1 %f\n",value_accelerox); a.printf("valor1 pos_x %d\n",col2);
+
+ pos_x=1;}
+ if(value_accelerox>-1 && value_accelerox<3){//a.printf("valor acelerometro 2 %f\n",value_accelerox); a.printf("valor2 pos_x %d\n",col2);
+
+ pos_x=2;}
+ if(value_accelerox>3 && value_accelerox<9){//a.printf("valor acelerometro 3 %f\n",value_accelerox); a.printf("valor2 pos_x %d\n",col2);
+
+ pos_x=3;}
+
+ if(value_acceleroy>3){//a.printf("valor acelerometro 3 %f\n",value_acceleroy);
+ pos_y=1;}
+ }
+
+
+
+
+
+
+