Vince et Yann / Mbed 2 deprecated APP1_customProtocole

Dependencies:   mbed

Fork of APP1_customProtocole by Yann Lemay-Sévigny

Committer:
yannolecool
Date:
Sun Jan 10 19:39:16 2016 +0000
Revision:
2:451888674389
Parent:
1:7b43594a95f3
Child:
3:b3574c385012
Communication I2C avec l'accelerometre

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yannolecool 0:544fa864099a 1 #include "mbed.h"
yannolecool 0:544fa864099a 2
yannolecool 2:451888674389 3 const int ACCELERO_WRITE_ADRESS = 0x3A;
yannolecool 2:451888674389 4 const int ACCELERO_READ_ADRESS = 0x3B;
yannolecool 2:451888674389 5
yannolecool 2:451888674389 6 const char ACCELERO_REGISTER_WHO_AM_I = 0x0D;
yannolecool 2:451888674389 7 const char ACCELERO_RESPONSE_WHO_AM_I = 0x2A;
yannolecool 1:7b43594a95f3 8
yannolecool 2:451888674389 9 const char ACCELERO_REGISTER_CTRL_REG1 = 0x2A;
yannolecool 2:451888674389 10
yannolecool 2:451888674389 11 const char ACCELERO_REGISTER_OUT_X_MSB = 0x01;
yannolecool 2:451888674389 12
yannolecool 2:451888674389 13 Serial pc(USBTX, USBRX);
yannolecool 1:7b43594a95f3 14 Serial afficheur(p13, p14);
yannolecool 2:451888674389 15 I2C accelero(p28, p27);
yannolecool 1:7b43594a95f3 16
yannolecool 1:7b43594a95f3 17 void display2decimal(int number);
yannolecool 2:451888674389 18 int getAcceleroZValue();
yannolecool 2:451888674389 19
yannolecool 2:451888674389 20 void acceleroInit(int frequency);
yannolecool 0:544fa864099a 21
yannolecool 0:544fa864099a 22 int main() {
yannolecool 2:451888674389 23
yannolecool 2:451888674389 24 acceleroInit(100000);
yannolecool 2:451888674389 25
yannolecool 2:451888674389 26 int zValue = 0;
yannolecool 0:544fa864099a 27 while(1) {
yannolecool 2:451888674389 28 zValue = getAcceleroZValue();
yannolecool 2:451888674389 29 display2decimal(zValue);
yannolecool 1:7b43594a95f3 30 wait(0.5);
yannolecool 0:544fa864099a 31 }
yannolecool 0:544fa864099a 32 }
yannolecool 1:7b43594a95f3 33
yannolecool 2:451888674389 34 void acceleroInit(int frequency)
yannolecool 2:451888674389 35 {
yannolecool 2:451888674389 36 char command[2];
yannolecool 2:451888674389 37 command[0] = 0x2B;
yannolecool 2:451888674389 38 command[1] = 0x40;
yannolecool 2:451888674389 39
yannolecool 2:451888674389 40 accelero.write(ACCELERO_WRITE_ADRESS, command, 1, false);
yannolecool 2:451888674389 41 wait(0.1);
yannolecool 2:451888674389 42
yannolecool 2:451888674389 43 char response = 0x00;
yannolecool 2:451888674389 44 accelero.frequency(frequency);
yannolecool 2:451888674389 45 accelero.write(ACCELERO_WRITE_ADRESS, &ACCELERO_REGISTER_WHO_AM_I, 1, true);
yannolecool 2:451888674389 46 accelero.read(ACCELERO_READ_ADRESS, &response, 1, false);
yannolecool 2:451888674389 47
yannolecool 2:451888674389 48 if(response == ACCELERO_RESPONSE_WHO_AM_I)
yannolecool 2:451888674389 49 {
yannolecool 2:451888674389 50 DigitalOut led4(LED4);
yannolecool 2:451888674389 51 led4 = 1;
yannolecool 2:451888674389 52 }
yannolecool 2:451888674389 53
yannolecool 2:451888674389 54 command[0] = ACCELERO_REGISTER_CTRL_REG1;
yannolecool 2:451888674389 55 command[1] = 0x01; //Put accelro in active mode
yannolecool 2:451888674389 56
yannolecool 2:451888674389 57 accelero.write(ACCELERO_WRITE_ADRESS, command, 1, false);
yannolecool 2:451888674389 58 }
yannolecool 2:451888674389 59
yannolecool 2:451888674389 60 int getAcceleroZValue()
yannolecool 2:451888674389 61 {
yannolecool 2:451888674389 62 char data[6];
yannolecool 2:451888674389 63 accelero.write(ACCELERO_WRITE_ADRESS, &ACCELERO_REGISTER_OUT_X_MSB, 1, true);
yannolecool 2:451888674389 64 accelero.read(ACCELERO_READ_ADRESS, data, 6, false);
yannolecool 2:451888674389 65
yannolecool 2:451888674389 66 int X = (data[0] << 4) + (data[1] >> 4);
yannolecool 2:451888674389 67 int Y = (data[2] << 4) + (data[3] >> 4);
yannolecool 2:451888674389 68 int Z = (data[4] << 4) + (data[5] >> 4);
yannolecool 2:451888674389 69 pc.printf("X: %i \n\r", X);
yannolecool 2:451888674389 70 pc.printf("Y: %i \n\r", Y);
yannolecool 2:451888674389 71 pc.printf("Z: %i \n\r", Z);
yannolecool 2:451888674389 72 return Z;
yannolecool 2:451888674389 73 }
yannolecool 2:451888674389 74
yannolecool 2:451888674389 75
yannolecool 1:7b43594a95f3 76 //Affiche automatique un nombre avec 2 dgits
yannolecool 1:7b43594a95f3 77 //Pour display 12.35 il faut envoyer 1235
yannolecool 1:7b43594a95f3 78 void display2decimal(int number)
yannolecool 1:7b43594a95f3 79 {
yannolecool 1:7b43594a95f3 80 int digit1 = number / 1000;
yannolecool 1:7b43594a95f3 81 int rest = number - digit1 * 1000;
yannolecool 1:7b43594a95f3 82 int digit2 = rest / 100;
yannolecool 1:7b43594a95f3 83 rest -= digit2 * 100;
yannolecool 1:7b43594a95f3 84 int digit3 = rest / 10;
yannolecool 1:7b43594a95f3 85 rest -= digit3 * 10;
yannolecool 1:7b43594a95f3 86 int digit4 = rest;
yannolecool 1:7b43594a95f3 87
yannolecool 1:7b43594a95f3 88 //Put the cursor at the first digit
yannolecool 1:7b43594a95f3 89 afficheur.putc(0x79);
yannolecool 1:7b43594a95f3 90 afficheur.putc(0x00);
yannolecool 1:7b43594a95f3 91
yannolecool 1:7b43594a95f3 92 //Write 2 first digits
yannolecool 1:7b43594a95f3 93 afficheur.putc(digit1);
yannolecool 1:7b43594a95f3 94 afficheur.putc(digit2);
yannolecool 1:7b43594a95f3 95
yannolecool 1:7b43594a95f3 96 //Add the dot after two digit
yannolecool 1:7b43594a95f3 97 afficheur.putc(0x77);
yannolecool 1:7b43594a95f3 98 afficheur.putc(0b00000010);
yannolecool 1:7b43594a95f3 99
yannolecool 1:7b43594a95f3 100 //Write the last two digits
yannolecool 1:7b43594a95f3 101 afficheur.putc(digit3);
yannolecool 1:7b43594a95f3 102 afficheur.putc(digit4);
yannolecool 1:7b43594a95f3 103 }