@@ -21,27 +21,41 @@ cdef class Stream:
21
21
def __init__ (self , pin ):
22
22
self .reader.pin = pin
23
23
24
+ # Poll sensor and read data
25
+
24
26
def run (self ):
25
27
self .reader.run()
26
28
29
+ #
30
+ # Debug output
31
+ #
32
+
27
33
def print (self ):
28
34
self .reader.print ()
29
35
36
+ #
37
+ # Get results
38
+ #
39
+
40
+ @property
30
41
def valid (self ):
31
42
return self .reader.valid()
32
43
33
- def correct (self ):
34
- return self .reader.correct()
35
-
44
+ @property
36
45
def humidity (self ):
37
- return float (self .reader.humidity(self .reader.bits() )) / 10.0
46
+ return float (self .reader.humidity(self .reader.bits)) / 10.0
38
47
48
+ @property
39
49
def temperature (self ):
40
- t = self .reader.temperature(self .reader.bits() )
50
+ t = self .reader.temperature(self .reader.bits)
41
51
if t & 0x8000 :
42
52
t = (~ t + 1 ) | 0x8000
43
53
return float (t) / 10.0
44
54
55
+ #
56
+ # Internal timing arrays
57
+ #
58
+
45
59
def timingsStart (self , i , val = None ):
46
60
if val is None :
47
61
return self .reader.timingsStart[i]
@@ -60,12 +74,40 @@ cdef class Stream:
60
74
else :
61
75
self .reader.timingsLow[i] = val
62
76
63
- def defectHigh (self ):
64
- i = self .reader.defectHigh()
65
- if i >= 0 :
66
- return i
77
+ def fillBits (self ):
78
+ self .reader.fillBits()
79
+
80
+ #
81
+ # Error detection
82
+ #
83
+
84
+ def missingBits (self ):
85
+ return self .reader.missingBits().count()
86
+
87
+ def tryCorrect (self ):
88
+ return self .reader.tryCorrect()
89
+
90
+ class Result :
91
+ def __init__ (self , temperature , humidity ):
92
+ self .temperature = temperature
93
+ self .humidity = humidity
94
+
95
+ def read (pin = 7 , retries = 10 ):
96
+
97
+ # make sure we're initialized
98
+ setup()
99
+
100
+ # load stream
101
+ s = Stream(pin = pin)
67
102
68
- def defectLow (self ):
69
- i = self .reader.defectLow()
70
- if i >= 0 :
71
- return i
103
+ m = 1 + retries # number of attempts
104
+ for i in range (m):
105
+ s.run()
106
+ if s.valid:
107
+ return Result(
108
+ temperature = s.temperature,
109
+ humidity = s.humidity,
110
+ )
111
+ # sleep and retry
112
+ if i < m- 1 :
113
+ time.sleep(2 )
0 commit comments