juego 2

Dependencies:   mbed MPU6050

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);
+         
+    }