void si7021_read_temp(float *temp){ uint8_t command[] = {Meas_Temp_No_Hold_Master}; ret_code_t ret_code; nrf_drv_twi_tx( m_instance, TEMP_HUM_ADDR_THIS, command, sizeof(command), true ); uint8_t temp_hum_data[3] = {0, 0, 0}; do { ret_code = nrf_drv_twi_rx( m_instance, TEMP_HUM_ADDR_THIS, temp_hum_data, sizeof(temp_hum_data), false ); } while (ret_code != NRF_SUCCESS); float temperature = -46.85 + (175.72 * (((uint32_t) temp_hum_data[0] << 8) | ((uint32_t) temp_hum_data[1] & 0xfc)) / (1 << 16)); *temp = temperature; }
void si7021_read_RH(float *hum){ uint8_t command[] = {Meas_RH_No_Hold_Master}; ret_code_t ret_code; nrf_drv_twi_tx( m_instance, TEMP_HUM_ADDR_THIS, command, sizeof(command), true ); uint8_t temp_hum_data[3] = {0, 0, 0}; do { ret_code = nrf_drv_twi_rx( m_instance, TEMP_HUM_ADDR_THIS, temp_hum_data, sizeof(temp_hum_data), false ); } while (ret_code != NRF_SUCCESS); float humidity = -6.0 + ((125.0 / (1 << 16)) * (((uint32_t) temp_hum_data[0] << 8) | ((uint32_t) temp_hum_data[1] & 0xf0))); *hum = humidity; }
/** * @brief TWI events handler. */ void twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context) { uint32_t err_code; uint8_t reg[2]; NRF_LOG_DEBUG("twi_handler %u\n\r",p_event->type); switch (p_event->type) { case NRF_DRV_TWI_EVT_DONE: NRF_LOG_DEBUG("twi_handler NRF_DRV_TWI_EVT_DONE %u\n\r",p_event->xfer_desc.type); if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_TX) { NRF_LOG_DEBUG("twi_handler TX\n\r"); if (twi_read_mode==SI7021_REG_HUM_READ || twi_read_mode==SI7021_REG_TEMP_READ) { err_code = nrf_drv_twi_rx(&my_twi_0, SI7021_ADDR, m_sample, sizeof(m_sample)); APP_ERROR_CHECK(err_code); } } else if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_RX) { NRF_LOG_DEBUG("twi_handler RX %d,%d\n\r",m_sample[0],m_sample[1]); if (twi_read_mode==SI7021_REG_HUM_READ) { humRaw=(uint16_t)m_sample[0] << 8 |m_sample[1]; reg[0] = SI7021_REG_TEMP_READ; twi_read_mode = reg[0]; NRF_LOG_DEBUG("nrf_drv_twi_tx %x %u\n\r",SI7021_ADDR,reg[0]); err_code = nrf_drv_twi_tx(&my_twi_0, SI7021_ADDR, reg, 1, false); APP_ERROR_CHECK(err_code); } else if (twi_read_mode==SI7021_REG_TEMP_READ) { humCent = (uint16_t)((12500 * humRaw) >> 16) - 600; tempRaw = (uint16_t)m_sample[0] << 8 |m_sample[1]; tempCent = (uint16_t)((17572 * tempRaw) >> 16) - 4685; NRF_LOG_INFO("Relative Humidity %x %d.%d%% Temp %x %d.%d°C \r",humRaw,humCent/100,humCent%100,tempRaw,tempCent/100,tempCent%100); NRF_LOG_DEBUG("\r\n"); si7021_sensor_update(humRaw,tempRaw); } }
// must only be called after lps331ap_on has been called void lps331ap_readPressure(float *pres) { uint8_t command[1] = {PRESS_OUT_XL | AUTO_INCR}; nrf_drv_twi_tx( m_instance, SENSOR_ADDR, command, sizeof(command), true ); uint8_t pressure_data[3] = {0x00, 0x00, 0x00}; nrf_drv_twi_rx( m_instance, SENSOR_ADDR, pressure_data, sizeof(pressure_data), false ); float pressure = (0x00FFFFFF & (((uint32_t)pressure_data[2] << 16) | ((uint32_t) pressure_data[1] << 8) | ((uint32_t) pressure_data[0]))) / 4096.0; *pres = pressure; }
//does not return correct temperature void lps331ap_readTemp (float *temp) { uint8_t command[1] = {TEMP_OUT_L | AUTO_INCR}; nrf_drv_twi_tx( m_instance, SENSOR_ADDR, command, sizeof(command), true ); uint8_t temp_data[2]; nrf_drv_twi_rx( m_instance, SENSOR_ADDR, temp_data, sizeof(temp_data), false ); float temperature = (((int16_t)( 0x0000FFFF & ( ( (uint32_t) temp_data[1] << 8) | ((uint32_t) temp_data[0]) ) )) / 480.0 ) + 42.5; *temp = temperature; }
void jshI2CRead(IOEventFlags device, unsigned char address, int nBytes, unsigned char *data, bool sendStop) { const nrf_drv_twi_t *twi = jshGetTWI(device); if (!twi) return; uint32_t err_code = nrf_drv_twi_rx(twi, address, data, nBytes); if (err_code != NRF_SUCCESS) jsExceptionHere(JSET_INTERNALERROR, "I2C Read Error %d\n", err_code); }
ret_code_t mpu6050_register_read(const nrf_drv_twi_t * twi, uint8_t register_address, uint8_t * destination, uint8_t number_of_bytes) { //bool transfer_succeeded; uint32_t err_code; err_code = nrf_drv_twi_tx(twi, MPU6050_DEFAULT_ADDRESS, ®ister_address, 1, false); err_code = nrf_drv_twi_rx(twi, MPU6050_DEFAULT_ADDRESS, destination, number_of_bytes, false); return err_code; }
void ready_rfid_shield(void){ nrf_drv_twi_tx(&twi_rfid, ADR_RFID_SLAVE, &rfid_init_array_1[0], sizeof(rfid_init_array_1), false); nrf_delay_ms(3); nrf_drv_twi_rx(&twi_rfid, ADR_RFID_SLAVE, &dummy_array[0], 7); nrf_delay_ms(3); nrf_drv_twi_rx(&twi_rfid, ADR_RFID_SLAVE, &dummy_array[0], 14); nrf_delay_ms(3); nrf_drv_twi_tx(&twi_rfid, ADR_RFID_SLAVE, &rfid_init_array_2[0], sizeof(rfid_init_array_2), false); nrf_delay_ms(3); nrf_drv_twi_rx(&twi_rfid, ADR_RFID_SLAVE, &dummy_array[0], 7); nrf_delay_ms(3); nrf_drv_twi_rx(&twi_rfid, ADR_RFID_SLAVE, &dummy_array[0], 9); nrf_delay_ms(3); nrf_drv_twi_tx(&twi_rfid, ADR_RFID_SLAVE, &rfid_init_array_3[0], sizeof(rfid_init_array_3), false); nrf_delay_ms(3); nrf_drv_twi_rx(&twi_rfid, ADR_RFID_SLAVE, &dummy_array[0], 7); }
int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { (void)stop; twi_info_t *twi_info = TWI_INFO(obj); nrf_drv_twi_t const *twi = &m_twi_instances[TWI_IDX(obj)]; twi_info->transfer_finished = false; ret_code_t ret_code = nrf_drv_twi_rx(twi, twi_address(address), (uint8_t *)data, length); if (ret_code != NRF_SUCCESS) { return 0; } while (!twi_info->transfer_finished) {} return nrf_drv_twi_data_count_get(twi); }
void si7021_read_user_reg(uint8_t *reg_status){ uint8_t command[] = {Read_User_Reg_1}; nrf_drv_twi_tx( m_instance, TEMP_HUM_ADDR_THIS, command, sizeof(command), true ); nrf_drv_twi_rx( m_instance, TEMP_HUM_ADDR_THIS, reg_status, sizeof(reg_status), false ); }
void si7021_read_firmware_rev(uint8_t *buf){ uint8_t command[2] = { Read_Firm_Rev_1, Read_Firm_Rev_2 }; nrf_drv_twi_tx( m_instance, TEMP_HUM_ADDR_THIS, command, sizeof(command), true ); nrf_drv_twi_rx( m_instance, TEMP_HUM_ADDR_THIS, buf, sizeof(buf), false ); }
void si7021_read_temp_after_RH(float *temp){ uint8_t command[] = {Read_Temp_From_Prev_RH}; nrf_drv_twi_tx( m_instance, TEMP_HUM_ADDR_THIS, command, sizeof(command), true ); uint8_t temp_hum_data[3] = {0, 0, 0}; nrf_drv_twi_rx( m_instance, TEMP_HUM_ADDR_THIS, temp_hum_data, sizeof(temp_hum_data), false ); float temperature = -46.85 + (175.72 * (((uint32_t) temp_hum_data[0] << 8) | ((uint32_t) temp_hum_data[1] & 0xfc)) / (1 << 16)); *temp = temperature; }
void si7021_read_temp_hold(float * temp){ uint8_t command[] = {Meas_Temp_Hold_Master}; nrf_drv_twi_tx( m_instance, TEMP_HUM_ADDR_THIS, command, sizeof(command), true ); uint8_t temp_hum_data[3] = {0x00, 0x00, 0x00}; nrf_drv_twi_rx( m_instance, TEMP_HUM_ADDR_THIS, temp_hum_data, sizeof(temp_hum_data), false ); float temperature = -46.85 + (175.72 * (((uint32_t) temp_hum_data[0] << 8) | ((uint32_t) temp_hum_data[1] & 0xfc)) / (1 << 16)); *temp = temperature; }