Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何增加一个环绕整数?(0-360度角传感器环绕)_Arduino - Fatal编程技术网

Arduino 如何增加一个环绕整数?(0-360度角传感器环绕)

Arduino 如何增加一个环绕整数?(0-360度角传感器环绕),arduino,Arduino,我有一个角度传感器,读数为0-360,这是一个绝对位置传感器。该值只能读取0-360,然后从0到360开始。低于0的值将返回到360 我在17:1的传动比应用中使用了这个传感器(从传感器上看,一辆车的方向盘旋转=17~360度)。方向盘可以旋转几次以锁定 角度传感器并不总是线性读取角度(0,1,2,3…360,0),因为角度更新可以跳过基于RPM的数字(但谢天谢地,不会错过整个旋转)。所以,我无法编写基于绝对0/360交叉的递增/递减代码 我正在努力编写一些代码来处理这个环绕,因为我需要“读取”

我有一个角度传感器,读数为0-360,这是一个绝对位置传感器。该值只能读取0-360,然后从0到360开始。低于0的值将返回到360

我在17:1的传动比应用中使用了这个传感器(从传感器上看,一辆车的方向盘旋转=17~360度)。方向盘可以旋转几次以锁定

角度传感器并不总是线性读取角度(0,1,2,3…360,0),因为角度更新可以跳过基于RPM的数字(但谢天谢地,不会错过整个旋转)。所以,我无法编写基于绝对0/360交叉的递增/递减代码

我正在努力编写一些代码来处理这个环绕,因为我需要“读取”大于“360度”的角度

很多关于Arduino的概括值的研究都是指自启动溢出以来的时间。这不适用于我的申请


目标是一个变量,包含传感器总读数作为符号整数。

首先,0°和360°是相同的角度。不是0到359度吗

为什么不这样扩展过零检测:

angle += sensor

If 240<=lastsensor<=359 and 0<=sensor<=120:
    angle +=360
If 240<=sensor<=359 and 0<=lastsensor<=120:
    angle -= 360
lastsensor=sensor
角度+=传感器

如果240我也有过这个问题,但每天24小时都有

如果您的传感器总是报告每个样本之间的跳跃(远)小于180°机械差,则它将工作

diff = currentsensor - lastsensor

if Math.Abs(diff) < 180 // no wrapparound
    angle += diff;
else // wraparound (diff >= 180) // values around 180 are critical, was it a wrap around or not?
    diff = -1 * Math.Sign(diff) * (360 - Math.Abs(diff)) // so 181 ... 359 --> -179 ... -1 or -181 ... -359 --> +179 ... +1
    angle += diff;

lastsensor = currrentsensor
diff=currentsensor-lastsensor
如果Math.Abs(diff)<180//无包装
角度+=差值;
else//wrapparound(diff>=180)//180左右的值很关键,是否为环绕?
diff=-1*数学符号(diff)*(360-Math.Abs(diff))//所以181。。。359 --> -179 ... -1或-181-359 --> +179 ... +1.
角度+=差值;
lastsensor=电流传感器
PS:您很可能被否决了,因为您的问题没有显示任何代码,就像您在这里委托解决方案查找一样。
您没有编写所需的编程语言。

这是一个数学问题。了解模数算术、和Z/nZ字段,即。