Use a touchscreen display to select which sensor measurement to display

Dependencies:   mbed DisplayModule24_demo_day10

Committer:
ldelaney17
Date:
Tue Jan 17 21:28:13 2017 +0000
Revision:
8:a7b7edb66de5
Parent:
5:8a2afc6fdeb0
final commit; cleaned up debug code; added comments; set 10s ticker period

Who changed what in which revision?

UserRevisionLine numberNew 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 8:a7b7edb66de5 21 data[0] = acc_data[1] << 8 | acc_data[0]; //shift the bytes into 16bit integers
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 8:a7b7edb66de5 24 x = 0.004 * data[0]; //convert the raw data to a value in terms of g
ldelaney17 1:f2a5ea8ff543 25 y = 0.004 * data[1];
ldelaney17 1:f2a5ea8ff543 26 z = 0.004 * data[2];
ldelaney17 8:a7b7edb66de5 27 float mag = sqrt(x*x + y*y + z*z); //calculate the magnitude
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 8:a7b7edb66de5 34 //gets the average of n (default 5) readings
ldelaney17 2:1ab4c19b99d4 35 float get_avg_mag(int n){
ldelaney17 2:1ab4c19b99d4 36 if ( n <= 0)
ldelaney17 2:1ab4c19b99d4 37 return 0;
ldelaney17 2:1ab4c19b99d4 38 float counter = 0;
ldelaney17 2:1ab4c19b99d4 39 for (int i = 0; i < n; i++){
ldelaney17 2:1ab4c19b99d4 40 counter += get_acc_magnitude();
ldelaney17 2:1ab4c19b99d4 41 }
ldelaney17 2:1ab4c19b99d4 42 return counter / n;
ldelaney17 1:f2a5ea8ff543 43 }