Hide keyboard shortcuts

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 """ 

3 

4 last_measure = -1 

5 

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 

15 

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()) 

21 

22 def raw_measure(self): 

23 """returns only one raw measure""" 

24 raise Exception("raw measure should be implemented") 

25 

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 

35 

36 def get_average(self): 

37 """average (weighted exponentially) based on recent measures, more constant than last measure.""" 

38 return self.average 

39 

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 

43 

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)