11 мая 2020 г.

CubieBoard2 делаем кнопки II


По задаче требуется более 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 вывести по краям

Комментариев нет:

Отправка комментария