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

Map a custom portion of 360 degress to an float from 0 to 1

我正在从我的传感器获取从 0360 的输入。但我想映射事物,因此 340 度等于 0 并且 20 度等于 1

我试过使用 map 函数

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

但这只会让 340 高于 20。我认为它从 3400 然后到 20 的事实使事情变得复杂。当我的较低点的数字高于较高点时,有没有办法将 360 度的自定义部分从 0 映射到 1

您可以先将输入转换为不同的范围。像这样:

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

这会将 340 之类的值转换为 -20。所以现在你的输入范围是 -2020 你可以使用 map 函数:

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

您没有说明如果您的输入超出该范围会发生什么,因此您可能需要更加仔细地考虑这些情况,但一般方法应该可行。