User Tools

Site Tools


en:pfw:linear-conversion

Simple linear conversion

A very simple method (no floating point, no algebraic formulas) for linear conversion of sensor output data to human-understandable units.

Example 1, temperature

Two points are given: Sensor output 400 and 1200 correspond to 10 and 36.3 degrees Celsius respectively.
To get rid of floating point, we calculate Celsius in tenths of degrees:

Sensor  Celsius
 400     100
1200     363
(800)   (263)  (Distance)

Let's take:

  SensorZ     = the given sensor value closest to zero (400)
  CelsiusZ    = the corresponding Celsius value (100)
  SensorDist  = distance between the two sensor values (800)
  CelsiusDist = distance between the two Celsius values (263)

Then the conversion looks like this:

: >CELSIUS    ( sensor -- celsius )
  SensorZ -   CelsiusDist SensorDist */   CelsiusZ + ;

The working forth definition is:

: >CELSIUS ( sensor -- celsius ) 400 - 263 800 */ 100 + ;

NEGATE must be inserted after */ when increasing sensor values correspond to decreasing Celsius values.

Example 2

Sensor  Celsius
 400     363
1200     100
(800)   (263)  (Distance)

The forth definition:

  : >CELSIUS ( sensor -- celsius ) 400 - 263 800 */ NEGATE 363 + ;

( an,jan2025)

en/pfw/linear-conversion.txt · Last modified: 2025-02-12 12:36 by albert