Bueno, estoy usando estas vacaciones en Brasil para mejorar mis habilidades en C. He aprendido cómo usar I2C y cómo comunicarme con el MPU9255 (con la ayuda de esta pregunta). El último problema que estoy enfrentando es que el sensor está devolviendo valores incorrectos. El valor devuelto está flotando de 0 a 65000, pero no es lineal.
Creo que es porque estoy confundiendo los tipos de datos o la combinación de bytes en mi código. ¿Puede alguien ayudarme a revisar mi código?
uint8_t Test[] = "\n AccelX: \n";
HAL_UART_Transmit(&huart1,Test,sizeof(Test),100);
//SET X_HIGH REGISTER ADDRESS
i2cData = 0x3B;
HAL_I2C_Master_Transmit(&hi2c1, adressMPU, &i2cData, 1, 100);
//REQUEST 6 BYTES OF DATA (ACCEL X, Y AND Z)
HAL_I2C_Master_Receive(&hi2c1, adressMPU, receive_buffer, 6, 100);
AccelX = (char)receive_buffer[0]<<8 | (char)receive_buffer[1];
AccelY = (char)receive_buffer[2]<<8 | (char)receive_buffer[3];
AccelZ = (char)receive_buffer[4]<<8 | (char)receive_buffer[5];
//PRINTA NA SERIAL 1
len = sprintf(buffer, " %i\r\n", AccelX); //sprintf will return the length of 'buffer'
HAL_UART_Transmit(&huart1, (uint8_t *)buffer, len, 1000);
HAL_Delay(500);
Actualización:
Acabo de notar una cosa: de 0 a 16768, las mediciones del sensor son correctas, pero cuando subo el eje, el sensor pasa de 65536 a ~ 49000 cuando debería ser de 0 a -16768. Seguramente es un error de conversión, pero todavía no puedo ver dónde está exactamente el error.