APP Team
/
projet_accel
code du projet S5
main.cpp@0:1e7ffdb6d1db, 2014-03-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |