Files
dev/script/test/Averaging.py
2018-04-17 12:05:48 +02:00

48 lines
1.4 KiB
Python
Executable File

###################################################################################################
# Scan averaging sensor value, storing all values, mean and variance
###################################################################################################
class AnalogInput(ReadonlyRegisterBase):
def doRead(self):
time.sleep(0.001)
self.val = to_array(self.calc(), 'd')
return self.val
class SinusoidSample(AnalogInput):
def calc(self):
self.x = self.x + 0.1 if hasattr(self, 'x') else 0.0
noise = (random.random() - 0.5) / 10.0
return math.sin(self.x) + noise
class SinusoidTime(AnalogInput):
def calc(self):
noise = (random.random() - 0.5) / 10.0
return math.sin(time.time()) + noise
class Const(AnalogInput):
def calc(self):
return 5.0
add_device(SinusoidSample("ai1"), True)
add_device(SinusoidTime("ai2"), True)
add_device(Const("ai3"), True)
av1 = create_averager(ai3, 5, -0.1)
av2 = create_averager(ai2, 5, 0)
#ai1.setPolling(10)
#ai2.setPolling(10)
ai3.setPolling(10)
#av1.setMonitored(True)
#av2.setMonitored(True)
sleep(0.5) #Give some time for the averager to fill its buffer, before first use
#res= lscan(out, (ai1, av1, av1.samples, ai2, av2, av2.samples), 0, 40, 20, 0.1)
res= lscan(out, ( av1, av1.samples, av2, av2.samples), 0, 40, 20, 0.1)