3

我正在写一个 arduino 草图,我的传感器给出的值在 400 到 1023 之间。我想将这些值转换为百分比,其中 400 为 0%,1023 为 100%。我一直在搞各种方程,但我的代数有点生疏了。有没有一种简单的方法可以在 C 中做到这一点?

4

5 回答 5

6
double percentage = (value - 400) / (double) (1023 - 400);

这将为您提供介于 0.0 和 1.0 之间的百分比。如果您希望它在 0 到 100 之间,请乘以 100。

于 2013-08-02T23:03:37.367 回答
2

好吧,我假设您可以自己处理代码(另外,我的 C 有点生疏),所以我将解释解决方案背后的数学:

你基本上想标准化 400 到 1023 之间的值。

这是 1023-400 = 623 个值进行标准化。我们的范围是 0...623,我们想将它映射到 0...100:

我们将减去的值(0...623 之间的数字)除以 623,得到 0...1 之间的数字(因此 0 为 0,623 为 1,300 约为 0.50),并且然后将该结果乘以 100,得到一个介于 0...100 之间的值。还有你的百分比。

于 2013-08-02T23:08:19.753 回答
1

我建议使用地图功能:map(value, fromLow, fromHigh, toLow, toHigh)

percentage = map(your_value, 400, 1023, 0, 100);
于 2013-08-04T07:39:12.963 回答
1

代数

  0%    <-> 400
  100%  <-> (1023-400)

假设你得到一个值 x = 850

百分比是:

      (850 - 400)/(1023 - 400)*100 = (100*x-40000)/623

C

double in = get_value();
double percent = (double)(100*in - 40000.0)/623;
于 2013-08-02T23:03:54.943 回答
0

arduino 实际上有一个内置函数,因为 ADC 值总是需要转换为人类形式。

在这里检查

于 2013-08-03T18:18:47.150 回答