58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
import time,board
|
|
|
|
def read_data(pin_name):
|
|
data=[]
|
|
j=0
|
|
time.sleep_ms(1200)
|
|
N1 = board.pin(pin_name, board.GPIO.OUT)
|
|
N1.value(0)
|
|
time.sleep_ms(20)
|
|
N1.value(1)
|
|
time.sleep_us(30)
|
|
N1 =board.pin(pin_name, board.GPIO.IN)
|
|
T1 = time.ticks_us()
|
|
while N1.value()==0:
|
|
continue
|
|
while N1.value()==1:
|
|
T2 =time.ticks_us()
|
|
if time.ticks_diff(T2, T1) >200000:
|
|
#raise ValueError("[MixNo]:Sensor read error")
|
|
break
|
|
continue
|
|
while j<40:
|
|
k=0
|
|
while N1.value()==0:
|
|
continue
|
|
while N1.value()==1:
|
|
k+=1
|
|
if k>100:break
|
|
if k<15:
|
|
data.append(0)
|
|
else:
|
|
data.append(1)
|
|
j=j+1
|
|
del N1
|
|
humidity_bit=data[0:8]
|
|
humidity_point_bit=data[8:16]
|
|
temperature_bit=data[16:24]
|
|
temperature_point_bit=data[24:32]
|
|
check_bit=data[32:40]
|
|
humidity=0
|
|
humidity_point=0
|
|
temperature=0.0
|
|
temperature_point=0
|
|
check=0
|
|
for i in range(8):
|
|
humidity+=humidity_bit[i]*2**(7-i)
|
|
humidity_point+=humidity_point_bit[i]*2**(7-i)
|
|
temperature+=temperature_bit[i]*2**(7-i)
|
|
temperature_point+=temperature_point_bit[i]*2**(7-i)
|
|
check+=check_bit[i]*2**(7-i)
|
|
tmp=humidity+humidity_point+temperature+temperature_point
|
|
#print(humidity_point,temperature_point)
|
|
if check==tmp:
|
|
#print('temperature is',temperature,'-wet is',humidity,'%')
|
|
return (temperature+temperature_point/10,humidity)
|
|
else:
|
|
#print('Error:',humidity,humidity_point,temperature,temperature_point,check)
|
|
return (None,None) |