K210呼吸灯

整体代码:

from machine import Timer,PWM
import time

tim_1 = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
tim_2 = Timer(Timer.TIMER0, Timer.CHANNEL1, mode=Timer.MODE_PWM)
tim_3 = Timer(Timer.TIMER0, Timer.CHANNEL2, mode=Timer.MODE_PWM)

ch_1 = PWM(tim_1, freq=500000, duty=50, pin=12)
ch_2 = PWM(tim_2, freq=500000, duty=50, pin=13)
ch_3 = PWM(tim_3, freq=500000, duty=50, pin=14)

duty_1=0
duty_2=50
duty_3=100
dir_1 = 1
dir_2 = 1
dir_3 = 1
while(True):
    if(dir_1==1):
        duty_1 += 10
        if(duty_1>100):
            duty_1 = 100
            dir_1 = 0
    else:
        duty_1 -= 10
        if(duty_1<0):
            duty_1 = 0
            dir_1 = 1

    if(dir_2==1):
        duty_2 += 10
        if(duty_2>100):
            duty_2 = 100
            dir_2 = 0
    else:
        duty_2 -= 10
        if(duty_2<0):
            duty_2 = 0
            dir_2 = 1

    if(dir_3==1):
        duty_3 += 10
        if(duty_3>100):
            duty_3 = 100
            dir_3 = 0
    else:
        duty_3 -= 10
        if(duty_3<0):
            duty_3 = 0
            dir_3 = 1

    time.sleep(0.5)
    ch_1.duty(duty_1)
    ch_2.duty(duty_2)
    ch_3.duty(duty_3)



效果展示:

逐句说明:

1.导入库函数

from machine import Timer,PWM
import time

2.创建定时器对象

tim_1 = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
tim_2 = Timer(Timer.TIMER0, Timer.CHANNEL1, mode=Timer.MODE_PWM)
tim_3 = Timer(Timer.TIMER0, Timer.CHANNEL2, mode=Timer.MODE_PWM)

tim = machine.Timer(id, channel, mode=Timer.MODE_ONE_SHOT, period=1000, unit=Timer.UNIT_MS, callback=None, arg=None, start=True, priority=1, div=0)

参数

  • id: Timer ID, [0~2] (Timer.TIMER0~TIMER2)
  • channel: Timer 通道, [Timer.CHANNEL0~Timer.CHANNEL3]
  • mode: Timer 模式, MODE_ONE_SHOT 或者 MODE_PERIODIC 或者 MODE_PWM
  • period: Timer 周期, 在启动定时器后 period 时间, 回调函数将会被调用,(0,~)
  • unit: 设置周期的单位,默认位毫秒(ms),Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者Timer.UNIT_NS
  • callback: 定时器回调函数, 定义了两个参数, 一个是定时器对象Timer, 第二个是在定义对象是希望传的参数arg,更多请看arg参数解释

注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态分配开关中断等动作

  • arg: 希望传给回调函数的参数,作为回调函数的第二个参数
  • start: 是否在对象构建成功后立即开始定时器, True:立即开始, False:不立即开启,需要调用start()函数来启动定时器
  • priority: 硬件定时器中断优先级, 与特定的CPU相关, 在K210中,取值范围是[1,7], 值越小优先级越高
  • div: 硬件定时器分频器,取值范围[0,255], 默认为0, clk_timer(定时器时钟频率) = clk_pll0(锁相环0频率)/2^(div+1)

clk_timer*period(unit:s) 应该 < 2^32 并且 >=1

3.创建PWM对象

ch_1 = PWM(tim_1, freq=500000, duty=50, pin=12)
ch_2 = PWM(tim_2, freq=500000, duty=50, pin=13)
ch_3 = PWM(tim_3, freq=500000, duty=50, pin=14)

pwm = machine.PWM(tim, freq, duty, pin, enable=True)

参数

  • tim: 每个PWM依赖一个定时器来产生波形, 所以这里需要传一个定时器对象,这个定时器对象必须初始化时必须指定定时器 ID 和通道号
  • freq: PWM 波形频率
  • duty: PWM 占空比, 指高电平占整个周期的百分比,取值:[0,100]
  • [pin]: PWM 输出引脚。 可以不设置,而是使用 fm 统一管理引脚映射。
  • enable: 是否立即开始产生波形,默认位True,及对象生成后立即开始在指定的引脚上产生 PWM 波形

4.设置对应通道PWM占空比

    ch_1.duty(duty_1)
    ch_2.duty(duty_2)
    ch_3.duty(duty_3)

pwm.duty(duty)

参数

  • duty: PWM 占空比 可选, 如果不传参数则步设置只返回当前占空比值

返回值

当前设置的 PWM 占空比值

5.实现三个灯的顺序呼吸

duty_1=0
duty_2=50
duty_3=100
dir_1 = 1
dir_2 = 1
dir_3 = 1
while(True):
    if(dir_1==1):
        duty_1 += 10
        if(duty_1>100):
            duty_1 = 100
            dir_1 = 0
    else:
        duty_1 -= 10
        if(duty_1<0):
            duty_1 = 0
            dir_1 = 1

    if(dir_2==1):
        duty_2 += 10
        if(duty_2>100):
            duty_2 = 100
            dir_2 = 0
    else:
        duty_2 -= 10
        if(duty_2<0):
            duty_2 = 0
            dir_2 = 1

    if(dir_3==1):
        duty_3 += 10
        if(duty_3>100):
            duty_3 = 100
            dir_3 = 0
    else:
        duty_3 -= 10
        if(duty_3<0):
            duty_3 = 0
            dir_3 = 1

    time.sleep(0.5)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值