两个GPIO按钮调用同一个对象

时间:2017-05-29 12:33:50

标签: python object button raspberry-pi3 gpio

我正在使用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()

0 个答案:

没有答案