code du projet S5

Dependencies:   mbed-rtos mbed

Committer:
trixrabbit
Date:
Thu Mar 20 13:16:01 2014 +0000
Revision:
0:1e7ffdb6d1db
20 mars cours de projet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trixrabbit 0:1e7ffdb6d1db 1 #include "main.h"
trixrabbit 0:1e7ffdb6d1db 2
trixrabbit 0:1e7ffdb6d1db 3 DigitalOut cs(p14); // Digital output used for the ship select control.
trixrabbit 0:1e7ffdb6d1db 4 DigitalOut myled(LED1); //LED
trixrabbit 0:1e7ffdb6d1db 5 SPI spi(p11, p12, p13); // SPI port (mosi, miso, sclk)
trixrabbit 0:1e7ffdb6d1db 6 I2C i2c(p9, p10); // I2C port (sda, scl)
trixrabbit 0:1e7ffdb6d1db 7 //Serial pc(USBTX, USBRX); // PC serial communication
trixrabbit 0:1e7ffdb6d1db 8
trixrabbit 0:1e7ffdb6d1db 9 void WriteToRegister(int address, int startingRegister, int data2Write)
trixrabbit 0:1e7ffdb6d1db 10 {
trixrabbit 0:1e7ffdb6d1db 11 char data[2];
trixrabbit 0:1e7ffdb6d1db 12 data[0] = startingRegister;
trixrabbit 0:1e7ffdb6d1db 13 data[1] = data2Write;
trixrabbit 0:1e7ffdb6d1db 14
trixrabbit 0:1e7ffdb6d1db 15 i2c.write(address, data, 2);
trixrabbit 0:1e7ffdb6d1db 16 }
trixrabbit 0:1e7ffdb6d1db 17
trixrabbit 0:1e7ffdb6d1db 18 int ReadRegister(int address, int startingRegister)
trixrabbit 0:1e7ffdb6d1db 19 {
trixrabbit 0:1e7ffdb6d1db 20 char content[1];
trixrabbit 0:1e7ffdb6d1db 21 char reg[1];
trixrabbit 0:1e7ffdb6d1db 22 reg[0] = startingRegister;
trixrabbit 0:1e7ffdb6d1db 23
trixrabbit 0:1e7ffdb6d1db 24 i2c.write(address, reg, 1, true);
trixrabbit 0:1e7ffdb6d1db 25 i2c.read(address, content, 1);
trixrabbit 0:1e7ffdb6d1db 26
trixrabbit 0:1e7ffdb6d1db 27 return content[0];
trixrabbit 0:1e7ffdb6d1db 28 }
trixrabbit 0:1e7ffdb6d1db 29
trixrabbit 0:1e7ffdb6d1db 30 char i2c_read_reg(char address) //fonction qui lit les valeurs des registres
trixrabbit 0:1e7ffdb6d1db 31 {
trixrabbit 0:1e7ffdb6d1db 32 // Read from selected register adress
trixrabbit 0:1e7ffdb6d1db 33 i2c.start();
trixrabbit 0:1e7ffdb6d1db 34 i2c.write(MMA8452_WRITE_ADDRESS);
trixrabbit 0:1e7ffdb6d1db 35 i2c.write(address);
trixrabbit 0:1e7ffdb6d1db 36 i2c.start();
trixrabbit 0:1e7ffdb6d1db 37 i2c.write(MMA8452_READ_ADDRESS);
trixrabbit 0:1e7ffdb6d1db 38 char data = i2c.read(0);
trixrabbit 0:1e7ffdb6d1db 39 i2c.stop();
trixrabbit 0:1e7ffdb6d1db 40
trixrabbit 0:1e7ffdb6d1db 41 // return the data readed
trixrabbit 0:1e7ffdb6d1db 42 return data;
trixrabbit 0:1e7ffdb6d1db 43 }
trixrabbit 0:1e7ffdb6d1db 44
trixrabbit 0:1e7ffdb6d1db 45 bool initAccel() //fonction qui initialise l'accelerometre avec i2c
trixrabbit 0:1e7ffdb6d1db 46 {
trixrabbit 0:1e7ffdb6d1db 47 // Start I2C communication
trixrabbit 0:1e7ffdb6d1db 48 char data = i2c_read_reg(WHO_AM_I);
trixrabbit 0:1e7ffdb6d1db 49 if(data != 0x2A)
trixrabbit 0:1e7ffdb6d1db 50 {
trixrabbit 0:1e7ffdb6d1db 51 return false;
trixrabbit 0:1e7ffdb6d1db 52 }
trixrabbit 0:1e7ffdb6d1db 53
trixrabbit 0:1e7ffdb6d1db 54
trixrabbit 0:1e7ffdb6d1db 55
trixrabbit 0:1e7ffdb6d1db 56 // Put accelerometer in active mode at 6.25Hz
trixrabbit 0:1e7ffdb6d1db 57 WriteToRegister(MMA8452_WRITE_ADDRESS, CTRL_REG1, 0x31);
trixrabbit 0:1e7ffdb6d1db 58
trixrabbit 0:1e7ffdb6d1db 59 // Put accelerometer in standby mode at 6.25Hz
trixrabbit 0:1e7ffdb6d1db 60 WriteToRegister(MMA8452_WRITE_ADDRESS, CTRL_REG1, 0x30);
trixrabbit 0:1e7ffdb6d1db 61
trixrabbit 0:1e7ffdb6d1db 62 // Set accelerometer in 4g range
trixrabbit 0:1e7ffdb6d1db 63 WriteToRegister(MMA8452_WRITE_ADDRESS, XYZ_DATA_CFG, 0x1);
trixrabbit 0:1e7ffdb6d1db 64
trixrabbit 0:1e7ffdb6d1db 65 // Put accelerometer in active mode at 6.25Hz
trixrabbit 0:1e7ffdb6d1db 66 WriteToRegister(MMA8452_WRITE_ADDRESS, CTRL_REG1, 0x31);
trixrabbit 0:1e7ffdb6d1db 67
trixrabbit 0:1e7ffdb6d1db 68
trixrabbit 0:1e7ffdb6d1db 69
trixrabbit 0:1e7ffdb6d1db 70 return true;
trixrabbit 0:1e7ffdb6d1db 71 }
trixrabbit 0:1e7ffdb6d1db 72
trixrabbit 0:1e7ffdb6d1db 73
trixrabbit 0:1e7ffdb6d1db 74
trixrabbit 0:1e7ffdb6d1db 75 unsigned short getAccelValue(char MSB_addr) //fonction qui lit les registres de données de l'accelerometre
trixrabbit 0:1e7ffdb6d1db 76 {
trixrabbit 0:1e7ffdb6d1db 77 return i2c_read_reg(MSB_addr); // Read MSB data from MSB register
trixrabbit 0:1e7ffdb6d1db 78 }
trixrabbit 0:1e7ffdb6d1db 79
trixrabbit 0:1e7ffdb6d1db 80
trixrabbit 0:1e7ffdb6d1db 81
trixrabbit 0:1e7ffdb6d1db 82 int main()
trixrabbit 0:1e7ffdb6d1db 83 {
trixrabbit 0:1e7ffdb6d1db 84 std::vector<int> x_array;
trixrabbit 0:1e7ffdb6d1db 85 // int i = 0;
trixrabbit 0:1e7ffdb6d1db 86 Thread thread1(collector_thread);
trixrabbit 0:1e7ffdb6d1db 87
trixrabbit 0:1e7ffdb6d1db 88
trixrabbit 0:1e7ffdb6d1db 89 //appelle des fonctions d'initialisations
trixrabbit 0:1e7ffdb6d1db 90 initAccel(); //accelerometre
trixrabbit 0:1e7ffdb6d1db 91
trixrabbit 0:1e7ffdb6d1db 92
trixrabbit 0:1e7ffdb6d1db 93
trixrabbit 0:1e7ffdb6d1db 94 myled = 0;
trixrabbit 0:1e7ffdb6d1db 95
trixrabbit 0:1e7ffdb6d1db 96 while(1)
trixrabbit 0:1e7ffdb6d1db 97 {
trixrabbit 0:1e7ffdb6d1db 98 wait_ms(10);
trixrabbit 0:1e7ffdb6d1db 99
trixrabbit 0:1e7ffdb6d1db 100
trixrabbit 0:1e7ffdb6d1db 101 }
trixrabbit 0:1e7ffdb6d1db 102 }