问题描述
我正在从传感器的0
到360
输入信息。但是我想将事物映射为340
度等于0
,而20
度等于1
。
我已经尝试过使用map
函数
float myInput = readData();
float myVar = map(myInput,360,1);
但这只会使340
比20
高。我认为它从340
到0
再到20
的事实使事情变得复杂。当我的较低点的数字大于较高点的数字时,是否可以将360
度的自定义部分从0
映射到1
?
解决方法
您可以先将输入转换为其他范围。像这样:
if(myInput > 180) {
myInput = myInput - 360;
}
这会将340
之类的值转换为-20
。因此,现在您的输入范围是-20
至20
,并且可以使用map
函数:
float mappedInput = map(myInput,-20,20,1);
您还没有说输入超出该范围会发生什么情况,因此您可能不得不更加认真地考虑这些情况,但是一般的方法应该可行。