Thanks Parrot for making these awesome products and releasing all this development info.
I’m playing around with using BLE to retrieve information from the flower power. It took me a while to figure out how to get from the raw 16 bit little endian air temperature value (as described in the flower power technical documentation) to a human readable temperature value in degrees Celsius.
Turns out this formula is used:
var temperature = 0.00000003044 * Math.pow(rawValue, 3.0) - 0.00008038 * Math.pow(rawValue, 2.0) + rawValue * 0.1149 - 30.449999999999999;
Where does this formula come from? Is this a common way to convert temperatures from 16 bit unsigned integers? I googled around for this but I couldn’t quite find out how or why one gets to this kind of conversion.
PS: It’s worth mentioning this question pertains to the < 1.1.0 firmware “Air temperature” field, not the >= 1.1.0 “Calibrated air temperature” field, which is a 32 bit float and didn’t need any conversion mentioned above.
PPS: Further investigation leads me to believe that this formula applies a “scale factor” ( https://en.wikipedia.org/wiki/Scale_factor_(computer_science) ). I’m now wondering where this particular scaling formula, used by the flower power firmware, comes from.