1

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)
Jadefox10200
  • 466
  • 1
  • 3
  • 12

1 Answers1

1

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
icza
  • 389,944
  • 63
  • 907
  • 827