Управление яркостью светодиодов с помощью аналого-цифрового преобразователя MCP3002 - PullRequest
2 голосов
/ 08 апреля 2020

Я пытаюсь контролировать список яркости PWMLED, используя MCP3002 ADC и Потенциометр.

Моя проблема в том, что когда я запускаю свой сценарий, все работает, как ожидалось, кроме подключенного потенциометра до MCP3002 AD C, он не будет регулировать яркость моего PWMLED, пока я настраиваю ручку.

Вот мой код:

#!/usr/bin/python3

from gpiozero import PWMLED, Button, MCP3002
from threading import Thread
from signal import pause
from time import sleep
LEDs = [PWMLED(5), PWMLED(17), PWMLED(22), PWMLED(19), PWMLED(26)]
potentiometer = MCP3002(0)
pushButton = Button(21)
SPEED = 0.03


def analogRead():              # Now this function is working
    while True:                # the potentiometer value gets
    global LEDs                # displayed on the screen and it changes as
    print("analogRead called") # I adjust the knob but the ledSequnce() lights keep
    for PWMLED in LEDs:        # flickering, and the sequence gets interrupted
        if potentiometer.value < 0.02:
            PWMLED.value = 0
        else:
            PWMLED.value = potentiometer.value
        print(potentiometer.value)
        sleep(0.1)


def speedCounter():
    global SPEED
    if SPEED < 0.4:
        SPEED += 0.1
    else:
        SPEED = 0.03


def ledSequence():
    while True:
        for PWMLED in LEDs:
            PWMLED.on()
            sleep(SPEED)
            PWMLED.off()
        for PWMLED in reversed(LEDs):
            PWMLED.on()
            sleep(SPEED)
            PWMLED.off()


try:
    pushButton.when_pressed = speedCounter
    ledFlash = Thread(target=ledSequence, daemon=True)
    ledFlash.start()
    pot = Thread(target=analogRead, daemon=True)
    pot.start()
    pause()

except KeyboardInterrupt:
    exit(1)

Но когда я пробую этот скрипт это работает просто отлично:

#!/usr/bin/python3

from gpiozero import PWMLED, MCP3002
from time import sleep

pot = MCP3002(0)
led = [PWMLED(5), PWMLED(17), PWMLED(22), PWMLED(19), PWMLED(26)]
while True:
    for PWMLED in led:
        if pot.value < 0.02:
            PWMLED.value = 0
        else:
            PWMLED.value = pot.value

        print(pot.value)
        sleep(0.1)

Ваша помощь будет очень признательна!

1 Ответ

0 голосов
/ 11 апреля 2020

Я нашел решение своей проблемы. Итак, я подумал, что я должен опубликовать это здесь!

#!/usr/bin/python3

from gpiozero import PWMLED, Button, MCP3002
from threading import Thread
from signal import pause
from time import sleep
LEDs = [PWMLED(5), PWMLED(17), PWMLED(22), PWMLED(19), PWMLED(26)]
potentiometer = MCP3002(0)
pushButton = Button(21)
SPEED = 0.03


def speedCounter():
    global SPEED
    if SPEED < 0.4:
        SPEED += 0.1
    else:
        SPEED = 0.03


def ledSequence():
    while True:
        for PWMLED in LEDs:
            PWMLED.on()
            PWMLED.value = potentiometer.value
            sleep(SPEED)
            PWMLED.off()
        for PWMLED in reversed(LEDs):
            PWMLED.on()
            PWMLED.value = potentiometer.value
            sleep(SPEED)
            PWMLED.off()


try:
    pushButton.when_pressed = speedCounter
    ledFlash = Thread(target=ledSequence, daemon=True)
    ledFlash.start()
    pause()

except KeyboardInterrupt:
    exit(1)
...