在 python 上,如何将 CurrentValue 与 previousValue 进行比较并输出最大值
Posted
技术标签:
【中文标题】在 python 上,如何将 CurrentValue 与 previousValue 进行比较并输出最大值【英文标题】:On python, how do I compare CurrentValue to previousValue and output max 【发布时间】:2021-10-13 14:45:16 【问题描述】:我一直使用 Arduino IDE,但现在我使用的是 MuEditor。 我使用了 Arduino IDE,它更容易将当前值与之前的值进行比较,并在一段时间后输出最大值。来自 Arduino 的代码如下所示。
int sample1 = 0;
void loop()
int sensorValue = 0;
sensorValue = analogRead(A0);
for (int i = 0; i <= 100; i++)
if (sensorValue > sample1)
sample1 = sensorValue;
Serial.println(sample1 * (5.0 / 1023.0));
我想在 Mu Editor 上使用相同的概念,但我似乎无法正确完成它。 我想不断地将当前值与以前的值进行比较,并在一段时间后输出最大值。这就是我在 MuEditor 上提出的。非常感谢您的帮助。
import time
import board
from analogio import AnalogIn
analog_in = AnalogIn(board.A1)
Sample = 0
def get_voltage(pin):
return (pin.value * 3.3) / 65536
while True:
for x in range(1000):
if Sample < analog_in:
Sample = analog_in
print((get_voltage(Sample1),))
time.sleep(0.1)
结果:
【问题讨论】:
你得到的输出是什么?您不应该在 for 循环内的每次迭代中获取模拟读数吗?我相信你错过了...... 目前我得到的输出是从引脚 A1 连续读取的值。我想要的输出是从模拟输入读数中不断更新最大值。例如:如果模拟输入读取 3V,它会持续输出 3V,直到它看到更高的电压。然后它将连续输出更高的电压。希望这是有道理的。 【参考方案1】:对于circuitpython 的analogio.AnalogIn()
,您需要引用AnalogIn
实例的.value
属性
import analogio
with analogio.AnalogIn(board.A1) as pin_sensor:
pin_sensor.value # voltage
# pin_sensor is closed when leaving the above scope
如果您要丢弃其他值,只需在每个循环中获取 max()
...
result = 0
with analogio.AnalogIn(board.A1) as pin_sensor:
for x in range(..):
result = max(result, pin_sensor.value)
print(result)
但是,请注意,尤其是电子产品,您更可能需要更复杂的机制-
足够频繁地收集以捕获您正在采样的频率(请参阅Nyquist-Shannon theorem),理想情况下尽可能多地收集(但是,如果您有数字逻辑的集合,这可能是不可行的,或者驱动更快处理器选择等) 小心丢弃异常值(可能是瞬态/静态/接触反弹..) 指移动平均(取最后 N 个样本的平均值) 使用precise timer and interrupt 收集(这样您的采样率就不会依赖于不相关的逻辑)【讨论】:
以上是关于在 python 上,如何将 CurrentValue 与 previousValue 进行比较并输出最大值的主要内容,如果未能解决你的问题,请参考以下文章
Python - 在 Windows 上,如何将所有文件制作为 zip?
如何在 Linux 上快速将 LARGE 数据从 c++ 发送到 python?
如何在 Python 中使用 PIL 将图像合成到另一个图像上?