Test
Dependencies: mbed AccelSensor
main.cpp@4:3397631c2f65, 2013-01-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |