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
- Committer:
- Nicolas_11
- Date:
- 2018-11-23
- Revision:
- 0:cf64daf01e11
- Child:
- 2:5faf2fd6c613
File content as of revision 0:cf64daf01e11:
#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;}
}