По задаче требуется более 3х кнопок и 3х индикаторов.
В предыдущем посте сделали программу для одного комплекта.
Обернув основные части программы в функцию мы можем вызвать по очереди их с разными параметрами, а параметрами будут выступать пины, имя работы и очередь.
Листинг:
#!/usr/bin/env python
import SUNXI_GPIO as GPIO
import time
import logging
from threading import Thread
from Queue import Queue
def blink_led(runJob,RED_LED,GREEN_LED,NameLED):
nowJob=False
logging.basicConfig(filename="blink_led.log", level=logging.INFO)
while True:
if runJob.empty() == False:
nowJob=runJob.get()
if nowJob is None:
break
logging.info(nowJob)
if nowJob==True:
logging.info(nowJob)
GPIO.output(RED_LED, GPIO.HIGH)
time.sleep(1)
GPIO.output(GREEN_LED, GPIO.HIGH)
time.sleep(1)
GPIO.output(RED_LED, GPIO.LOW)
time.sleep(1)
GPIO.output(GREEN_LED, GPIO.LOW)
time.sleep(1)
else:
GPIO.output(GREEN_LED, GPIO.LOW)
GPIO.output(RED_LED, GPIO.LOW)
def check_button(runJob,IN_KEY,NameKey):
stateJob=False
while True:
state=True #Checking that state pin GPIO do not has changed (contact bounce)
if GPIO.input(IN_KEY) == False:
state=False
time.sleep(0.1)
if GPIO.input(IN_KEY) == state:
print 'Key '+NameKey+' pressed.'
if stateJob == False:
runJob.put(True)
stateJob=True
print 'runJob_'+NameKey
else:
runJob.put(False)
stateJob=False
print 'StopJob_'+NameKey
print stateJob
#BLOCK_1
# RED_LED = GPIO.PD1
# GREEN_LED = GPIO.PD2
# IN_KEY = GPIO.PD0
GPIO.init()
GPIO.setcfg(GPIO.PD1, GPIO.OUT)
GPIO.setcfg(GPIO.PD2, GPIO.OUT)
GPIO.setcfg(GPIO.PD0, GPIO.IN)
runJob=Queue(1)
ButtonJob_1 = Thread(target=check_button, args=(runJob,GPIO.PD0,'1',))
LedJob_1 = Thread(target=blink_led, args=(runJob,GPIO.PD1,GPIO.PD2,'1',))
ButtonJob_1.start()
LedJob_1.start()
#BLOCK_2
# RED_LED = GPIO.PD9
# GREEN_LED = GPIO.PD6
# IN_KEY = GPIO.PD7
GPIO.init()
GPIO.setcfg(GPIO.PD9, GPIO.OUT)
GPIO.setcfg(GPIO.PD6, GPIO.OUT)
GPIO.setcfg(GPIO.PD7, GPIO.IN)
runJob=Queue(1)
ButtonJob_2 = Thread(target=check_button, args=(runJob,GPIO.PD7,'2',))
LedJob_2 = Thread(target=blink_led, args=(runJob,GPIO.PD9,GPIO.PD6,'2',))
ButtonJob_2.start()
LedJob_2.start()
while True:
time.sleep(1)
runJob.put(None)
LedJob_1.join()
ButtonJob_1.join()
LedJob_2.join()
ButtonJob_2.join()
По схеме, дублируем предыдущую полностью, кроме земли и +3,3, их берем от уже существующих пинов. Специально сбегал за большой макетной платой, чтобы GND и +3.3V вывести по краям
Комментариев нет:
Отправить комментарий