Search code examples
goarduinomicrocontrollertinygo

How to map two value ranges in tinygo


I'm using Golang to program a arduino uno with tinygo. I am trying to map two value ranges.
One is an encoder with a range between 0-1000 and the other is tinygo's ADC range between 0-65535. I am reading the ADC range and need to covert it to the range of 0-1000 (encoder).

I have tried several things but the basic issue that I'm running into is data types. The below formula for example equals 0:

var encoderValue uint16 = 35000
float := float64(1000/65535) * float(encoderValue)

Solution

  • 1000/65535 is an integer division and will result in 0. It doesn't matter if you convert the result to float64, then it'll be 0.0.

    Use floating point constant(s):

    var encoderValue uint16 = 35000
    x := float64(1000.0/65535) * float64(encoderValue)
    fmt.Println(x)
    

    This will output (try it on the Go Playground):

    534.0657663843748