Witam,
Mam mały problem z zaokrągleniem zmiennej double do dwóch miejsc po przecinku. Mianowicie korzystając z std::round
i std::floor
efekt funkcji getTemp()
jest taki jak na screenie:
Wykorzystuję funkcję roundDouble(widać ją na dole screena) w takim przypadku:
double BME280::getTemp(){
uint8_t buffer[3];
int32_t adc_T;
int32_t var1, var2;
int32_t temp;
int32_t t_fine;
HAL_I2C_Mem_Read(i2c, 0x76 << 1, 0xFA, 1, static_cast<uint8_t*>(buffer), 3, timeout);
// Change result to 12-bit value:
adc_T = static_cast<int32_t>(
(static_cast<uint32_t>(buffer[0]) << 12) |
(static_cast<uint32_t>(buffer[1]) << 4) |
(static_cast<uint32_t>(buffer[2]) >> 4));
// Calculating temperature:
var1 = static_cast<int32_t>((adc_T >> 3) - (static_cast<int32_t>(dig_T1) << 1));
var1 = (var1 * static_cast<int32_t>(dig_T2)) >> 11;
var2 = static_cast<int32_t>(((adc_T >> 4) - static_cast<int32_t>(dig_T1)) *
((adc_T >> 4) - static_cast<int32_t>(dig_T1)) >> 12);
var2 = (var2 * static_cast<int32_t>(dig_T3)) >> 14;
// Converting into celsius degrees:
t_fine = var1 + var2;
temp = (t_fine * 5 + 128) >> 8;
double temperature = temp / 100.0;
return roundDouble(temperature);
}
double BME280::roundDouble(double number){
return std::round(number * 100.0) / 100.0;
}
Czy jest ktoś w stanie mi pomóc bo chat już nie ma pomysłów hah ?
PS: Z góry sorry za błędy w kodzie programuje w c++ obiektowo od 3 miesięcy...
- screenshot-20241014123319.png (2 KB) - ściągnięć: 39