Python 最大或最小亮度时,RPi LED停止工作

Python 最大或最小亮度时,RPi LED停止工作,python,raspberry-pi3,Python,Raspberry Pi3,我为我的学校作业写了一个代码: 编写一个功能,通过按下输入开关来改变led的亮度(pwm)。第一次按住会增加亮度,下一次按下会降低亮度 它在0和100之间工作,但当它达到0或100时,它就停止工作。代码如下: import RPi.GPIO as GPIO def main(): sw = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(sw, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup

我为我的学校作业写了一个代码:

编写一个功能,通过按下输入开关来改变led的亮度(pwm)。第一次按住会增加亮度,下一次按下会降低亮度

它在0和100之间工作,但当它达到0或100时,它就停止工作。代码如下:

import RPi.GPIO as GPIO

def main():

    sw = 17
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(sw, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(2, GPIO.OUT)
    pwm_red=GPIO.PWM(2,500)
    pwm_red.start(100)
    bright=0
    state=0
    while 1:
        if swin=GPIO.input(sw)
            if state== 1 and bright !=100: '''I put bright !=100 becuase without it, it would just kick me out of the loop when hits 100'''
                bright=bright+1
                pwm_red.ChangeDutyCycle(bright)
                print(bright)
                while GPIO.input(sw)==1:
                    state=0

            if state ==0 and bright !=0:
                bright=bright-1
                pwm_red.ChangeDutyCycle(bright)
                print(bright)
                while GPIO.input(sw)==1:
                    state=1

有人能帮我找到解决办法吗?我制作了这个代码的多个版本,它们都有这个问题。我试图用谷歌搜索这个问题,但什么都没有。我可以让它永远不会达到100或0,但这不是正确的解决方案。我希望它被关闭(当它是99.9999999时,它仍然处于打开状态)

老实说,我很惊讶当前的编码居然能工作。我会在事件循环中的第一个if之后立即更改逻辑,检查按钮状态

尝试以下类似的方法,我还没有测试过

import RPi.GPIO as GPIO
from time import sleep

def main():

    sw = 17
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(sw, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(2, GPIO.OUT)
    pwm_red=GPIO.PWM(2, 50) # 50 Hz should be fine
    bright=100
    pwm_red.start(bright)
    state=-1

    while True:
        while GPIO.input(sw) 
            while GPIO.input(sw) and (0 <= bright + state <= 100):
                bright += state
                pwm_red.ChangeDutyCycle(bright)
                print(bright)
                sleep(0.1)

            sleep(0.1)

        state *= -1

        # Avoid excessive polling
        while not GPIO.input(sw):
            sleep(0.1)
将RPi.GPIO导入为GPIO
从时间上导入睡眠
def main():
sw=17
GPIO.setmode(GPIO.BCM)
GPIO.setup(软件,GPIO.IN,上拉下=GPIO.PUD上拉)
GPIO.setup(2,GPIO.OUT)
pwm#U red=GPIO。pwm(2,50)#50 Hz应该可以
亮度=100
pwm_红色启动(亮)
状态=-1
尽管如此:
而GPIO.input(软件)

而GPIO.input(软件)和(0)另外,我问了老师,他无法修复。您的代码与我需要的代码有点不符,但是,它给了我一个如何改进代码的想法。该作业的重点是在按住按钮时更改亮度,您的代码会自行更改亮度。我修复了代码,我的意思是它很混乱,但它正在工作:DI'm很高兴上面的代码有帮助。在你的评论之后,我对它做了一些修改,因为我发现了一个问题。同样,我没有测试它,因为我目前在我的实验板上有其他东西。
def main2():
sw=17
GPIO.setmode(GPIO.BCM)
GPIO.setup(sw, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setwarnings(False)
GPIO.setup(2, GPIO.OUT)
pwm_red = GPIO.PWM(2, 50)
pwm_red.start(100)
bright=100
state=-1
while True:
    swin=GPIO.input(sw)
    while swin == False:
        if state == 1 and bright !=100:

            bright+=5
            pwm_red.ChangeDutyCycle(bright)
            print(bright)
            while GPIO.input(sw)==1:
                state *= -1
            time.sleep(0.1)
        if bright == 100:
            state *=-1
            time.sleep(0.3)
        if bright == 0:
            state *=-1

            time.sleep(0.3)
        if state == -1 and bright !=0:
            bright-=5
            pwm_red.ChangeDutyCycle(bright)
            print(bright)

            while GPIO.input(sw)==1:
                state *= -1
            time.sleep(0.1)