SHIP:Data Types:Temperature

From Serious Documentation
Revision as of 15:59, 1 February 2013 by NickW-Serious (talk | contribs)
Jump to: navigation, search
Data Type Description
Temperature 16 bit fixed-point-integer in which the upper portion is in whole degrees and the lower portion is in 256ths of a degree. Set shipCelsius to true for Celsius, or false for Fahrenheit.

The Temperature datatype is returned by the pcbTemp portvar (the exact format is configured by setting tempPrecision). Generically, the value read from pcbTemp is an 8-bit value in whole degrees followed by a tempPrecision-bit value in 1/256ths of a degree. The following are examples on how to properly interpret a Temperature value:

By default tempPrecision is 0:

SIMTempWhole = GPIO.pcbTemp;  // the value is good as-is
SIMTempFrac  = 0;             // unnecessary

For handling any other value of tempPrecision:

SIMTempWhole = (GPIO.pcbTemp >> GPIO.tempPrecision);                  // once the fractional bits are gone, the value is correct
SIMTempFrac  = (GPIO.pcbTemp & (0x00FF >> (8 - GPIO.tempPrecision))); // get rid of the degree bits
SIMTempFrac  = (SIMTempFrac << (8 - GPIO.tempPrecision));             // re-adjust the fractional bits
SIMTempFrac  = (SIMTempFrac*100)/256;                                 // fix up the value to be a proper fraction (currently it is from 0/256 to 255/256 of a degree)

Note: SIMTempWhole and SIMTempFrac only need to be of type Byte to fit the highest possible values