Coverage for src/main/python/sensor.py : 92%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1class Sensor:
2 """Sensor, measures an amount """
4 last_measure = -1
6 def __init__(self, range_min=0, range_max=4095, average_converging_speed=1 / 2):
7 """ constructor.
8 :param range_min: min value of sensor
9 :param range_max: max value of sensor
10 :param average_converging_speed: speed the average goes towards the last measure (range 0-1) """
11 self.range_min = range_min
12 self.range_max = range_max
13 self.average_converging_speed = average_converging_speed
14 self.average = (range_min + range_max) / 2
16 def __str__(self):
17 """Prints the object."""
18 return "Sensor: average: {}, last measure {}, percentage: {}".format(self.get_average(),
19 self.get_last_measure(),
20 self.get_percentage())
22 def raw_measure(self):
23 """returns only one raw measure"""
24 raise Exception("raw measure should be implemented")
26 def measure(self):
27 """measures 3 times, makes average of them, updates global average, returns local average."""
28 sum_raw_measures = 0
29 for _ in range(3):
30 sum_raw_measures += self.raw_measure()
31 self.last_measure = sum_raw_measures / 3
32 self.average = self.last_measure * self.average_converging_speed + self.average * (
33 1 - self.average_converging_speed)
34 return self.last_measure
36 def get_average(self):
37 """average (weighted exponentially) based on recent measures, more constant than last measure."""
38 return self.average
40 def get_last_measure(self):
41 """last measure, raw data, average() instead returns a weighted average with the previous_sent_perc ones."""
42 return self.last_measure
44 def get_percentage(self):
45 """actual percentage of the average between range passed."""
46 return (self.average - self.range_min) / (self.range_max - self.range_min)