SHIP:Data Types:Temperature

From Serious Documentation
Jump to: navigation, search

See Also

Temperature (SHIPv4 Only)

In SHIPv4 the Temperature datatype is returned by the pcbTemperature portvar with a variable format configured by setting tempPrecision. In SHIPv5, this variable is renamed pcbTemp and is a normal Float.

Data Type Description
Temperature 16 bit fixed-point-integer interpreted as an 8-bit value in whole degrees followed by a tempPrecision-bit value in 1/256ths of a degree. Set shipCelsius to true for Celsius, or false for Fahrenheit.

Examples

The following are examples on how to properly interpret a Temperature value:

If tempPrecision is 0 (default):

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

Otherwise (if your GUI does not change tempPrecision, replace with constant values):

SIMTempWhole = (GPIO.pcbTemperature >> GPIO.tempPrecision);                  // get rid of the fractional bits
SIMTempFrac  = (GPIO.pcbTemperature & (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