static void app_task(void *param)
{
    int16_t a[3], m[3], t;

    printf("# Testing LSM303DLHC\n");

    printf("# Initializing LSM303DLHC...\n");
    lsm303dlhc_powerdown();

    printf("# Setting LSM303DLHC accelerometer\n");
    lsm303dlhc_acc_config(LSM303DLHC_ACC_RATE_400HZ, LSM303DLHC_ACC_SCALE_16G, LSM303DLHC_ACC_UPDATE_ON_READ);

    printf("# Setting LSM303DLHC magnetometer\n");
    lsm303dlhc_mag_config(LSM303DLHC_MAG_RATE_220HZ,
                          LSM303DLHC_MAG_SCALE_2_5GAUSS, LSM303DLHC_MAG_MODE_CONTINUOUS,
                          LSM303DLHC_TEMP_MODE_ON);

    while (1)
    {
        lsm303dlhc_read_acc(a);
        lsm303dlhc_read_mag(m);
        lsm303dlhc_read_temp(&t);

        printf("A = (%f\t%f\t%f)\n", a[0] * ACC_RES, a[1] * ACC_RES, a[2] * ACC_RES);
        printf("M = (%f\t%f\t%f)\n", m[0] * MAG_RES, m[1] * MAG_RES, m[2] * MAG_RES);
        printf("T = %f\n", t / 256.);

        vTaskDelay(configTICK_RATE_HZ / 10);
    }
}
Exemplo n.º 2
0
int main(void)
{
    lsm303dlhc_t dev;
    int16_t temp_value;
    lsm303dlhc_3d_data_t mag_value;
    lsm303dlhc_3d_data_t acc_value;

    puts("LSM303DLHC temperature test application\n");
    printf("Initializing LSM303DLHC sensor at I2C_%i... ", TEST_LSM303DLHC_I2C);

    if (lsm303dlhc_init(&dev, TEST_LSM303DLHC_I2C, TEST_LSM303DLHC_ACC_PIN, TEST_LSM303DLHC_MAG_PIN,
                        TEST_LSM303DLHC_ACC_ADDR, ACC_S_RATE, ACC_SCALE,
                        TEST_LSM303DLHC_MAG_ADDR, MAG_S_RATE, MAG_GAIN) == 0) {
        puts("[OK]\n");
    }
    else {
        puts("[Failed]");
        return 1;
    }

    while (1) {
        if (lsm303dlhc_read_acc(&dev, &acc_value) == 0) {
            printf("Accelerometer x: %i y: %i z: %i\n", acc_value.x_axis,
                                                        acc_value.y_axis,
                                                        acc_value.z_axis);
        }
        else {
            puts("\nFailed reading accelerometer values\n");
        }
        if (lsm303dlhc_read_temp(&dev, &temp_value) == 0) {
            printf("Temperature value: %i degrees\n", temp_value);
        }
        else {
            puts("\nFailed reading value\n");
        }

        if (lsm303dlhc_read_mag(&dev, &mag_value) == 0) {
            printf("Magnetometer x: %i y: %i z: %i\n", mag_value.x_axis,
                                                       mag_value.y_axis,
                                                       mag_value.z_axis);
        }
        else {
            puts("\nFailed reading magnetometer values\n");
        }

        vtimer_usleep(SLEEP);
    }

    return 0;
}
Exemplo n.º 3
0
void _get_lsm303dlhc_read_handler(int argc, char **argv)
{
    (void)argc;
    (void)argv;

    uint8_t error;
    lsm303dlhc_3d_data_t data;

    if (!lsm303_dev.acc_address || !lsm303_dev.mag_address) {
        puts("Error: please call `lsm303dlhc_init` first!");
        return;
    }

    error = lsm303dlhc_read_acc(&lsm303_dev, &data);
    if (error) {
        puts("Error reading accelerometer data from lsm303dlhc.");
        return;
    }
    else {
        printf("lsm303dlhc: Accelerometer {%i, %i, %i} mg\n", data.x_axis, data.y_axis, data.z_axis);
    }

    error = lsm303dlhc_read_mag(&lsm303_dev, &data);
    if (error) {
        puts("Error reading magnetometer data from lsm303dlhc.");
        return;
    }
    else {
        printf("lsm303dlhc: Magnetometer {%i, %i, %i}/1100 gauss\n", data.x_axis, data.y_axis, data.z_axis);
    }

    error = lsm303dlhc_read_temp(&lsm303_dev, &(data.x_axis));
    if (error) {
        puts("Error reading temperature data from lsm303dlhc.");
        return;
    }
    else {
        printf("lsm303dlhc: Temperature %i\n", data.x_axis);
    }
}
Exemplo n.º 4
0
static void handle_ev(handler_arg_t arg)
{
  int16_t a[3];
  int16_t m[3];
  int16_t i;
  float af[3], mf[3];
  float accpeak[2];
  float magpeak[2];
  static float accnorm, magnorm;
  static float accscale, magscale;
  float accnormk, magnormk;

  /* Read accelerometers */ 
  lsm303dlhc_read_acc(a);
  /* Read magnetometers */ 
  lsm303dlhc_read_mag(m);
  /* Sensors calibration during CALIB_PERIOD*/
  if (glob_counters.index <= CALIB_PERIOD) {
    /* Scale Accelero and magneto*/
    accscale = 1.0;
    magscale = 1.0;
    /* first index */
    if (glob_counters.index == 0)
      {
	accnorm = 0.0;
	magnorm = 0.0;
      }
    /* computation */
    accnormk = a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
    accnorm += sqrt(accnormk);
    magnormk = m[0] * m[0] + m[1] * m[1] + m[2] * m[2];
    magnorm += sqrt(magnormk);
    /* last index */
    if (glob_counters.index == CALIB_PERIOD) {
      accscale = CALIB_PERIOD / accnorm;
      magscale = CALIB_PERIOD / magnorm;
      printf("CALIB Acc = %f %f\n",accnorm, accscale);
      printf("CALIB Mag = %f %f\n",magnorm, magscale);
    }
    glob_counters.index++;
  } /* After calibration */
  else {
    /* Conversion */
    for (i=0; i < 3; i++) {
      af[i] = a[i] * accscale; 
      mf[i] = m[i] * magscale;
    } 
    /* Peaks detection after calibration*/ 
    peak_detect(&PEAKACC_TRACE, glob_counters.index, af, accpeak); 
    peak_detect(&PEAKMAG_TRACE, glob_counters.index, mf, magpeak);

    glob_counters.index++;
    /* Printing */
    if (accpeak[1] > 0.0) {
      printf("AccPeak;%f;0.0;0.0\n", accpeak[1]);
    }
    if (magpeak[1] > 0.0) {
      printf("MagPeak;%f;0.0;0.0\n", magpeak[1]);
    }
    printf("Acc;%f;%f;%f\n", af[0], af[1], af[2]);
    printf("Mag;%f;%f;%f\n", mf[0], mf[1], mf[2]);
    if (glob_counters.lindex == TX_PERIOD) {
      /*
      printf("Acc;%f;%f;%f\n", af[0], af[1], af[2]);
      printf("Mag;%f;%f;%f\n", mf[0], mf[1], mf[2]);
      
      printf("Acc;%f;0.0;0.0\n", accpeak[0]);
      printf("Mag;%f;0.0;0.0\n", magpeak[0]);
      */
      glob_counters.lindex=0;
    }
    else {
      glob_counters.lindex++;
    }
  }

}