BASIC4MCU | 질문게시판 | i2c로 vl53l1x 센서를 읽고 싶은데
페이지 정보
작성자 라칸 작성일2022-11-29 14:01 조회1,022회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=21881
본문
i2c로 센서를 읽을때 아래 코드를 사용하고 있습니다
채널 0으로 하고 습도 센서 값을 가져오게하면 입김 불때 값이 올라가다가 내버려두면 내려가고 있습니다
그래서 일단 코드는 제대로 된거 같은데 vl53l1x센서는 제대로 안되고 있네요
일단 쓰기 주소는 i2c 스캔하는 코드로 해보니까 0x29로 나오고
0x29 시프트 1 해보면 0x52가 나오는거보면 맞는거 같는데 안되는거 보면
문제는 읽기 주소나 데이터 배열 크기 같습니다
vl53l1x센서에서 읽기 주소값이나 데이터 배열 크기 등을 바꾸는데 들어오지 않고 있습니다
주소나 데이터 크기가 문제 같은데 데이터 크기를 다 조정해보고 했는데 안되고 있어서요
주소가 문제인가요? 데이터 크기가 문제인가요?
혹시 해답을 알려주실수 있으신가요?
vl53l1x 데이터시트 : https://html.alldatasheet.com/html-pdf/1419071/STMICROELECTRONICS/VL53L1X/2267/1/VL53L1X.html
uint8_t VL53L1X_RX_Data[3];float VL53L1X_waterlevel;
uint16_t VL53L1X_ADC_Raw; uint8_t VL53L1X_Cmd = 0x53; #define VL53L1X_Address 0x52 void StartDefaultTask(void const * argument) {/* USER CODE BEGIN 5 */
/* Infinite loop */
uint8_t bus_addr = 0x70 << 1; uint8_t bus_addrR = 0x71; uint8_t buf[5] = {0x01, 0x00 }; uint8_t R_buffer1[5] = {0x01, 0x00 };//uint8_t curCh = 0;
uint16_t res = 0; HAL_StatusTypeDef ret; I2C_Scan();for (i2cIndex = 0; i2cIndex < 128; i2cIndex++)
{ res = HAL_I2C_IsDeviceReady(&hi2c1, i2cIndex << 1, 1, 10);if(res == HAL_OK){
char msg[64];
snprintf(msg, sizeof(msg), "0x%02X", i2cIndex); } } pca9546SetI2cHandle(&hi2c1);for(;;)
{ osDelay(1000); pca9546SetAddress(0, 0, 0);pca9546EnableCh(1); // enable 1 ch.
I2C_Scan(); ret = HAL_I2C_Master_Transmit_IT(&hi2c1, (uint16_t)bus_addr, (uint8_t*)R_buffer1, 0); HAL_I2C_Mem_Read_IT(&hi2c1, VL53L1X_Address, VL53L1X_Cmd, I2C_MEMADD_SIZE_8BIT, VL53L1X_RX_Data, 3); HAL_Delay(100); VL53L1X_ADC_Raw = ((uint16_t)(VL53L1X_RX_Data[0] << 8) | (VL53L1X_RX_Data[1])); HAL_Delay(100);memset(VL53L1X_RX_Data, 0x00, sizeof(VL53L1X_RX_Data));
}/* USER CODE END 5 */
}
댓글 0
조회수 1,022등록된 댓글이 없습니다.