在 python 上,如何将 CurrentValue 与 previousValue 进行比较并输出最大值
On python, how do I compare CurrentValue to previousValue and output max
我一直使用 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)
结果:
对于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),理想情况下尽可能多(但是,如果您有数字逻辑的集合,这可能是不可行的,或驱动更快的处理器选择等)
- 小心丢弃异常值(可能是 transients/static/contact 弹跳..)
- 参考移动平均值(取最后 N 个样本的平均值)
- 使用 precise timer and interrupt 进行收集(这样您的采样率就不会依赖于不相关的逻辑)
我一直使用 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)
结果:
对于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),理想情况下尽可能多(但是,如果您有数字逻辑的集合,这可能是不可行的,或驱动更快的处理器选择等)
- 小心丢弃异常值(可能是 transients/static/contact 弹跳..)
- 参考移动平均值(取最后 N 个样本的平均值)
- 使用 precise timer and interrupt 进行收集(这样您的采样率就不会依赖于不相关的逻辑)