acd52832 LSM9DS1 example

Dependencies:   ACD_ePaper aconno_bsp mbed

main.cpp

Committer:
jurica238814
Date:
2016-09-22
Revision:
0:940647793667

File content as of revision 0:940647793667:

/* Copyright (c) 2016 Aconno. All Rights Reserved.
 *
 * Licensees are granted free, non-transferable use of the information. NO
 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
 * the file.
 *
 */


#include "mbed.h"
#include "acd52832_bsp.h"
#include "LSM9DS1_regs.h"
#include "LSM9DS1_defVals.h"
#include "GDEP015OC1.h"

// #define GYRO

SPI spi(p3, NC, p4);
GDEP015OC1 epd = GDEP015OC1(spi, p5, p6, p7, p8);

// Initialize I2C protocol
I2C mems(PIN_EXP_SDA, PIN_EXP_SCL);

DigitalOut RED(PIN_LED_RED);
DigitalOut GREEN(PIN_LED_GREEN);
DigitalOut BLUE(PIN_LED_BLUE);
DigitalOut LEDD(PIN_LED);


void check(bool success)
{
    if(!success) {
        // serial.printf("Success.\n");
        RED = 1;
        GREEN = 0;
    } else {
        // serial.printf("Unsuccess!\n");
        RED = 0;
        GREEN = 1;
        wait(2);
    }
    wait (0.05);
    RED = 1;
    GREEN = 1;
}



void start_mag()
{
    char data[2];
    bool success;

    data[0] = (char)CTRL_REG1_M;          // Target register
    data[1] = (char)0x7C;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);

    data[0] = (char)CTRL_REG2_M;          // Target register
    data[1] = (char)0x60;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);

    data[0] = (char)CTRL_REG3_M;          // Target register
    data[1] = (char)0x00;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);

    data[0] = (char)CTRL_REG4_M;          // Target register
    data[1] = (char)0x0C;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);

    data[0] = (char)CTRL_REG5_M;          // Target register
    data[1] = (char)0x00;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
}

void read_mag(float *results){
    char results_[6];
    float res_final[3];
    char out_x_l_m = OUT_X_L_M;
    
    check (mems.write(TWI_MAG_ADDR, &out_x_l_m, 1, true));
    check (mems.read(TWI_MAG_ADDR, results_, 6, 0));
    res_final[0] = ((results_[1]<<8) | results_[0]);
    res_final[1] = ((results_[3]<<8) | results_[2]);
    res_final[2] = ((results_[5]<<8) | results_[4]);
    
    *(results) = res_final[0];
    *(results + 1) = res_final[1];
    *(results + 2) = res_final[2];
}

void start_acc()
{
    char data[2];
    bool success;
    
    data[0] = (char)CTRL_REG5_XL;          // Target register
    data[1] = (char)0x38;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
    
    data[0] = (char)CTRL_REG6_XL;          // Target register
    data[1] = (char)0xC7;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
    
}

void read_acc(float *results){
    char results_[6];
    float res_final[3];
    char out_x_l_xl = OUT_X_L_XL;
    
    check (mems.write(TWI_MAG_ADDR, &out_x_l_xl, 1, true));
    check (mems.read(TWI_MAG_ADDR, results_, 6, 0));
    res_final[0] = ((results_[1]<<8) | results_[0]);
    res_final[1] = ((results_[3]<<8) | results_[2]);
    res_final[2] = ((results_[5]<<8) | results_[4]);
    
    *(results) = res_final[0];
    *(results + 1) = res_final[1];
    *(results + 2) = res_final[2];
}

void start_gyro(){
    char data[2];
    bool success;
    
    // If GYRO is defines (gyro enabled)
    #ifdef GYRO
        data[0] = (char)CTRL_REG6_XL;                  // Target register
        data[1] = (char)0xC7 & (char)0x1F;             // Data to write
        success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
        check(success);
    #endif
    
    data[0] = (char)CTRL_REG1_G;          // Target register
    data[1] = (char)0xC0;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
    
    data[0] = (char)CTRL_REG2_G;          // Target register
    data[1] = (char)0x00;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
    
    data[0] = (char)CTRL_REG3_G;          // Target register
    data[1] = (char)0x00;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
    
    data[0] = (char)CTRL_REG4;            // Target register
    data[1] = (char)0x3A;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
    
    data[0] = (char)ORIENT_CFG_G;          // Target register
    data[1] = (char)0x00;                 // Data to write
    success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
    check(success);
}

void read_gyro(float *results){
    char results_[6];
    float res_final[3];
    char out_x_l_g = OUT_X_L_G;
    
    check (mems.write(TWI_MAG_ADDR, &out_x_l_g, 1, true));
    check (mems.read(TWI_MAG_ADDR, results_, 6, 0));
    res_final[0] = ((results_[1]<<8) | results_[0]);
    res_final[1] = ((results_[3]<<8) | results_[2]);
    res_final[2] = ((results_[5]<<8) | results_[4]);
    
    *(results) = res_final[0];
    *(results + 1) = res_final[1];
    *(results + 2) = res_final[2];
}


int main()
{
    float old_res = 0;
    float results[3];
    char buffer[6];

    // Clear LEDs
    RED = 1;
    GREEN = 1;
    
    // Start acceleration sensor
    start_acc();

    while (1) {        
        // Get data from mag sensor
        read_acc(results);
        
        if (*results != old_res) {
            // Write new value on display
            epd.empty();
            epd.write();
            
            // Write mag_x
            sprintf(buffer, "%+2.1f", *results);    //Create a string
            epd.writeString(buffer,85,70,0);                                       //Write new data to the buffer
            epd.write();
            
            // Write mag_y
            sprintf(buffer, "%+2.1f", *(results+1));    //Create a string
            epd.writeString(buffer,85,80,0);                                       //Write new data to the buffer
            epd.write();
            
            // Write mag_z
            sprintf(buffer, "%+2.1f", *(results+2));    //Create a string
            epd.writeString(buffer,85,90,0);                                       //Write new data to the buffer
            epd.write();

            old_res = *results;
            BLUE = 0;
            wait (1);
            BLUE = 1;
            wait(1);
        }
        LEDD = 0;
        wait(1);
        LEDD = 1;
        wait(1);
    }


}