将360度递减的自定义部分映射到从0到1的浮点数

问题描述

我正在从传感器的0360输入信息。但是我想将事物映射为340度等于0,而20度等于1

我已经尝试过使用map函数

float myInput = readData();
float  myVar = map(myInput,360,1);

但这只会使34020高。我认为它从3400再到20的事实使事情变得复杂。当我的较低点的数字大于较高点的数字时,是否可以将360度的自定义部分从0映射到1

解决方法

您可以先将输入转换为其他范围。像这样:

if(myInput > 180) {
  myInput = myInput - 360;
}

这会将340之类的值转换为-20。因此,现在您的输入范围是-2020,并且可以使用map函数:

float mappedInput = map(myInput,-20,20,1);

您还没有说输入超出该范围会发生什么情况,因此您可能不得不更加认真地考虑这些情况,但是一般的方法应该可行。