title: 树莓派3B开发Go语言案例-2.LED呼吸灯效果
tags: 树莓派,go,golang,3B,3B+,rgb,led
原本想实现RGB LED灯发出多彩灯光效果,由于当前版本的PWM非常难用,且存在BUG,官方计划重构PWM的功能,所以改为了呼吸灯效果。
该功能主要是通过PWM调光来实现,关于PWM调光推荐一篇科普文章 PWM调光科普(上篇):人类显示器的黑历史
,讲解的非常清楚。
LED正极接在针脚11上,对应GPIO17
实现代码,该节代码仅做参考,因为
package main
import (
"log"
"time"
"periph.io/x/periph/conn/gpio"
"periph.io/x/periph/conn/physic"
"periph.io/x/periph/host"
"periph.io/x/periph/host/rpi"
)
func main() {
// 初始化
if _, err := host.Init(); err != nil {
log.Fatal(err)
}
p := rpi.P1_11
// 使用 PWM 在程序结束前必须调用,要不然下次调用时会异常
defer p.Halt()
// 闪烁10次
count := 10
i, _ := gpio.ParseDuty("1")
add := true
for {
if add {
i++
if i == 1000 {
add = false
}
} else {
i--
if i == 1 {
add = true
count--
if count == 0 {
break
}
}
}
// 设置占空比和频率
if err := p.PWM(gpio.DutyMax/1000*i, 10*physic.KiloHertz); err != nil {
log.Fatal(err)
}
time.Sleep(1 * time.Millisecond)
}
p.Out(gpio.Low)
}