Browse Source

i2c: load and interprete temperature of seesaw

master
Andreas Berthoud 5 years ago
parent
commit
841a9e36b1
  1. 49
      nucleo-wb55-i2c/Core/Src/main.c

49
nucleo-wb55-i2c/Core/Src/main.c

@ -59,7 +59,21 @@ static void MX_I2C1_Init(void);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
HAL_StatusTypeDef i2c_write(uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) {
//printf("I2C WRITE | address=0x%04x | size=0x%04x\n", DevAddress, Size);
return HAL_I2C_Master_Transmit(&hi2c1, DevAddress, pData, Size, Timeout);
}
HAL_StatusTypeDef i2c_read(uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) {
//printf("I2C READ | address=0x%04x | size=0x%04x\n", DevAddress, Size);
return HAL_I2C_Master_Receive(&hi2c1, DevAddress, pData, Size, Timeout);
}
float getTemp(uint8_t * buf) {
int32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) |
((uint32_t)buf[2] << 8) | (uint32_t)buf[3];
return (1.0 / (1UL << 16)) * ret;
}
/* USER CODE END 0 */
/**
@ -105,10 +119,43 @@ int main(void)
/* Infinite loop */
/* USER CODE BEGIN WHILE */
int index = 0;
HAL_StatusTypeDef i2c_status;
int ADAFRUIT_ADDR = 0x36 << 1;
const int BUF_LEN = 4;
uint8_t buf[BUF_LEN];
uint8_t prefix[2];
prefix[0] = 0x0;
prefix[1] = 0x4;
while (1)
{
printf("test %d\n\r", index++);
//printf("test %d\n\r", index++);
//HAL_Delay(100);
HAL_Delay(10);
i2c_status = i2c_write(ADAFRUIT_ADDR, prefix, 2, 1000);
if (i2c_status != HAL_OK) {
printf("ERROR: %d\n", (int)i2c_status);
Error_Handler();
}
HAL_Delay(100);
i2c_status = i2c_read(ADAFRUIT_ADDR, buf, BUF_LEN, 1000);
if (i2c_status != HAL_OK) {
printf("ERROR: %d\n", (int)i2c_status);
Error_Handler();
}
//printf("Buffer: ");
for (int i = 0; i < BUF_LEN; i++) {
//printf("%d ", buf[i]);
}
//printf("\n");
printf("Temperature: %2.2f degree celsius\n", getTemp(buf));
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */

Loading…
Cancel
Save