void ICACHE_FLASH_ATTR user_init(void) { uart_div_modify(0, UART_CLK_FREQ / BAUD); wifi_set_opmode(STATION_MODE); wifi_station_connect(); /*** I²C init ***/ i2c_master_gpio_init(); mpu9250_init(); ak8963_init(); os_delay_us(10000); i2c_scanbus(); /*** LCD Init ***/ ssd1306_init(0); ssd1306_text_small(10, 10, "Init..."); ssd1306_flip(); // ~Charge input PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); gpio_output_set(0, 0, 0, BIT13); // Button inputs buttons_init(); ak8963_calibration_start(10000, on_ak8963_calibration); os_printf("Startup\r\n"); }
void mpu9250_i2c_init(struct Mpu9250_I2c *mpu, struct i2c_periph *i2c_p, uint8_t addr) { /* set i2c_peripheral */ mpu->i2c_p = i2c_p; /* slave address */ mpu->i2c_trans.slave_addr = addr; /* set inital status: Success or Done */ mpu->i2c_trans.status = I2CTransDone; /* set default MPU9250 config options */ mpu9250_set_default_config(&(mpu->config)); mpu->data_available = false; mpu->config.initialized = false; mpu->config.init_status = MPU9250_CONF_UNINIT; /* "internal" ak8963 magnetometer */ ak8963_init(&mpu->akm, i2c_p, MPU9250_MAG_ADDR); /* mag is declared as slave to call the configure function, * regardless if it is an actual MPU slave or passthrough */ mpu->config.nb_slaves = 1; /* set callback function to configure mag */ mpu->config.slaves[0].configure = &imu_mpu9250_configure_mag_slave; /* read the mag directly for now */ mpu->config.i2c_bypass = true; mpu->slave_init_status = MPU9250_I2C_CONF_UNINIT; }
void enter_cmps_mode() { xprintf("\r\nEnter the compass mode...\r\n"); oled_cmps_mode(); ak8963_init(); ak8963_cs1_mode(); }
void sensor_init() { nrf_gpio_cfg_input(4, NRF_GPIO_PIN_PULLDOWN); nrf_gpio_cfg_input(5, NRF_GPIO_PIN_PULLDOWN); nrf_gpio_cfg_input(6, NRF_GPIO_PIN_PULLDOWN); MMA845x_Init(); bmp180_init_interface(); bmi055_init(); ak8963_init(); }
/** * Navstik IMU initializtion of the MPU-60x0 and HMC58xx */ void imu_impl_init(void) { /* MPU-60X0 */ mpu60x0_i2c_init(&imu_bebop.mpu, &(BEBOP_MPU_I2C_DEV), MPU60X0_ADDR); imu_bebop.mpu.config.smplrt_div = BEBOP_SMPLRT_DIV; imu_bebop.mpu.config.dlpf_cfg = BEBOP_LOWPASS_FILTER; imu_bebop.mpu.config.gyro_range = BEBOP_GYRO_RANGE; imu_bebop.mpu.config.accel_range = BEBOP_ACCEL_RANGE; /* AKM8963 */ ak8963_init(&imu_bebop.ak, &(BEBOP_MAG_I2C_DEV), AK8963_ADDR); }
/** * Navstik IMU initializtion of the MPU-60x0 and HMC58xx */ void imu_bebop_init(void) { /* MPU-60X0 */ mpu60x0_i2c_init(&imu_bebop.mpu, &(BEBOP_MPU_I2C_DEV), MPU60X0_ADDR); imu_bebop.mpu.config.smplrt_div = BEBOP_SMPLRT_DIV; imu_bebop.mpu.config.dlpf_cfg = BEBOP_LOWPASS_FILTER; imu_bebop.mpu.config.gyro_range = BEBOP_GYRO_RANGE; imu_bebop.mpu.config.accel_range = BEBOP_ACCEL_RANGE; /* AKM8963 */ ak8963_init(&imu_bebop.ak, &(BEBOP_MAG_I2C_DEV), AK8963_ADDR); #if BEBOP_VERSION2 //the magnetometer of the bebop2 is located on the gps board, //which is under a slight angle struct FloatEulers imu_to_mag_eulers = {0.0, RadOfDeg(8.5), 0.0}; orientationSetEulers_f(&imu_to_mag_bebop, &imu_to_mag_eulers); #endif }