Beispiel #1
0
int main(int argc, char **argv)
{
    sys_init();
    i2c_init();
    lsm303dlhc_init();

  L:
    update_acc();
    step();
    sys_step();

    goto L;
}
Beispiel #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;
}
Beispiel #3
0
void _get_lsm303dlhc_init_handler(int argc, char **argv)
{
    (void)argc;
    (void)argv;

    uint8_t error;

    error = lsm303dlhc_init(&lsm303_dev, LSM303DLHC_I2C,
                            LSM303DLHC_INT1, LSM303DLHC_DRDY,
                            LSM303DLHC_ACC_ADDR, ACC_S_RATE, ACC_SCALE,
                            LSM303DLHC_MAG_ADDR, MAG_S_RATE, MAG_GAIN);

    if (error) {
        puts("Error initializing lsm303dlhc sensor.");
    }
    else {
        puts("Initialized lsm303dlhc sensor with default values");
    }
}
Beispiel #4
0
int main() {
	GPIO_InitTypeDef GPIO_InitDef;
	
	SystemClock_Config();
	SystemCoreClockUpdate();
	
	HAL_Init();
	
	/* driver init */
	lsm303dlhc_init();
	l3gd20_init();
	
	osKernelInitialize();
	Init_Timers();
	
	
	handlerThread_id = osThreadCreate(osThread(handlerThread), NULL);
	gyroHandlerThread_id = osThreadCreate(osThread(gyroHandlerThread), NULL);
	visioThread_id = osThreadCreate(osThread(visioThread), NULL);
	
	accelBuffer_mutex_id = osMutexCreate(osMutex(accelBuffer_mutex));
	gyroBuffer_mutex_id = osMutexCreate(osMutex(gyroBuffer_mutex));
	
	// enable clock for GPIOE
	//__HAL_RCC_GPIOE_CLK_ENABLE();

	// init GPIO pin
	GPIO_InitDef.Pin = GPIO_PIN_9;
	GPIO_InitDef.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitDef.Speed = GPIO_SPEED_FREQ_LOW;
	
	HAL_GPIO_Init(GPIOE, &GPIO_InitDef);
	
	// set LD3
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);
	
	osKernelStart();
}
Beispiel #5
0
/**@brief Application main function.
 */
int main(void)
{
  uint32_t err_code;
    bool erase_bonds = false;
    sI2Cchannel i2cChannel;
    int16_t acc[3];
    int16_t mag[3];
    // bool erase_bonds;
      uint16_t heading;

    // SEGGER_RTT_WriteString(0, "Hello World 3!\n");

    // Initialize
    app_trace_init();
    
    app_trace_log( "test trace log\r\n" );

    printf( "Hej, printf!\n" );

    timers_init();
    // buttons_leds_init(&erase_bonds);
    erl_ble_init( erase_bonds, lns_error_handler, sleep_mode_enter );
    // sim_init();

    // Start out slow, at 100 kbps. Keep it simple - blocking - to start
    nrf51822_app_i2c_init( &i2cChannel, NRF_TWI_FREQ_400K, APP_IRQ_PRIORITY_LOW, 1, 0 );

    // SEGGER_RTT_WriteString(0, "i2c initialized\n");

    lsm303dlhc_init( &i2cChannel );

    // Test tilt compensation
    acc[0] = 20000;
    acc[1] = 2;
    acc[2] = 999;

    mag[0] = -408;
    mag[1] = -297;
    mag[2] = 237;
    
    heading = lsm303dlhc_tilt_compensate( acc, mag );
    heading = ((uint32_t) heading) * 360 / UINT16_MAX;

    printf( "Test heading: %d\n", heading );

    lsm303dlhc_acc_setDataRate( ACC_RATE_1_HZ );
    lsm303dlhc_mag_setMode( LSM303DLHC_MAG_MODE_CONTINUOUS );
    
    lsm303dlhc_acc_read( acc );
    lsm303dlhc_mag_read( mag );

    printf( "Acc: %d,%d,%d\n", acc[0], acc[1], acc[2] );
    printf( "Mag: %d,%d,%d\n", mag[0], mag[1], mag[2] );

    // Start execution 
    // application_timers_start();
    
    // Move this function call to erl_bleng 
    // why is fast/slow specified here, when it is also enabled/disabled in advertising options?
    err_code = ble_advertising_start(BLE_ADV_MODE_SLOW); // changed from fast to slow
    APP_ERROR_CHECK(err_code);
#if USE_BSP
    err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING);
    APP_ERROR_CHECK(err_code);
#endif

    APPL_LOG( "main(): before loop\r\n" );
    // Enter main loop
    for (;;)
    {
      lsm303dlhc_acc_read( acc );
      lsm303dlhc_mag_read( mag );
      heading = lsm303dlhc_tilt_compensate( acc, mag );
      heading = ((uint32_t) heading) * 36000 / UINT16_MAX;
      
      printf( "Acc: %d,%d,%d\n", acc[0], acc[1], acc[2] );
      printf( "Mag: %d,%d,%d\n", mag[0], mag[1], mag[2] );
      printf( "Heading=%d\n", heading );

      m_sim_location_speed.heading = heading; // ++;

      err_code = ble_lns_loc_speed_send(&m_lns);
      if (
	  (err_code != NRF_ERROR_INVALID_STATE)
	  &&
	  (err_code != BLE_ERROR_NO_TX_BUFFERS)
	  &&
	  (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING)
	  )
      {
	APP_ERROR_CHECK(err_code);
      }

      nrf_delay_ms( 500 );

      // fflush( stdout );
      //  power_manage();
    }
}