v

Dependencies:   mbed

Committer:
RufflesAllD
Date:
Mon Feb 24 15:37:33 2014 +0000
Revision:
0:d9e578a8089e
ahahahaha

Who changed what in which revision?

UserRevisionLine numberNew 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 }