Évan Laverdure
/
app4_routeur
v
main.cpp@0:d9e578a8089e, 2014-02-24 (annotated)
- Committer:
- RufflesAllD
- Date:
- Mon Feb 24 15:37:33 2014 +0000
- Revision:
- 0:d9e578a8089e
ahahahaha
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RufflesAllD | 0:d9e578a8089e | 1 | #include "mbed.h" |
RufflesAllD | 0:d9e578a8089e | 2 | #include <string> |
RufflesAllD | 0:d9e578a8089e | 3 | |
RufflesAllD | 0:d9e578a8089e | 4 | #define CTRL_REG1 0x2A |
RufflesAllD | 0:d9e578a8089e | 5 | #define DATA_REG_W 0x3A |
RufflesAllD | 0:d9e578a8089e | 6 | #define DATA_REG_R 0x3B |
RufflesAllD | 0:d9e578a8089e | 7 | |
RufflesAllD | 0:d9e578a8089e | 8 | #define OUT_X_MSB 0x01 |
RufflesAllD | 0:d9e578a8089e | 9 | |
RufflesAllD | 0:d9e578a8089e | 10 | I2C accel(p9, p10); |
RufflesAllD | 0:d9e578a8089e | 11 | DigitalIn piton(p30); |
RufflesAllD | 0:d9e578a8089e | 12 | |
RufflesAllD | 0:d9e578a8089e | 13 | DigitalOut reset(p8); |
RufflesAllD | 0:d9e578a8089e | 14 | Serial portCom(p13, p14); |
RufflesAllD | 0:d9e578a8089e | 15 | |
RufflesAllD | 0:d9e578a8089e | 16 | int readRegister(char reg, char* data) |
RufflesAllD | 0:d9e578a8089e | 17 | { |
RufflesAllD | 0:d9e578a8089e | 18 | int ack = 0; |
RufflesAllD | 0:d9e578a8089e | 19 | accel.start(); |
RufflesAllD | 0:d9e578a8089e | 20 | ack = accel.write(DATA_REG_W); |
RufflesAllD | 0:d9e578a8089e | 21 | ack = accel.write(reg); |
RufflesAllD | 0:d9e578a8089e | 22 | accel.start(); |
RufflesAllD | 0:d9e578a8089e | 23 | ack = accel.write(DATA_REG_R); |
RufflesAllD | 0:d9e578a8089e | 24 | data[0] = accel.read(0); |
RufflesAllD | 0:d9e578a8089e | 25 | accel.stop(); |
RufflesAllD | 0:d9e578a8089e | 26 | |
RufflesAllD | 0:d9e578a8089e | 27 | return ack; |
RufflesAllD | 0:d9e578a8089e | 28 | } |
RufflesAllD | 0:d9e578a8089e | 29 | |
RufflesAllD | 0:d9e578a8089e | 30 | int readRegisters(char reg, int range, char* dest) |
RufflesAllD | 0:d9e578a8089e | 31 | { |
RufflesAllD | 0:d9e578a8089e | 32 | int ack = 0; |
RufflesAllD | 0:d9e578a8089e | 33 | accel.start(); |
RufflesAllD | 0:d9e578a8089e | 34 | ack = accel.write(DATA_REG_W); |
RufflesAllD | 0:d9e578a8089e | 35 | ack = accel.write(reg); |
RufflesAllD | 0:d9e578a8089e | 36 | accel.start(); |
RufflesAllD | 0:d9e578a8089e | 37 | ack = accel.write(DATA_REG_R); |
RufflesAllD | 0:d9e578a8089e | 38 | for (int i = 0; i < range - 1; i++) |
RufflesAllD | 0:d9e578a8089e | 39 | dest[i] = accel.read(1); |
RufflesAllD | 0:d9e578a8089e | 40 | dest[range - 1] = accel.read(0); |
RufflesAllD | 0:d9e578a8089e | 41 | accel.stop(); |
RufflesAllD | 0:d9e578a8089e | 42 | |
RufflesAllD | 0:d9e578a8089e | 43 | return ack; |
RufflesAllD | 0:d9e578a8089e | 44 | } |
RufflesAllD | 0:d9e578a8089e | 45 | |
RufflesAllD | 0:d9e578a8089e | 46 | int writeRegister(char reg, char data) |
RufflesAllD | 0:d9e578a8089e | 47 | { |
RufflesAllD | 0:d9e578a8089e | 48 | int ack = 0; |
RufflesAllD | 0:d9e578a8089e | 49 | accel.start(); |
RufflesAllD | 0:d9e578a8089e | 50 | ack = accel.write(DATA_REG_W); |
RufflesAllD | 0:d9e578a8089e | 51 | ack = accel.write(reg); |
RufflesAllD | 0:d9e578a8089e | 52 | ack = accel.write(data); |
RufflesAllD | 0:d9e578a8089e | 53 | accel.stop(); |
RufflesAllD | 0:d9e578a8089e | 54 | |
RufflesAllD | 0:d9e578a8089e | 55 | return ack; |
RufflesAllD | 0:d9e578a8089e | 56 | } |
RufflesAllD | 0:d9e578a8089e | 57 | |
RufflesAllD | 0:d9e578a8089e | 58 | void SendTrame(string device, char data[]) |
RufflesAllD | 0:d9e578a8089e | 59 | { |
RufflesAllD | 0:d9e578a8089e | 60 | int length = 1; |
RufflesAllD | 0:d9e578a8089e | 61 | char size = 0x0F; |
RufflesAllD | 0:d9e578a8089e | 62 | if (device == "accel") |
RufflesAllD | 0:d9e578a8089e | 63 | { |
RufflesAllD | 0:d9e578a8089e | 64 | length = 6; |
RufflesAllD | 0:d9e578a8089e | 65 | size = 0x14; |
RufflesAllD | 0:d9e578a8089e | 66 | } |
RufflesAllD | 0:d9e578a8089e | 67 | |
RufflesAllD | 0:d9e578a8089e | 68 | char checkSum = 0x0; |
RufflesAllD | 0:d9e578a8089e | 69 | |
RufflesAllD | 0:d9e578a8089e | 70 | portCom.putc(0x7E); |
RufflesAllD | 0:d9e578a8089e | 71 | portCom.putc(0x00); |
RufflesAllD | 0:d9e578a8089e | 72 | portCom.putc(size); |
RufflesAllD | 0:d9e578a8089e | 73 | |
RufflesAllD | 0:d9e578a8089e | 74 | portCom.putc(0x10); |
RufflesAllD | 0:d9e578a8089e | 75 | portCom.putc(0x01); |
RufflesAllD | 0:d9e578a8089e | 76 | portCom.putc(0x00); |
RufflesAllD | 0:d9e578a8089e | 77 | portCom.putc(0x13); |
RufflesAllD | 0:d9e578a8089e | 78 | portCom.putc(0xA2); |
RufflesAllD | 0:d9e578a8089e | 79 | portCom.putc(0x00); |
RufflesAllD | 0:d9e578a8089e | 80 | portCom.putc(0x40); |
RufflesAllD | 0:d9e578a8089e | 81 | portCom.putc(0x0A); |
RufflesAllD | 0:d9e578a8089e | 82 | portCom.putc(0x2F); |
RufflesAllD | 0:d9e578a8089e | 83 | portCom.putc(0xB3); |
RufflesAllD | 0:d9e578a8089e | 84 | portCom.putc(0xFF); |
RufflesAllD | 0:d9e578a8089e | 85 | portCom.putc(0xFE); |
RufflesAllD | 0:d9e578a8089e | 86 | portCom.putc(0x00); |
RufflesAllD | 0:d9e578a8089e | 87 | portCom.putc(0x00); |
RufflesAllD | 0:d9e578a8089e | 88 | |
RufflesAllD | 0:d9e578a8089e | 89 | checkSum += 0x10 + 0x01 + 0x00 + 0x13 + 0xA2 + 0x00 + 0x40 + 0x0A + 0x2F + 0xB3 + 0xFF + 0xFE + 0x00 + 0x00; |
RufflesAllD | 0:d9e578a8089e | 90 | |
RufflesAllD | 0:d9e578a8089e | 91 | for (int a = 0; a < length; a++) |
RufflesAllD | 0:d9e578a8089e | 92 | { |
RufflesAllD | 0:d9e578a8089e | 93 | portCom.putc(data[a]); |
RufflesAllD | 0:d9e578a8089e | 94 | checkSum += data[a]; |
RufflesAllD | 0:d9e578a8089e | 95 | } |
RufflesAllD | 0:d9e578a8089e | 96 | |
RufflesAllD | 0:d9e578a8089e | 97 | |
RufflesAllD | 0:d9e578a8089e | 98 | portCom.putc(0xFF - checkSum); |
RufflesAllD | 0:d9e578a8089e | 99 | } |
RufflesAllD | 0:d9e578a8089e | 100 | |
RufflesAllD | 0:d9e578a8089e | 101 | int main() |
RufflesAllD | 0:d9e578a8089e | 102 | { |
RufflesAllD | 0:d9e578a8089e | 103 | reset = 0; |
RufflesAllD | 0:d9e578a8089e | 104 | wait(0.4); |
RufflesAllD | 0:d9e578a8089e | 105 | reset = 1; |
RufflesAllD | 0:d9e578a8089e | 106 | wait(4); |
RufflesAllD | 0:d9e578a8089e | 107 | |
RufflesAllD | 0:d9e578a8089e | 108 | // Mise de l'accéléromètre en standby |
RufflesAllD | 0:d9e578a8089e | 109 | writeRegister(CTRL_REG1, 0x10); |
RufflesAllD | 0:d9e578a8089e | 110 | |
RufflesAllD | 0:d9e578a8089e | 111 | // Set offset de l'accéléromètre |
RufflesAllD | 0:d9e578a8089e | 112 | writeRegister(0x31, 0xEE); |
RufflesAllD | 0:d9e578a8089e | 113 | |
RufflesAllD | 0:d9e578a8089e | 114 | // activate de l'accéléromètre |
RufflesAllD | 0:d9e578a8089e | 115 | char c; |
RufflesAllD | 0:d9e578a8089e | 116 | readRegister(CTRL_REG1, &c); |
RufflesAllD | 0:d9e578a8089e | 117 | writeRegister(CTRL_REG1, c | 0x01); |
RufflesAllD | 0:d9e578a8089e | 118 | |
RufflesAllD | 0:d9e578a8089e | 119 | char dataAccel[6] = {0}; |
RufflesAllD | 0:d9e578a8089e | 120 | char dataContactSec[1] = {0}; |
RufflesAllD | 0:d9e578a8089e | 121 | |
RufflesAllD | 0:d9e578a8089e | 122 | while(1) |
RufflesAllD | 0:d9e578a8089e | 123 | { |
RufflesAllD | 0:d9e578a8089e | 124 | int ack = readRegisters(OUT_X_MSB, 6, dataAccel); |
RufflesAllD | 0:d9e578a8089e | 125 | SendTrame("accel", dataAccel); |
RufflesAllD | 0:d9e578a8089e | 126 | |
RufflesAllD | 0:d9e578a8089e | 127 | dataContactSec[0] = piton; |
RufflesAllD | 0:d9e578a8089e | 128 | SendTrame("contactSec", dataContactSec); |
RufflesAllD | 0:d9e578a8089e | 129 | |
RufflesAllD | 0:d9e578a8089e | 130 | wait(0.2); |
RufflesAllD | 0:d9e578a8089e | 131 | } |
RufflesAllD | 0:d9e578a8089e | 132 | } |