acd52832 LSM9DS1 example

Dependencies:   ACD_ePaper aconno_bsp mbed

Committer:
jurica238814
Date:
Thu Sep 22 11:38:40 2016 +0000
Revision:
0:940647793667
acd52832 LSM9DS1 example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jurica238814 0:940647793667 1 /* Copyright (c) 2016 Aconno. All Rights Reserved.
jurica238814 0:940647793667 2 *
jurica238814 0:940647793667 3 * Licensees are granted free, non-transferable use of the information. NO
jurica238814 0:940647793667 4 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
jurica238814 0:940647793667 5 * the file.
jurica238814 0:940647793667 6 *
jurica238814 0:940647793667 7 */
jurica238814 0:940647793667 8
jurica238814 0:940647793667 9
jurica238814 0:940647793667 10 #include "mbed.h"
jurica238814 0:940647793667 11 #include "acd52832_bsp.h"
jurica238814 0:940647793667 12 #include "LSM9DS1_regs.h"
jurica238814 0:940647793667 13 #include "LSM9DS1_defVals.h"
jurica238814 0:940647793667 14 #include "GDEP015OC1.h"
jurica238814 0:940647793667 15
jurica238814 0:940647793667 16 // #define GYRO
jurica238814 0:940647793667 17
jurica238814 0:940647793667 18 SPI spi(p3, NC, p4);
jurica238814 0:940647793667 19 GDEP015OC1 epd = GDEP015OC1(spi, p5, p6, p7, p8);
jurica238814 0:940647793667 20
jurica238814 0:940647793667 21 // Initialize I2C protocol
jurica238814 0:940647793667 22 I2C mems(PIN_EXP_SDA, PIN_EXP_SCL);
jurica238814 0:940647793667 23
jurica238814 0:940647793667 24 DigitalOut RED(PIN_LED_RED);
jurica238814 0:940647793667 25 DigitalOut GREEN(PIN_LED_GREEN);
jurica238814 0:940647793667 26 DigitalOut BLUE(PIN_LED_BLUE);
jurica238814 0:940647793667 27 DigitalOut LEDD(PIN_LED);
jurica238814 0:940647793667 28
jurica238814 0:940647793667 29
jurica238814 0:940647793667 30 void check(bool success)
jurica238814 0:940647793667 31 {
jurica238814 0:940647793667 32 if(!success) {
jurica238814 0:940647793667 33 // serial.printf("Success.\n");
jurica238814 0:940647793667 34 RED = 1;
jurica238814 0:940647793667 35 GREEN = 0;
jurica238814 0:940647793667 36 } else {
jurica238814 0:940647793667 37 // serial.printf("Unsuccess!\n");
jurica238814 0:940647793667 38 RED = 0;
jurica238814 0:940647793667 39 GREEN = 1;
jurica238814 0:940647793667 40 wait(2);
jurica238814 0:940647793667 41 }
jurica238814 0:940647793667 42 wait (0.05);
jurica238814 0:940647793667 43 RED = 1;
jurica238814 0:940647793667 44 GREEN = 1;
jurica238814 0:940647793667 45 }
jurica238814 0:940647793667 46
jurica238814 0:940647793667 47
jurica238814 0:940647793667 48
jurica238814 0:940647793667 49 void start_mag()
jurica238814 0:940647793667 50 {
jurica238814 0:940647793667 51 char data[2];
jurica238814 0:940647793667 52 bool success;
jurica238814 0:940647793667 53
jurica238814 0:940647793667 54 data[0] = (char)CTRL_REG1_M; // Target register
jurica238814 0:940647793667 55 data[1] = (char)0x7C; // Data to write
jurica238814 0:940647793667 56 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 57 check(success);
jurica238814 0:940647793667 58
jurica238814 0:940647793667 59 data[0] = (char)CTRL_REG2_M; // Target register
jurica238814 0:940647793667 60 data[1] = (char)0x60; // Data to write
jurica238814 0:940647793667 61 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 62 check(success);
jurica238814 0:940647793667 63
jurica238814 0:940647793667 64 data[0] = (char)CTRL_REG3_M; // Target register
jurica238814 0:940647793667 65 data[1] = (char)0x00; // Data to write
jurica238814 0:940647793667 66 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 67 check(success);
jurica238814 0:940647793667 68
jurica238814 0:940647793667 69 data[0] = (char)CTRL_REG4_M; // Target register
jurica238814 0:940647793667 70 data[1] = (char)0x0C; // Data to write
jurica238814 0:940647793667 71 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 72 check(success);
jurica238814 0:940647793667 73
jurica238814 0:940647793667 74 data[0] = (char)CTRL_REG5_M; // Target register
jurica238814 0:940647793667 75 data[1] = (char)0x00; // Data to write
jurica238814 0:940647793667 76 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 77 check(success);
jurica238814 0:940647793667 78 }
jurica238814 0:940647793667 79
jurica238814 0:940647793667 80 void read_mag(float *results){
jurica238814 0:940647793667 81 char results_[6];
jurica238814 0:940647793667 82 float res_final[3];
jurica238814 0:940647793667 83 char out_x_l_m = OUT_X_L_M;
jurica238814 0:940647793667 84
jurica238814 0:940647793667 85 check (mems.write(TWI_MAG_ADDR, &out_x_l_m, 1, true));
jurica238814 0:940647793667 86 check (mems.read(TWI_MAG_ADDR, results_, 6, 0));
jurica238814 0:940647793667 87 res_final[0] = ((results_[1]<<8) | results_[0]);
jurica238814 0:940647793667 88 res_final[1] = ((results_[3]<<8) | results_[2]);
jurica238814 0:940647793667 89 res_final[2] = ((results_[5]<<8) | results_[4]);
jurica238814 0:940647793667 90
jurica238814 0:940647793667 91 *(results) = res_final[0];
jurica238814 0:940647793667 92 *(results + 1) = res_final[1];
jurica238814 0:940647793667 93 *(results + 2) = res_final[2];
jurica238814 0:940647793667 94 }
jurica238814 0:940647793667 95
jurica238814 0:940647793667 96 void start_acc()
jurica238814 0:940647793667 97 {
jurica238814 0:940647793667 98 char data[2];
jurica238814 0:940647793667 99 bool success;
jurica238814 0:940647793667 100
jurica238814 0:940647793667 101 data[0] = (char)CTRL_REG5_XL; // Target register
jurica238814 0:940647793667 102 data[1] = (char)0x38; // Data to write
jurica238814 0:940647793667 103 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 104 check(success);
jurica238814 0:940647793667 105
jurica238814 0:940647793667 106 data[0] = (char)CTRL_REG6_XL; // Target register
jurica238814 0:940647793667 107 data[1] = (char)0xC7; // Data to write
jurica238814 0:940647793667 108 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 109 check(success);
jurica238814 0:940647793667 110
jurica238814 0:940647793667 111 }
jurica238814 0:940647793667 112
jurica238814 0:940647793667 113 void read_acc(float *results){
jurica238814 0:940647793667 114 char results_[6];
jurica238814 0:940647793667 115 float res_final[3];
jurica238814 0:940647793667 116 char out_x_l_xl = OUT_X_L_XL;
jurica238814 0:940647793667 117
jurica238814 0:940647793667 118 check (mems.write(TWI_MAG_ADDR, &out_x_l_xl, 1, true));
jurica238814 0:940647793667 119 check (mems.read(TWI_MAG_ADDR, results_, 6, 0));
jurica238814 0:940647793667 120 res_final[0] = ((results_[1]<<8) | results_[0]);
jurica238814 0:940647793667 121 res_final[1] = ((results_[3]<<8) | results_[2]);
jurica238814 0:940647793667 122 res_final[2] = ((results_[5]<<8) | results_[4]);
jurica238814 0:940647793667 123
jurica238814 0:940647793667 124 *(results) = res_final[0];
jurica238814 0:940647793667 125 *(results + 1) = res_final[1];
jurica238814 0:940647793667 126 *(results + 2) = res_final[2];
jurica238814 0:940647793667 127 }
jurica238814 0:940647793667 128
jurica238814 0:940647793667 129 void start_gyro(){
jurica238814 0:940647793667 130 char data[2];
jurica238814 0:940647793667 131 bool success;
jurica238814 0:940647793667 132
jurica238814 0:940647793667 133 // If GYRO is defines (gyro enabled)
jurica238814 0:940647793667 134 #ifdef GYRO
jurica238814 0:940647793667 135 data[0] = (char)CTRL_REG6_XL; // Target register
jurica238814 0:940647793667 136 data[1] = (char)0xC7 & (char)0x1F; // Data to write
jurica238814 0:940647793667 137 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 138 check(success);
jurica238814 0:940647793667 139 #endif
jurica238814 0:940647793667 140
jurica238814 0:940647793667 141 data[0] = (char)CTRL_REG1_G; // Target register
jurica238814 0:940647793667 142 data[1] = (char)0xC0; // Data to write
jurica238814 0:940647793667 143 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 144 check(success);
jurica238814 0:940647793667 145
jurica238814 0:940647793667 146 data[0] = (char)CTRL_REG2_G; // Target register
jurica238814 0:940647793667 147 data[1] = (char)0x00; // Data to write
jurica238814 0:940647793667 148 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 149 check(success);
jurica238814 0:940647793667 150
jurica238814 0:940647793667 151 data[0] = (char)CTRL_REG3_G; // Target register
jurica238814 0:940647793667 152 data[1] = (char)0x00; // Data to write
jurica238814 0:940647793667 153 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 154 check(success);
jurica238814 0:940647793667 155
jurica238814 0:940647793667 156 data[0] = (char)CTRL_REG4; // Target register
jurica238814 0:940647793667 157 data[1] = (char)0x3A; // Data to write
jurica238814 0:940647793667 158 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 159 check(success);
jurica238814 0:940647793667 160
jurica238814 0:940647793667 161 data[0] = (char)ORIENT_CFG_G; // Target register
jurica238814 0:940647793667 162 data[1] = (char)0x00; // Data to write
jurica238814 0:940647793667 163 success = mems.write(TWI_MAG_ADDR, data, 0x02,0);
jurica238814 0:940647793667 164 check(success);
jurica238814 0:940647793667 165 }
jurica238814 0:940647793667 166
jurica238814 0:940647793667 167 void read_gyro(float *results){
jurica238814 0:940647793667 168 char results_[6];
jurica238814 0:940647793667 169 float res_final[3];
jurica238814 0:940647793667 170 char out_x_l_g = OUT_X_L_G;
jurica238814 0:940647793667 171
jurica238814 0:940647793667 172 check (mems.write(TWI_MAG_ADDR, &out_x_l_g, 1, true));
jurica238814 0:940647793667 173 check (mems.read(TWI_MAG_ADDR, results_, 6, 0));
jurica238814 0:940647793667 174 res_final[0] = ((results_[1]<<8) | results_[0]);
jurica238814 0:940647793667 175 res_final[1] = ((results_[3]<<8) | results_[2]);
jurica238814 0:940647793667 176 res_final[2] = ((results_[5]<<8) | results_[4]);
jurica238814 0:940647793667 177
jurica238814 0:940647793667 178 *(results) = res_final[0];
jurica238814 0:940647793667 179 *(results + 1) = res_final[1];
jurica238814 0:940647793667 180 *(results + 2) = res_final[2];
jurica238814 0:940647793667 181 }
jurica238814 0:940647793667 182
jurica238814 0:940647793667 183
jurica238814 0:940647793667 184 int main()
jurica238814 0:940647793667 185 {
jurica238814 0:940647793667 186 float old_res = 0;
jurica238814 0:940647793667 187 float results[3];
jurica238814 0:940647793667 188 char buffer[6];
jurica238814 0:940647793667 189
jurica238814 0:940647793667 190 // Clear LEDs
jurica238814 0:940647793667 191 RED = 1;
jurica238814 0:940647793667 192 GREEN = 1;
jurica238814 0:940647793667 193
jurica238814 0:940647793667 194 // Start acceleration sensor
jurica238814 0:940647793667 195 start_acc();
jurica238814 0:940647793667 196
jurica238814 0:940647793667 197 while (1) {
jurica238814 0:940647793667 198 // Get data from mag sensor
jurica238814 0:940647793667 199 read_acc(results);
jurica238814 0:940647793667 200
jurica238814 0:940647793667 201 if (*results != old_res) {
jurica238814 0:940647793667 202 // Write new value on display
jurica238814 0:940647793667 203 epd.empty();
jurica238814 0:940647793667 204 epd.write();
jurica238814 0:940647793667 205
jurica238814 0:940647793667 206 // Write mag_x
jurica238814 0:940647793667 207 sprintf(buffer, "%+2.1f", *results); //Create a string
jurica238814 0:940647793667 208 epd.writeString(buffer,85,70,0); //Write new data to the buffer
jurica238814 0:940647793667 209 epd.write();
jurica238814 0:940647793667 210
jurica238814 0:940647793667 211 // Write mag_y
jurica238814 0:940647793667 212 sprintf(buffer, "%+2.1f", *(results+1)); //Create a string
jurica238814 0:940647793667 213 epd.writeString(buffer,85,80,0); //Write new data to the buffer
jurica238814 0:940647793667 214 epd.write();
jurica238814 0:940647793667 215
jurica238814 0:940647793667 216 // Write mag_z
jurica238814 0:940647793667 217 sprintf(buffer, "%+2.1f", *(results+2)); //Create a string
jurica238814 0:940647793667 218 epd.writeString(buffer,85,90,0); //Write new data to the buffer
jurica238814 0:940647793667 219 epd.write();
jurica238814 0:940647793667 220
jurica238814 0:940647793667 221 old_res = *results;
jurica238814 0:940647793667 222 BLUE = 0;
jurica238814 0:940647793667 223 wait (1);
jurica238814 0:940647793667 224 BLUE = 1;
jurica238814 0:940647793667 225 wait(1);
jurica238814 0:940647793667 226 }
jurica238814 0:940647793667 227 LEDD = 0;
jurica238814 0:940647793667 228 wait(1);
jurica238814 0:940647793667 229 LEDD = 1;
jurica238814 0:940647793667 230 wait(1);
jurica238814 0:940647793667 231 }
jurica238814 0:940647793667 232
jurica238814 0:940647793667 233
jurica238814 0:940647793667 234 }