v

Dependencies:   mbed

main.cpp

Committer:
RufflesAllD
Date:
2014-02-24
Revision:
0:d9e578a8089e

File content as of revision 0:d9e578a8089e:

#include "mbed.h"
#include <string>

#define CTRL_REG1 0x2A
#define DATA_REG_W 0x3A
#define DATA_REG_R 0x3B

#define OUT_X_MSB 0x01

I2C accel(p9, p10);
DigitalIn piton(p30);

DigitalOut reset(p8);
Serial portCom(p13, p14);

int readRegister(char reg, char* data)
{
    int ack = 0;
    accel.start();
    ack = accel.write(DATA_REG_W);
    ack = accel.write(reg);
    accel.start();
    ack = accel.write(DATA_REG_R);
    data[0] = accel.read(0);
    accel.stop();
    
    return ack;
}

int readRegisters(char reg, int range, char* dest)
{
    int ack = 0;
    accel.start();
    ack = accel.write(DATA_REG_W);
    ack = accel.write(reg);
    accel.start();
    ack = accel.write(DATA_REG_R);
    for (int i = 0; i < range - 1; i++)
        dest[i] = accel.read(1);
    dest[range - 1] = accel.read(0);
    accel.stop();
    
    return ack;
}

int writeRegister(char reg, char data)
{
    int ack = 0;
    accel.start();
    ack = accel.write(DATA_REG_W);
    ack = accel.write(reg);
    ack = accel.write(data);
    accel.stop();
    
    return ack;
}

void SendTrame(string device, char data[])
{
    int length = 1;
    char size = 0x0F;
    if (device == "accel")
    {
        length = 6;
        size = 0x14;
    }
    
    char checkSum = 0x0;
    
    portCom.putc(0x7E);
    portCom.putc(0x00);
    portCom.putc(size);
    
    portCom.putc(0x10);
    portCom.putc(0x01);
    portCom.putc(0x00);
    portCom.putc(0x13);
    portCom.putc(0xA2);
    portCom.putc(0x00);
    portCom.putc(0x40);
    portCom.putc(0x0A);
    portCom.putc(0x2F);
    portCom.putc(0xB3);
    portCom.putc(0xFF);
    portCom.putc(0xFE);
    portCom.putc(0x00);
    portCom.putc(0x00);
    
    checkSum += 0x10 + 0x01 + 0x00 + 0x13 + 0xA2 + 0x00 + 0x40 + 0x0A + 0x2F + 0xB3 + 0xFF + 0xFE + 0x00 + 0x00;
    
    for (int a = 0; a < length; a++)
    {
        portCom.putc(data[a]);
        checkSum += data[a];
    }
    
    
    portCom.putc(0xFF - checkSum);
}

int main()
{
    reset = 0;
    wait(0.4);
    reset = 1;
    wait(4);
    
    // Mise de l'accéléromètre en standby
    writeRegister(CTRL_REG1, 0x10);
    
    // Set offset de l'accéléromètre
    writeRegister(0x31, 0xEE);
    
    // activate de l'accéléromètre
    char c;
    readRegister(CTRL_REG1, &c);
    writeRegister(CTRL_REG1, c | 0x01);
    
    char dataAccel[6] = {0};
    char dataContactSec[1] = {0};
    
    while(1)
    {
        int ack = readRegisters(OUT_X_MSB, 6, dataAccel);
        SendTrame("accel", dataAccel);
        
        dataContactSec[0] = piton;
        SendTrame("contactSec", dataContactSec);
        
        wait(0.2);
    }
}