df

Dependencies:   mbed

Fork of APP1 by Team APP

Committer:
dupm2216
Date:
Sat Jan 14 18:53:39 2017 +0000
Revision:
1:7becb0e903e3
Child:
3:1a9d0f0a50bf
Move Accelerometer to its own class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dupm2216 1:7becb0e903e3 1 #include "Accelerometer.hpp"
dupm2216 1:7becb0e903e3 2
dupm2216 1:7becb0e903e3 3 Accelerometer::Accelerometer(I2C& device, const int slave_address) :
dupm2216 1:7becb0e903e3 4 device(device),
dupm2216 1:7becb0e903e3 5 slave_address(slave_address)
dupm2216 1:7becb0e903e3 6 {
dupm2216 1:7becb0e903e3 7
dupm2216 1:7becb0e903e3 8 }
dupm2216 1:7becb0e903e3 9
dupm2216 1:7becb0e903e3 10 void Accelerometer::write_register(const char register_address, const char new_value)
dupm2216 1:7becb0e903e3 11 {
dupm2216 1:7becb0e903e3 12 const int left_shifted_slave_address = slave_address << 1;
dupm2216 1:7becb0e903e3 13 char data[2];
dupm2216 1:7becb0e903e3 14 data[0] = register_address;
dupm2216 1:7becb0e903e3 15 data[1] = new_value;
dupm2216 1:7becb0e903e3 16
dupm2216 1:7becb0e903e3 17 const int write_return = device.write(left_shifted_slave_address, data, 2);
dupm2216 1:7becb0e903e3 18 if(write_return < 0)
dupm2216 1:7becb0e903e3 19 {
dupm2216 1:7becb0e903e3 20 printf("Write error: I2C error");
dupm2216 1:7becb0e903e3 21 }
dupm2216 1:7becb0e903e3 22 }
dupm2216 1:7becb0e903e3 23
dupm2216 1:7becb0e903e3 24 char Accelerometer::read_register(const char register_address)
dupm2216 1:7becb0e903e3 25 {
dupm2216 1:7becb0e903e3 26 char result;
dupm2216 1:7becb0e903e3 27 const int left_shifted_slave_address = slave_address << 1;
dupm2216 1:7becb0e903e3 28
dupm2216 1:7becb0e903e3 29 const int write_return = device.write(left_shifted_slave_address, &register_address, 1, true);
dupm2216 1:7becb0e903e3 30 if(write_return < 0)
dupm2216 1:7becb0e903e3 31 {
dupm2216 1:7becb0e903e3 32 printf("Write error: I2C error");
dupm2216 1:7becb0e903e3 33 }
dupm2216 1:7becb0e903e3 34
dupm2216 1:7becb0e903e3 35 const int read_return = device.read(left_shifted_slave_address, &result, 1);
dupm2216 1:7becb0e903e3 36 if(read_return != 0)
dupm2216 1:7becb0e903e3 37 {
dupm2216 1:7becb0e903e3 38 printf("Read error: I2C error (nack)");
dupm2216 1:7becb0e903e3 39 }
dupm2216 1:7becb0e903e3 40
dupm2216 1:7becb0e903e3 41 return result;
dupm2216 1:7becb0e903e3 42 }
dupm2216 1:7becb0e903e3 43
dupm2216 1:7becb0e903e3 44 //axis_data must be an array of 6 bytes
dupm2216 1:7becb0e903e3 45 void Accelerometer::read_all_axis(char* axis_data)
dupm2216 1:7becb0e903e3 46 {
dupm2216 1:7becb0e903e3 47 for(int i = 0; i < NUMBER_OF_DATA_REGISTERS; ++i)
dupm2216 1:7becb0e903e3 48 {
dupm2216 1:7becb0e903e3 49 const char current_register = OUT_X_MSB_REGISTER + i;
dupm2216 1:7becb0e903e3 50 axis_data[i] = read_register(current_register);
dupm2216 1:7becb0e903e3 51 }
dupm2216 1:7becb0e903e3 52 }
dupm2216 1:7becb0e903e3 53
dupm2216 1:7becb0e903e3 54 void Accelerometer::print_all_axis_data()
dupm2216 1:7becb0e903e3 55 {
dupm2216 1:7becb0e903e3 56 char axis_data[NUMBER_OF_DATA_REGISTERS];
dupm2216 1:7becb0e903e3 57 for(int i=0; i<NUMBER_OF_DATA_REGISTERS; i++)
dupm2216 1:7becb0e903e3 58 {
dupm2216 1:7becb0e903e3 59 axis_data[i] = 0;
dupm2216 1:7becb0e903e3 60 }
dupm2216 1:7becb0e903e3 61
dupm2216 1:7becb0e903e3 62 read_all_axis(axis_data);
dupm2216 1:7becb0e903e3 63
dupm2216 1:7becb0e903e3 64 printf("Register content: ");
dupm2216 1:7becb0e903e3 65 for(int i=0; i<NUMBER_OF_DATA_REGISTERS; i++)
dupm2216 1:7becb0e903e3 66 {
dupm2216 1:7becb0e903e3 67 const int current_data = (int)(axis_data[i]);
dupm2216 1:7becb0e903e3 68 printf("%d, ", current_data);
dupm2216 1:7becb0e903e3 69 }
dupm2216 1:7becb0e903e3 70 printf("\r\n");
dupm2216 1:7becb0e903e3 71 }
dupm2216 1:7becb0e903e3 72
dupm2216 1:7becb0e903e3 73 void Accelerometer::set_standby()
dupm2216 1:7becb0e903e3 74 {
dupm2216 1:7becb0e903e3 75 const char previous_ctrl_reg1 = read_register(CTRL_REG1_REGISTER_ADDRESS);
dupm2216 1:7becb0e903e3 76 const char new_ctrl_reg1_value = previous_ctrl_reg1 & ~(0x01);
dupm2216 1:7becb0e903e3 77 write_register(CTRL_REG1_REGISTER_ADDRESS, new_ctrl_reg1_value);
dupm2216 1:7becb0e903e3 78 }
dupm2216 1:7becb0e903e3 79
dupm2216 1:7becb0e903e3 80 void Accelerometer::set_active()
dupm2216 1:7becb0e903e3 81 {
dupm2216 1:7becb0e903e3 82 const char previous_ctrl_reg1 = read_register(CTRL_REG1_REGISTER_ADDRESS);
dupm2216 1:7becb0e903e3 83 const char new_ctrl_reg1_value = previous_ctrl_reg1 | 0x01;
dupm2216 1:7becb0e903e3 84 write_register(CTRL_REG1_REGISTER_ADDRESS, new_ctrl_reg1_value);
dupm2216 1:7becb0e903e3 85 }
dupm2216 1:7becb0e903e3 86
dupm2216 1:7becb0e903e3 87 void Accelerometer::init()
dupm2216 1:7becb0e903e3 88 {
dupm2216 1:7becb0e903e3 89 set_active();
dupm2216 1:7becb0e903e3 90 }