我正在使用Pi3,面包板,温度传感器和4通道继电器。现在,我的面包板上有两个按钮,按下它们时应显示温度并打开继电器并转动另一个按钮。我正在努力构建一个智能恒温器,所以想到代表空调和暖气的按钮,它们不能同时打开。
我的问题是,在显示温度时,它会引用对象(read_temp()),它会正确显示一个按钮而不是另一个按钮的温度。它只显示将摄氏温度转换为华氏温度的等式的最后一部分。例如,我将按下两个按钮,一个将显示75度,另一个将始终显示32。
我尝试以不同的方式声明按钮作为GPIO.inputs,我已经转移到不同的GPIO引脚,认为这是硬件问题,我已经切换按钮的位置,我已经尝试返回temp_c和temp_f(read_temp( ))对象,似乎没有什么可以做的。
目前,AC按钮不能正常工作,但正如我所提到的,我已经切换了按钮和引脚,它仍然只能正常显示。
谢谢!
import RPi.GPIO as GPIO
import time
import os
import glob
import time
import sys
from gpiozero import Button
import pdb
# init list with pin numbers
GPIO.setmode(GPIO.BCM)
pinList = [2, 3, 27, 17]
AC = Button(12)
Heat = Button(21)
# loop through pins and set mode and state to 'high'
for i in pinList:
GPIO.setup(i, GPIO.OUT)
GPIO.output(i, GPIO.HIGH)
# time to sleep between operations in the main loop
##SleepTimeL = 5
# Setting up temperarture sensor
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_f
# main loop
try:
while True:
if AC.is_pressed:
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.HIGH)
print(read_temp()), "degrees farenheit"
if Heat.is_pressed:
GPIO.output(3, GPIO.LOW)
GPIO.output(2, GPIO.HIGH)
print(read_temp()), "degrees farenheit"
except KeyboardInterrupt:
print " Quit"
GPIO.cleanup()