Test

Dependencies:   mbed AccelSensor

Committer:
Alegrowin
Date:
Tue Jan 15 23:40:30 2013 +0000
Revision:
4:3397631c2f65
Parent:
3:4e4e4d7f6ee1
Child:
5:e5fbf322c180
recommit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alegrowin 0:b325845b05af 1 #include "mbed.h"
Alegrowin 4:3397631c2f65 2 #include "AccelSensor.h"
Alegrowin 4:3397631c2f65 3 #include <math.h>
Alegrowin 0:b325845b05af 4
Alegrowin 4:3397631c2f65 5 const int addr = 0x9A; // define the I2C Address for TC74-A0
Alegrowin 4:3397631c2f65 6 const int Afficheur_addr = 0xE2; // define the I2C Address for 4*7seg display
Alegrowin 4:3397631c2f65 7 const int Accel_addr = 0x3A; // define the I2C Address for the Accelerometer
Alegrowin 4:3397631c2f65 8
Alegrowin 4:3397631c2f65 9 //Defines for the serial output for debug
Alegrowin 4:3397631c2f65 10 #define Output_Temperature true;
Alegrowin 4:3397631c2f65 11
Alegrowin 4:3397631c2f65 12 //Creating the desired objetcs
Alegrowin 2:3e6b509d7eca 13 I2C i2c(p9, p10); // sda, scl
Alegrowin 0:b325845b05af 14 Serial pc(USBTX, USBRX); // tx, rx
Alegrowin 4:3397631c2f65 15 //Serial Damn(p28,p27); // Used as shortcut for printing result on 7seg using printf function as it is not available in I2C
Alegrowin 4:3397631c2f65 16 //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
Alegrowin 4:3397631c2f65 17 //Mainly used to calibrate and start the device
Alegrowin 0:b325845b05af 18
Alegrowin 4:3397631c2f65 19 void init(void);
Alegrowin 0:b325845b05af 20
Alegrowin 0:b325845b05af 21 int main()
Alegrowin 0:b325845b05af 22 {
Alegrowin 0:b325845b05af 23 int temp = 0;
Alegrowin 0:b325845b05af 24 int a,b,c;
Alegrowin 4:3397631c2f65 25 char cmd[7];
Alegrowin 4:3397631c2f65 26 int result[3];
Alegrowin 4:3397631c2f65 27
Alegrowin 4:3397631c2f65 28 init();
Alegrowin 1:60bb79c9a01e 29 wait(1); //Make sure system is fully initialized
Alegrowin 4:3397631c2f65 30
Alegrowin 0:b325845b05af 31 while(1) {
Alegrowin 1:60bb79c9a01e 32 pc.printf("\r\n\nStart reading the temperature of TC74 on I2C\r\n");
Alegrowin 4:3397631c2f65 33
Alegrowin 4:3397631c2f65 34
Alegrowin 4:3397631c2f65 35 //--------------Afficheur LCD ------------------------------
Alegrowin 4:3397631c2f65 36 /*
Alegrowin 4:3397631c2f65 37 cmd[0] = 0x7b; //Segment 1
Alegrowin 4:3397631c2f65 38 cmd[1] = 0x7f;
Alegrowin 4:3397631c2f65 39
Alegrowin 4:3397631c2f65 40 i2c.write(Afficheur_addr,cmd,2);
Alegrowin 4:3397631c2f65 41
Alegrowin 4:3397631c2f65 42 wait(0.07);
Alegrowin 4:3397631c2f65 43
Alegrowin 4:3397631c2f65 44 cmd[0] = 0x7c; //Segment 2
Alegrowin 4:3397631c2f65 45 cmd[1] = 0x7f;
Alegrowin 4:3397631c2f65 46
Alegrowin 4:3397631c2f65 47 i2c.write(Afficheur_addr,cmd,2);
Alegrowin 4:3397631c2f65 48
Alegrowin 4:3397631c2f65 49 wait(0.07);
Alegrowin 4:3397631c2f65 50
Alegrowin 4:3397631c2f65 51 cmd[0] = 0x7d; //Segment 3
Alegrowin 4:3397631c2f65 52 cmd[1] = 0x7f;
Alegrowin 4:3397631c2f65 53
Alegrowin 4:3397631c2f65 54 i2c.write(Afficheur_addr,cmd,2);
Alegrowin 4:3397631c2f65 55
Alegrowin 4:3397631c2f65 56 wait(0.07);
Alegrowin 4:3397631c2f65 57
Alegrowin 4:3397631c2f65 58 cmd[0] = 0x7e; //Segment 4
Alegrowin 4:3397631c2f65 59 cmd[1] = 0x7f;
Alegrowin 4:3397631c2f65 60
Alegrowin 4:3397631c2f65 61 i2c.write(Afficheur_addr,cmd,2);*/
Alegrowin 4:3397631c2f65 62
Alegrowin 4:3397631c2f65 63 //------------------Accelerometre ---------------------------
Alegrowin 4:3397631c2f65 64 //char temporary[2];
Alegrowin 4:3397631c2f65 65
Alegrowin 4:3397631c2f65 66 /* cmd[0] = 0x2A; //Command :: CTRL reg
Alegrowin 4:3397631c2f65 67 i2c.write(Accel_addr, cmd, 1); //Issue required command to perform a write of the command
Alegrowin 4:3397631c2f65 68 i2c.read(Accel_addr, temporary,1);
Alegrowin 4:3397631c2f65 69
Alegrowin 4:3397631c2f65 70 cmd[1] = temporary[0] |1;
Alegrowin 4:3397631c2f65 71 i2c.write(Accel_addr, cmd, 2); //Issue required command to perform a write of the command
Alegrowin 4:3397631c2f65 72
Alegrowin 4:3397631c2f65 73 pc.printf("ctrl Reg1 status :: %x\r\n\n", cmd[0]);
Alegrowin 4:3397631c2f65 74
Alegrowin 4:3397631c2f65 75 */
Alegrowin 4:3397631c2f65 76
Alegrowin 4:3397631c2f65 77 cmd[0] = 0x00; //Command :: Status
Alegrowin 4:3397631c2f65 78 i2c.write(Accel_addr, cmd, 1); //Issue required command to perform a write of the command
Alegrowin 4:3397631c2f65 79 i2c.read(Accel_addr, cmd, 7); //Read the Data from the device
Alegrowin 4:3397631c2f65 80
Alegrowin 4:3397631c2f65 81 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] );
Alegrowin 4:3397631c2f65 82 //Damn.printf("v");
Alegrowin 4:3397631c2f65 83 long double anglez, anglex,angley;
Alegrowin 4:3397631c2f65 84 bool negatif;
Alegrowin 4:3397631c2f65 85 //calcul angle Z
Alegrowin 4:3397631c2f65 86 if (cmd[5]<0x7F) {
Alegrowin 4:3397631c2f65 87 anglez = acos((cmd[5]/62.0))/3.1416*180;
Alegrowin 4:3397631c2f65 88 negatif=false;
Alegrowin 4:3397631c2f65 89
Alegrowin 4:3397631c2f65 90 } else {
Alegrowin 4:3397631c2f65 91 cmd[5]=(cmd[5]-256)*-1;
Alegrowin 4:3397631c2f65 92 anglez = acos((cmd[5]/62.0))/3.1416*180;
Alegrowin 4:3397631c2f65 93
Alegrowin 4:3397631c2f65 94 }
Alegrowin 4:3397631c2f65 95
Alegrowin 4:3397631c2f65 96 //calcul angle Y
Alegrowin 4:3397631c2f65 97 if (cmd[3]<0x7F) {
Alegrowin 4:3397631c2f65 98 angley = asin((cmd[3]/62.0))/3.1416*180;
Alegrowin 4:3397631c2f65 99
Alegrowin 4:3397631c2f65 100 } else {
Alegrowin 4:3397631c2f65 101 cmd[3]=(cmd[3]-256)*-1;
Alegrowin 4:3397631c2f65 102 angley = asin((cmd[3]/62.0))/3.1416*180;
Alegrowin 4:3397631c2f65 103
Alegrowin 4:3397631c2f65 104 }
Alegrowin 4:3397631c2f65 105 // calcul angle X
Alegrowin 4:3397631c2f65 106 if (cmd[1]<0x7F) {
Alegrowin 4:3397631c2f65 107 anglex = asin((cmd[1]/62.0))/3.1416*180;
Alegrowin 4:3397631c2f65 108
Alegrowin 4:3397631c2f65 109 } else {
Alegrowin 4:3397631c2f65 110 cmd[1]=(cmd[1]-256)*-1;
Alegrowin 4:3397631c2f65 111 anglex = asin((cmd[1]/62.0))/3.1416*180;
Alegrowin 4:3397631c2f65 112
Alegrowin 4:3397631c2f65 113 }
Alegrowin 4:3397631c2f65 114
Alegrowin 4:3397631c2f65 115
Alegrowin 4:3397631c2f65 116 //if (anglez<45
Alegrowin 4:3397631c2f65 117 int b = anglez;
Alegrowin 4:3397631c2f65 118
Alegrowin 4:3397631c2f65 119 pc.printf("TEST: X=%f Y=%f Z=%f \r\n", anglex, angley, anglez );
Alegrowin 4:3397631c2f65 120 if (negatif==false)
Alegrowin 4:3397631c2f65 121 Damn.printf(" ");
Alegrowin 4:3397631c2f65 122 else
Alegrowin 4:3397631c2f65 123 Damn.printf(" -");
Alegrowin 4:3397631c2f65 124
Alegrowin 4:3397631c2f65 125 Damn.printf("%2d", b );
Alegrowin 4:3397631c2f65 126
Alegrowin 4:3397631c2f65 127
Alegrowin 4:3397631c2f65 128 //-------------------Accel status form Imported Class --------
Alegrowin 4:3397631c2f65 129 acc.readData(result);
Alegrowin 4:3397631c2f65 130 pc.printf("X: %d Y: %d Z: %d \r\n", result[0],result[1],result[2]);
Alegrowin 4:3397631c2f65 131
Alegrowin 4:3397631c2f65 132 wait(2);
Alegrowin 4:3397631c2f65 133 }
Alegrowin 4:3397631c2f65 134
Alegrowin 4:3397631c2f65 135 }
Alegrowin 4:3397631c2f65 136
Alegrowin 4:3397631c2f65 137 void init(void)
Alegrowin 4:3397631c2f65 138 {
Alegrowin 4:3397631c2f65 139 //Let's clear the I2C display
Alegrowin 4:3397631c2f65 140
Alegrowin 4:3397631c2f65 141 i2c.write(Afficheur_addr,"v",1);
Alegrowin 4:3397631c2f65 142
Alegrowin 4:3397631c2f65 143 acc.init();
Alegrowin 4:3397631c2f65 144 acc.active();
Alegrowin 4:3397631c2f65 145 }
Alegrowin 4:3397631c2f65 146
Alegrowin 4:3397631c2f65 147 char get_Temperature(void)
Alegrowin 4:3397631c2f65 148 {
Alegrowin 4:3397631c2f65 149 char cmd[1];
Alegrowin 4:3397631c2f65 150 //Méthode 1
Alegrowin 4:3397631c2f65 151 //Utilisation des fonctions bas niveau
Alegrowin 4:3397631c2f65 152 /*
Alegrowin 1:60bb79c9a01e 153 i2c.start(); // Start condition
Alegrowin 1:60bb79c9a01e 154 a = i2c.write(addr); // Write Device Address
Alegrowin 1:60bb79c9a01e 155 b = i2c.write(0x00); // Write READ command of TC74 (voir page 8 de la datasheet du TC74)
Alegrowin 1:60bb79c9a01e 156
Alegrowin 1:60bb79c9a01e 157 i2c.start(); //Reissue start condition
Alegrowin 4:3397631c2f65 158 //Au lieu de faire Stop condition et Start de nouveau
Alegrowin 4:3397631c2f65 159
Alegrowin 1:60bb79c9a01e 160 c= i2c.write(addr|1); //Adresse du Device en mode Lecture
Alegrowin 1:60bb79c9a01e 161 temp = i2c.read(0); //Lecture de la valeur du registre de température
Alegrowin 1:60bb79c9a01e 162 i2c.stop(); //Fermeture de la trame
Alegrowin 4:3397631c2f65 163 */
Alegrowin 4:3397631c2f65 164 //Méthode 2
Alegrowin 4:3397631c2f65 165 //Utilisation des fonctions haut niveau
Alegrowin 1:60bb79c9a01e 166
Alegrowin 4:3397631c2f65 167 cmd[0] = 0x0; //Command :: READ
Alegrowin 4:3397631c2f65 168 i2c.write(addr, cmd, 1); //Issue required command to perform a write of the command
Alegrowin 4:3397631c2f65 169 i2c.read(addr, cmd, 1); //Read the Data from the device
Alegrowin 4:3397631c2f65 170
Alegrowin 4:3397631c2f65 171 //-----------------Print out section ----------------------
Alegrowin 4:3397631c2f65 172 //Display device Address and informations
Alegrowin 0:b325845b05af 173
Alegrowin 4:3397631c2f65 174 // pc.printf("Device with address 0x%x with\r\n", addr);
Alegrowin 4:3397631c2f65 175
Alegrowin 4:3397631c2f65 176 //Prints out the result of Method 1
Alegrowin 4:3397631c2f65 177 //pc.printf("ACK1 :: %d\n\rACK2 :: %d\n\rACK3 :: %d\n\r", a,b,c); //ACK bits
Alegrowin 4:3397631c2f65 178 //pc.printf("Method 1 :: %d\n\r", temp);
Alegrowin 4:3397631c2f65 179
Alegrowin 4:3397631c2f65 180 //Prints out the Data from Method 2
Alegrowin 4:3397631c2f65 181 #if Output_Temperature
Alegrowin 4:3397631c2f65 182 pc.printf("Method 2 :: %d\r\n\n", cmd[0]);
Alegrowin 4:3397631c2f65 183 #endif
Alegrowin 4:3397631c2f65 184
Alegrowin 4:3397631c2f65 185 return cmd[0];
Alegrowin 0:b325845b05af 186 }