i2c trial - does'nt work
Dependencies: ACD_ePaper aconno_I2C aconno_bsp mbed
Fork of acd52832_LSM9DS1 by
main.cpp@0:940647793667, 2016-09-22 (annotated)
- Committer:
- jurica238814
- Date:
- Thu Sep 22 11:38:40 2016 +0000
- Revision:
- 0:940647793667
- Child:
- 1:e97c56fb9629
acd52832 LSM9DS1 example
Who changed what in which revision?
User | Revision | Line number | New 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 | } |