watch_enable_i2c();
lis2dw_begin();
- lis2dw_set_low_power_mode(LIS2DW_LP_MODE_2); // lowest power 14-bit mode, 25 Hz is 3.5 µA @ 1.8V w/ low noise, 3µA without
- lis2dw_set_low_noise_mode(true); // consumes a little more power
- lis2dw_set_range(LIS2DW_CTRL6_VAL_RANGE_4G);
- lis2dw_set_data_rate(LIS2DW_DATA_RATE_25_HZ); // is this enough for training?
+ lis2dw_set_data_rate(LIS2DW_DATA_RATE_25_HZ);
+ lis2dw_set_range(LIS2DW_RANGE_4_G);
+ lis2dw_set_low_noise_mode(true);
+ lis2dw_enable_fifo();
lis2dw_enable_fifo();
static const char activity_types[][3] = {
"ID", // Idle
+ "OF", // Off-wrist
"SL", // Sleeping
"WH", // Washing Hands
"WA", // Walking
static void start_reading(accelerometer_data_acquisition_state_t *state) {
(void) state;
- printf("TODO: Activate I2C bus and turn on accelerometer\n");
+ watch_enable_i2c();
+ lis2dw_begin();
+ lis2dw_set_data_rate(LIS2DW_DATA_RATE_25_HZ);
+ lis2dw_set_range(LIS2DW_RANGE_4_G);
+ lis2dw_set_low_noise_mode(true);
+ lis2dw_enable_fifo();
+
printf("TODO: Write header\n");
}
state->next_available_page++;
state->pos = 0;
}
- printf("TODO: Turn off accelerometer and disable I2C bus\n");
+ lis2dw_set_data_rate(LIS2DW_DATA_RATE_POWERDOWN);
+ watch_disable_i2c();
}
}
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL2, LIS2DW_CTRL2_VAL_BOOT);
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL2, LIS2DW_CTRL2_VAL_SOFT_RESET);
- // Start at lowest possible data rate and lowest possible power mode
- watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL1, LIS2DW_CTRL1_VAL_ODR_LOWEST | LIS2DW_CTRL1_VAL_MODE_LOW_POWER | LIS2DW_CTRL1_VAL_LPMODE_1);
// Enable block data update (output registers not updated until MSB and LSB have been read) and address autoincrement
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL2, LIS2DW_CTRL2_VAL_BDU | LIS2DW_CTRL2_VAL_IF_ADD_INC);
- // Set range to ±2G
- watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL6, LIS2DW_CTRL6_VAL_RANGE_2G);
return true;
}