prueba

Dependencies:   mbed SDFileSystem FXOS8700Q

TP para SO. Escribe a memoria SD, lee inputs desde la coneccion serial a una pc, muestra en pantalla de la misma un menu y permite visualizar el funcionamiento del sensor acelerometro.

Files at this revision

API Documentation at this revision

Comitter:
waltergss
Date:
Tue Jun 25 21:27:04 2019 +0000
Parent:
6:3c77a20acb12
Commit message:
Agregue calibracion de acelerometro y correccion de interrupciones en los menus

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 3c77a20acb12 -r f49ea76f3ac1 main.cpp
--- a/main.cpp	Sun Jun 23 17:05:49 2019 +0000
+++ b/main.cpp	Tue Jun 25 21:27:04 2019 +0000
@@ -22,19 +22,20 @@
 //creo un puntero para el archivo
 FILE *fp;
 
- int cont=0;//contador de los puntos
+int cont=0;//contador de los puntos
+float Ax=0.01f;
 
 void menu();
 void boton2();
 void boton3();
 void opcion3();
 void opcion1(); 
+void calima();
+void calime();
 
 // main() runs in its own thread in the OS
 int main()
 {    
-   sw2.rise(&boton2);//asigno a la interrupcion que produce el sw2 al soltarse la funcion boton2
-   sw3.rise(&boton3);//asigno a la interrupcion que produce el sw3 al soltarse la funcion boton3
     led1=1;//apago el led rojo
     menu();//llamo al menu
 
@@ -49,6 +50,8 @@
         pc.printf("2-mostrar puntuacion anterior \n \r");
         pc.printf("3-opcion3 \n \r");
         pc.printf("q-salir \n \r");
+        led2=0;
+        led3=0;
         c=pc.getc();//leo del teclado
         switch(c){
             case '1':opcion1();//llamo al metodo principal del juego
@@ -66,6 +69,7 @@
                     break;
             case '3': opcion3();//llamo al metodo de la prueba del acelerometro
             break;
+            default:break;
         } 
     }
  }
@@ -83,6 +87,8 @@
     pc.printf("Comenzo el juego!\n \r");
     pc.printf("Para terminar presione x \n \r");
     pc.printf("----------------------- \n \r");
+    sw2.rise(&boton2);//asigno a la interrupcion que produce el sw2 al soltarse la funcion boton2
+    sw3.rise(&boton3);//asigno a la interrupcion que produce el sw3 al soltarse la funcion boton3
     //bucle principal
         while(aux){
             // Pone valor random en i (de 0 a 1) y prende el color correspondiente
@@ -93,15 +99,16 @@
                 case 1: led3=1;//si es 1 prendo el azul
                     break;
             }
-           
             //bucle para esperar la interrupcion
          while((led2.read()!=0 || led3.read()!=0) && aux){
              // espero a que aprete boton   
              if(pc.readable()){ 
                   tecla=pc.getc();  
                   if(tecla=='x'){//si lee x del teclado sale del metodo y vuelve al menu
-                  aux=false;
-                  return;  
+                      aux=false;
+                      sw2.rise(NULL);//asigno a la interrupcion que produce el sw2 al soltarse la funcion boton2
+                      sw3.rise(NULL);//asigno a la interrupcion que produce el sw3 al soltarse la funcion boton3
+                      return;  
                   }
               }   
              }
@@ -155,22 +162,39 @@
         }
 
      }
+     
+//-----------------------------------------------------------------------
+//Esto no esta en el tp
 void opcion3(){
-     float faX;//variable para el valor de x
+    float x;
+    float faX;//variable para el valor de x
+    sw2.rise(&calima);
+    sw3.rise(&calime);
     acc.enable();//activar el sensor
+    acc.getX(x);
     while (true) {
         acc.getX(faX);//funcion del sensor que devuelve la orientacion en x
-        if(faX>0.25f){//si esta inclinado a la derecha se mueve a la derecha
+        if(faX>(x+Ax)){//si esta inclinado a la derecha se mueve a la derecha
             pc.printf("| | |o| \r\n"); 
             }else{
-        if (faX<0.001f){//si esta inclinado a la izquierda se mueve a la izquierda
+        if (faX<(x-Ax)){//si esta inclinado a la izquierda se mueve a la izquierda
              pc.printf("|o| | | \r\n");
             }else//sino queda en el centro
             pc.printf("| |o| | \r\n");}
          if(pc.readable()){ 
-                  menu();
-                 return;
+            pc.getc();
+            sw2.rise(NULL);
+            sw3.rise(NULL);
+            return;
           }
     } 
      
-}   
\ No newline at end of file
+} 
+
+void calima(){
+Ax+=0.01f;    
+}  
+void calime(){
+if(Ax>0.01f)
+Ax-=0.01f;    
+}  
\ No newline at end of file