Use a touchscreen display to select which sensor measurement to display
Dependencies: mbed DisplayModule24_demo_day10
acc.cpp@5:8a2afc6fdeb0, 2017-01-17 (annotated)
- Committer:
- ldelaney17
- Date:
- Tue Jan 17 19:23:00 2017 +0000
- Revision:
- 5:8a2afc6fdeb0
- Parent:
- 2:1ab4c19b99d4
- Child:
- 8:a7b7edb66de5
add compass.h and compass.cpp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ldelaney17 | 1:f2a5ea8ff543 | 1 | /* |
ldelaney17 | 1:f2a5ea8ff543 | 2 | * see acc.h for description of this file |
ldelaney17 | 1:f2a5ea8ff543 | 3 | */ |
ldelaney17 | 1:f2a5ea8ff543 | 4 | #include "acc.h" |
ldelaney17 | 1:f2a5ea8ff543 | 5 | void acc_init(){ |
ldelaney17 | 1:f2a5ea8ff543 | 6 | char acc_config_dataFormat[2] = {0x31,0x0b}; //measurement range |
ldelaney17 | 1:f2a5ea8ff543 | 7 | char acc_config_powerControl[2] = {0x2d,0x08}; |
ldelaney17 | 1:f2a5ea8ff543 | 8 | connection.write(addr_acc, acc_config_dataFormat, 2); // full measurement range |
ldelaney17 | 5:8a2afc6fdeb0 | 9 | wait(.05); // busy wait tolerable during initialization |
ldelaney17 | 1:f2a5ea8ff543 | 10 | connection.write(addr_acc, acc_config_powerControl, 2); // measure mode |
ldelaney17 | 1:f2a5ea8ff543 | 11 | wait(.05); |
ldelaney17 | 1:f2a5ea8ff543 | 12 | } |
ldelaney17 | 1:f2a5ea8ff543 | 13 | |
ldelaney17 | 1:f2a5ea8ff543 | 14 | float get_acc_magnitude(){ |
ldelaney17 | 1:f2a5ea8ff543 | 15 | char data_arr[2] = {0x80|0x40|0x32}; |
ldelaney17 | 1:f2a5ea8ff543 | 16 | connection.write(addr_acc, data_arr, 1); //set up the connection for reading from data |
ldelaney17 | 1:f2a5ea8ff543 | 17 | char acc_data[6]; |
ldelaney17 | 1:f2a5ea8ff543 | 18 | connection.read(addr_acc, acc_data, 6); //read the 6 bytes of data |
ldelaney17 | 1:f2a5ea8ff543 | 19 | int16_t data[3]; |
ldelaney17 | 1:f2a5ea8ff543 | 20 | float x, y, z; |
ldelaney17 | 1:f2a5ea8ff543 | 21 | data[0] = acc_data[1] << 8 | acc_data[0]; |
ldelaney17 | 1:f2a5ea8ff543 | 22 | data[1] = acc_data[3] << 8 | acc_data[2]; |
ldelaney17 | 1:f2a5ea8ff543 | 23 | data[2] = acc_data[5] << 8 | acc_data[4]; |
ldelaney17 | 1:f2a5ea8ff543 | 24 | x = 0.004 * data[0]; |
ldelaney17 | 1:f2a5ea8ff543 | 25 | y = 0.004 * data[1]; |
ldelaney17 | 1:f2a5ea8ff543 | 26 | z = 0.004 * data[2]; |
ldelaney17 | 1:f2a5ea8ff543 | 27 | float mag = sqrt(x*x + y*y + z*z); |
ldelaney17 | 1:f2a5ea8ff543 | 28 | #ifdef DEBUG_MODE |
ldelaney17 | 1:f2a5ea8ff543 | 29 | pc.printf("x = %+1.2fg\t y = %1.2fg\t z = %1.2fg\t mag = %+1.2fg\n\r", x, y, z, mag); |
ldelaney17 | 1:f2a5ea8ff543 | 30 | #endif |
ldelaney17 | 1:f2a5ea8ff543 | 31 | return mag; |
ldelaney17 | 2:1ab4c19b99d4 | 32 | } |
ldelaney17 | 2:1ab4c19b99d4 | 33 | |
ldelaney17 | 2:1ab4c19b99d4 | 34 | float get_avg_mag(int n){ |
ldelaney17 | 2:1ab4c19b99d4 | 35 | if ( n <= 0) |
ldelaney17 | 2:1ab4c19b99d4 | 36 | return 0; |
ldelaney17 | 2:1ab4c19b99d4 | 37 | float counter = 0; |
ldelaney17 | 2:1ab4c19b99d4 | 38 | for (int i = 0; i < n; i++){ |
ldelaney17 | 2:1ab4c19b99d4 | 39 | counter += get_acc_magnitude(); |
ldelaney17 | 2:1ab4c19b99d4 | 40 | } |
ldelaney17 | 2:1ab4c19b99d4 | 41 | return counter / n; |
ldelaney17 | 1:f2a5ea8ff543 | 42 | } |