矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1829|回复: 24

请教python代码只执行一半

[复制链接]
     
发表于 2025-1-6 02:04:37 | 显示全部楼层 |阅读模式
试着改进一段python代码
作用是4个led顺序点亮,然后再倒序熄灭。

改完后运行4个led顺序点亮正常,后就不再变化了。
请教坛友:代码哪里不对了?应该怎样改进?
先谢谢!


#LED流水灯:先熄灭4个LED,然后逐个点亮4个LED,反复进行
from machine import Pin   
import time                 

def ledz():   
    ledpinz=[8,7,6,5]   
    leds=[]                        
    for i in range(4):            
        leds.append(Pin(ledpinz[i],Pin.OUT))        
    for n in range(4):              
         while True:                                                   
             for n in range(4):        
                 leds[n].value(1)     
                 time.sleep(0.3)      
             time.sleep(0.3)                       
def ledf():
    ledpinf=[5,6,7,8]   
    leds=[]                 
    for i in range(4):            
        leds.append(Pin(ledpinf[i],Pin.OUT))  
    for n in range(4):      
         while True:
            for n in range(4):      
                leds[n].value(0)
                time.sleep(0.3)     
            time.sleep(0.3)
try:
    while True:
         ledz()               
         ledf()                    
except KeyboardInterrupt:
    pass
     
发表于 2025-1-9 17:07:55 | 显示全部楼层
ai分析的
QQ图片20250109170407.png QQ图片20250109170532.png QQ图片20250109170602.png

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2025-1-7 09:29:22 | 显示全部楼层
lxa000 发表于 2025-1-6 23:36
按你说的改进后 如下 :


  1. import time
  2. from machine import Pin

  3. ledpins = [ Pin(v, Pin.OUT) for v in [8, 7, 6, 5] ]
  4. ledstats = [0, 0, 0, 0]


  5. def led_ctrl():
  6.         for i,v in enumerate(ledstats):
  7.                 ledpins[i].value(v)
  8. ##

  9. while True:
  10.         for i in range(4):
  11.                 ledstats[i] = 1
  12.                 led_ctrl()
  13.                 time.sleep(1)
  14.                
  15.         for i in range(4):
  16.                 ledstats[3-i] = 0
  17.                 led_ctrl()
  18.                 time.sleep(1)
复制代码

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2025-1-6 09:21:57 | 显示全部楼层
while True:                                                   
             for n in range(4):        
                 leds[n].value(1)     
                 time.sleep(0.3)      
             time.sleep(0.3)   


执行到这段时,这死循环在这里出不去了。

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2025-1-6 09:10:03 | 显示全部楼层

看来是个新手。
给你写一个:

  1. import time
  2. from machine import Pin

  3. ledpins = [ Pin(v, Pin.OUT) for v in [8, 7, 6, 5] ]
  4. ledstats = [0, 0, 0, 0]


  5. def led_ctrl():
  6.         for i,v in enumerate(ledstats):
  7.                 ledpins[i].value(v)
  8. ##

  9. while True:
  10.         for i in range(4):
  11.                 ledstats[i] = 1 if ledstats[i] == 0 else 0
  12.                 led_ctrl()
  13.                 time.sleep(1)
复制代码

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2025-1-6 05:29:48 来自手机 | 显示全部楼层
ai修改from machine import Pin    import time                   def ledz():        """     控制 4 个 LED 逐个点亮的函数     """     ledpinz = [8, 7, 6, 5]        leds = []                             for i in range(4):                     leds.append(Pin(ledpinz[i], Pin.OUT))             for _ in range(4):  # 这里使用 _ 替代 n,避免与内层循环的变量名冲突         for led in leds:  # 直接遍历 leds 列表             led.value(1)                  time.sleep(0.3)               time.sleep(0.3)                         def ledf():     """     控制 4 个 LED 逐个熄灭的函数     """     ledpinf = [5, 6, 7, 8]        leds = []                      for i in range(4):                     leds.append(Pin(ledpinf[i], Pin.OUT))       for _ in range(4):  # 这里使用 _ 替代 n,避免与内层循环的变量名冲突         for led in leds:  # 直接遍历 leds 列表             led.value(0)             time.sleep(0.3)              time.sleep(0.3)  try:     """     主程序,不断交替执行逐个点亮和逐个熄灭的操作     """     while True:          ledz()                         ledf()                     except KeyboardInterrupt:     """     捕获键盘中断异常,通常用于在程序运行时通过键盘操作中断程序     """     pass

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2025-1-6 08:55:45 | 显示全部楼层
好奇,这是用来控制哪个上面的led啊?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-6 13:44:27 | 显示全部楼层
佚天 发表于 2025-1-6 09:21
while True:                                                   
             for n in range(4):      ...

非常感谢上面坛友的解答。

我会根据你们的指导继续试验。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-6 13:46:06 | 显示全部楼层
dianziwg 发表于 2025-1-6 08:55
好奇,这是用来控制哪个上面的led啊?

我外接了 4个led和 4个按键。


我的rp2040.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-6 14:02:30 | 显示全部楼层
刚才试了junyee,aidn两位坛友的代码,
都是顺序点亮顺序熄灭的 。
我想要顺序点亮,倒序熄灭的 。
回复 支持 反对

使用道具 举报

     
发表于 2025-1-6 19:50:51 | 显示全部楼层
13行 后改成:


  1. while True:
  2.         for i in range(4):
  3.                 ledstats[i] = 1
  4.                 led_ctrl()
  5.                 time.sleep(0.5)
  6.                
  7.         for i in range(4):
  8.                 ledstats[3-i] = 0
  9.                 led_ctrl()
  10.                 time.sleep(1)
复制代码
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-6 23:36:06 | 显示全部楼层

按你说的改进后 如下 :



zzz 拷贝.jpg
回复 支持 反对

使用道具 举报

发表于 2025-1-7 00:50:34 | 显示全部楼层
查了一下发现RP2040单片机挺强大的,应该很好玩。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-7 20:41:19 | 显示全部楼层

ok!
这回成了。
非常感谢!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-7 20:44:02 | 显示全部楼层
qyg123 发表于 2025-1-7 00:50
查了一下发现RP2040单片机挺强大的,应该很好玩。

是的 。
用这种单片机做啥子数控收音机/数控稳压电源/电子手表。。。
都不在话下。

所以现在暂时放下51
转到学习ESP32。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-8 18:22:13 | 显示全部楼层

你昨天发的代码咋没了 ?

今天拍了一下段视频:
顺倒流水灯.rar (469.4 KB, 下载次数: 4)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表