コード例 #1
0
ファイル: si7021.c プロジェクト: quanghmfw/blees
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;

}
コード例 #2
0
ファイル: si7021.c プロジェクト: quanghmfw/blees
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;

}
コード例 #3
0
ファイル: main.c プロジェクト: pcbreflux/nordic
/**
 * @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);
                }
            }
コード例 #4
0
ファイル: lps331ap.c プロジェクト: quanghmfw/blees
// 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;
}
コード例 #5
0
ファイル: lps331ap.c プロジェクト: quanghmfw/blees
//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;

}
コード例 #6
0
ファイル: jshardware.c プロジェクト: cyrusmaintea/Espruino
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);
}
コード例 #7
0
ファイル: mpu6050.c プロジェクト: xueliu/nRF51822
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, &register_address, 	1, 					false);
    err_code = nrf_drv_twi_rx(twi, MPU6050_DEFAULT_ADDRESS, destination, 		number_of_bytes, 	false);
	
	return err_code;
}
コード例 #8
0
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);
}
コード例 #9
0
ファイル: i2c_api.c プロジェクト: AlessandroA/mbed
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);
}
コード例 #10
0
ファイル: si7021.c プロジェクト: quanghmfw/blees
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
    );


}
コード例 #11
0
ファイル: si7021.c プロジェクト: quanghmfw/blees
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
    );

}
コード例 #12
0
ファイル: si7021.c プロジェクト: quanghmfw/blees
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;

}
コード例 #13
0
ファイル: si7021.c プロジェクト: quanghmfw/blees
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;

}