Andres Cano
/
STM32_read_analog
juego 2
Diff: main.cpp
- Revision:
- 0:adbdc52e1846
- Child:
- 1:17e8d7967b5a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Nov 16 04:25:15 2018 +0000 @@ -0,0 +1,162 @@ +#include "mbed.h" +#include "MPU6050.h" +SPI deviceM(PB_15, PB_14, PB_13); +DigitalOut ssel (PB_12); +Serial a(USBTX,USBRX); +MPU6050 Wire(PB_9,PB_8); +InterruptIn iz(PA_14); +InterruptIn de(PA_13); +#define uint8_t unsigned char +int pos; +float vel=200; +int b; +uint8_t Matr[9]={0,0,0,0,0,0,0,0,0}; +uint8_t entorno={0b10000001}; +uint8_t carro={0b00011000}; +uint8_t obs=0b01100000; +void derecha(); +void izquierda(); +void colision(); +void juego(); +void accelerometro(); +int con; + +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); + borrar(); + vel=200; + carro=0b00011000; + } + +void imprimir() +{ + + + int c_d; //carro, obstaculo y entorno + int c_e; //carro y entorno + int din; + for(int i=1;i<=7;i++){ + sendSPI(i,entorno); + } + for(int j=1;j<=10;j++){ + din=(obs>>b) | entorno ; + c_d= carro | din; + c_e=carro | entorno; + sendSPI(8,c_e); + if(j<=7){ + sendSPI(j,din); + } + + if(j>1 && j<=8) + sendSPI(j-1,din); + + if(j>2 && j<=9){ + sendSPI(j-2,entorno); + } + if(j>=8&&j<=9){ + sendSPI(8,c_d); + } + if(j>10){ + sendSPI(8,c_e); + } + + if( (obs>>b)==carro && j==8 ){ + colision(); + } + + wait_ms(vel); + con++; + if(con==10){ + vel=vel-10;} + } + +} + +int main() { + while(1){ + //accelerometro(); + juego(); + } +} + +void juego(){ + inicializar(); + de.fall(&derecha); + iz.fall(&izquierda); + a.printf("inicio\n"); + while(1){ + con=0; + b=2*(rand()%3); + a.printf("numero %d\n",b); + imprimir(); + } + } + +void derecha() +{ + if(carro==0b00011000 || carro==0b01100000) + carro=carro>>2; + a.printf("entra der \n"); + return; +} +void izquierda() +{ + if( carro==0b00000110 || carro==0b00011000 ) + carro=carro<<2; + a.printf("entra izq \n"); + return; +} + +void colision () +{ + borrar(); + sendSPI(0x0F,0); + sendSPI(3,0b01111110); + sendSPI(4,0b01111110); + sendSPI(5,0b01111110); + sendSPI(6,0b01111110); + wait(2); + juego(); +} + +void accelerometro(){ + int holi; + Wire.setAcceleroRange('MPU6050_ACCELERO_RANGE_16G'); + int accelero[3]; Wire.getAcceleroRaw(accelero); + int valor=accelero[1]; + if(valor<=(2000) && valor>=(1000)){ + holi=1;} + if(valor<(1000) && valor>=(-1000)){ + holi=2;} + if(valor<(-1000) && valor>=(-2000)){ + holi=3;} + a.printf("holi : \t %d \n",holi); + wait(0.8); + + }