Test

Dependencies:   mbed AccelSensor

Revision:
4:3397631c2f65
Parent:
3:4e4e4d7f6ee1
Child:
5:e5fbf322c180
--- a/main.cpp	Tue Jan 15 05:25:08 2013 +0000
+++ b/main.cpp	Tue Jan 15 23:40:30 2013 +0000
@@ -1,86 +1,186 @@
 #include "mbed.h"
+#include "AccelSensor.h"
+#include <math.h>
 
+const int addr = 0x9A;              // define the I2C Address for TC74-A0
+const int Afficheur_addr = 0xE2;    // define the I2C Address for 4*7seg display
+const int Accel_addr = 0x3A;        // define the I2C Address for the Accelerometer
+
+//Defines for the serial output for debug
+#define Output_Temperature true;
+
+//Creating the desired objetcs
 I2C i2c(p9, p10);        // sda, scl
 Serial pc(USBTX, USBRX); // tx, rx
-Serial Damn(p28,p27);
-
+//Serial Damn(p28,p27);  // Used as shortcut for printing result on 7seg using printf function as it is not available in I2C
+//AccelSensor acc(p9,p10);  //Should be commented as it was a part of the prototype and test, we may want to use our own function
+//Mainly used to calibrate and start the device
 
-const int addr = 0x9A; // define the I2C Address for TC74-A0
-const int Afficheur_addr = 0xE2; // define the I2C Address for 4*7seg display
+void init(void);
 
 int main()
 {
     int temp = 0;
     int a,b,c;
-    char cmd[2];
-    
+    char cmd[7];
+    int result[3];
+
+    init();
     wait(1);           //Make sure system is fully initialized
-    
-    cmd[0] = 0x76; 
-    i2c.write(Afficheur_addr,cmd,1);
-        
+
     while(1) {
         pc.printf("\r\n\nStart reading the temperature of TC74 on I2C\r\n");
-        
-        //Méthode 1
-        //Utilisation des fonctions bas niveau
-        
+
+
+        //--------------Afficheur LCD ------------------------------
+        /*
+        cmd[0] = 0x7b;      //Segment 1
+        cmd[1] = 0x7f;
+
+        i2c.write(Afficheur_addr,cmd,2);
+
+        wait(0.07);
+
+        cmd[0] = 0x7c;      //Segment 2
+        cmd[1] = 0x7f;
+
+        i2c.write(Afficheur_addr,cmd,2);
+
+        wait(0.07);
+
+        cmd[0] = 0x7d;      //Segment 3
+        cmd[1] = 0x7f;
+
+        i2c.write(Afficheur_addr,cmd,2);
+
+        wait(0.07);
+
+        cmd[0] = 0x7e;      //Segment 4
+        cmd[1] = 0x7f;
+
+        i2c.write(Afficheur_addr,cmd,2);*/
+
+        //------------------Accelerometre ---------------------------
+        //char temporary[2];
+
+        /* cmd[0] = 0x2A;                     //Command :: CTRL reg
+         i2c.write(Accel_addr, cmd, 1);    //Issue required command to perform a write of the command
+         i2c.read(Accel_addr, temporary,1);
+
+         cmd[1] = temporary[0] |1;
+         i2c.write(Accel_addr, cmd, 2);    //Issue required command to perform a write of the command
+
+         pc.printf("ctrl Reg1 status :: %x\r\n\n", cmd[0]);
+
+         */
+
+        cmd[0] = 0x00;                     //Command :: Status
+        i2c.write(Accel_addr, cmd, 1);    //Issue required command to perform a write of the command
+        i2c.read(Accel_addr, cmd, 7);     //Read the Data from the device
+
+        pc.printf("Values :: %d %d %d %d %d %d %d \r\n\n", cmd[0], cmd[1], cmd[2],cmd[3],cmd[4],cmd[5],cmd[6] );
+        //Damn.printf("v");
+        long double anglez, anglex,angley;
+        bool negatif;
+        //calcul angle Z
+        if (cmd[5]<0x7F) {
+            anglez = acos((cmd[5]/62.0))/3.1416*180;
+            negatif=false;
+
+        } else {
+            cmd[5]=(cmd[5]-256)*-1;
+            anglez = acos((cmd[5]/62.0))/3.1416*180;
+
+        }
+
+        //calcul angle Y
+        if (cmd[3]<0x7F) {
+            angley = asin((cmd[3]/62.0))/3.1416*180;
+
+        } else {
+            cmd[3]=(cmd[3]-256)*-1;
+            angley = asin((cmd[3]/62.0))/3.1416*180;
+
+        }
+        // calcul angle X
+        if (cmd[1]<0x7F) {
+            anglex = asin((cmd[1]/62.0))/3.1416*180;
+
+        } else {
+            cmd[1]=(cmd[1]-256)*-1;
+            anglex = asin((cmd[1]/62.0))/3.1416*180;
+
+        }
+
+
+        //if (anglez<45
+        int b = anglez;
+
+        pc.printf("TEST: X=%f      Y=%f      Z=%f  \r\n", anglex, angley, anglez );
+        if (negatif==false)
+            Damn.printf("  ");
+        else
+            Damn.printf(" -");
+
+        Damn.printf("%2d", b );
+
+
+        //-------------------Accel status form Imported Class --------
+        acc.readData(result);
+        pc.printf("X: %d   Y: %d    Z:    %d \r\n", result[0],result[1],result[2]);
+
+        wait(2);
+    }
+
+}
+
+void init(void)
+{
+    //Let's clear the I2C display
+
+    i2c.write(Afficheur_addr,"v",1);
+
+    acc.init();
+    acc.active();
+}
+
+char get_Temperature(void)
+{
+    char cmd[1];
+    //Méthode 1
+    //Utilisation des fonctions bas niveau
+    /*
         i2c.start();            // Start condition
         a = i2c.write(addr);    // Write Device Address
         b = i2c.write(0x00);    // Write READ command of TC74 (voir page 8 de la datasheet du TC74)
 
         i2c.start();            //Reissue start condition
-                                //Au lieu de faire Stop condition et Start de nouveau
-        
+        //Au lieu de faire Stop condition et Start de nouveau
+
         c= i2c.write(addr|1);   //Adresse du Device en mode Lecture
         temp = i2c.read(0);     //Lecture de la valeur du registre de température
         i2c.stop();             //Fermeture de la trame
-        
-        //Méthode 2
-        //Utilisation des fonctions haut niveau
+    */
+    //Méthode 2
+    //Utilisation des fonctions haut niveau
 
-        cmd[0] = 0x0;               //Command :: READ
-        cmd[1] = 0x0;               //Param :: Unused in this case
-        i2c.write(addr, cmd, 1);    //Issue required command to perform a write of the command
-        i2c.read(addr, cmd, 1);     //Read the Data from the device
-        
-        //-----------------Print out section ----------------------
-        //Display device Address and informations
-        
-        pc.printf("Device with address 0x%x with\r\n", addr);
-        
-        //Prints out the result of Method 1
-        //pc.printf("ACK1 :: %d\n\rACK2 :: %d\n\rACK3 :: %d\n\r", a,b,c); //ACK bits
-        pc.printf("Method 1 :: %d\n\r", temp);
-        
-        //Prints out the Data from Method 2
-        pc.printf("Method 2 :: %d\r\n\n", cmd[0]);
+    cmd[0] = 0x0;               //Command :: READ
+    i2c.write(addr, cmd, 1);    //Issue required command to perform a write of the command
+    i2c.read(addr, cmd, 1);     //Read the Data from the device
+
+    //-----------------Print out section ----------------------
+    //Display device Address and informations
 
-        cmd[0] = 0x7b;
-        cmd[1] = 0x3E;
-    
-        i2c.write(Afficheur_addr,cmd,2);
-        
-        wait(0.07);
-        
-        cmd[0] = 0x7c;
-        cmd[1] = 0x79;
-    
-        i2c.write(Afficheur_addr,cmd,2);
-        
-        wait(0.07);
-        
-        cmd[0] = 0x7d;
-        cmd[1] = 0x77;
-    
-        i2c.write(Afficheur_addr,cmd,2);
-        
-        wait(0.07);
-        
-        cmd[0] = 0x7e;
-        cmd[1] = 0x3F;
-    
-        i2c.write(Afficheur_addr,cmd,2);
-        wait(1);
-    }
+    // pc.printf("Device with address 0x%x with\r\n", addr);
+
+    //Prints out the result of Method 1
+    //pc.printf("ACK1 :: %d\n\rACK2 :: %d\n\rACK3 :: %d\n\r", a,b,c); //ACK bits
+    //pc.printf("Method 1 :: %d\n\r", temp);
+
+    //Prints out the Data from Method 2
+#if Output_Temperature
+    pc.printf("Method 2 :: %d\r\n\n", cmd[0]);
+#endif
+
+    return cmd[0];
 }
\ No newline at end of file