mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-07 00:13:42 +00:00
add PCA9685 driver
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/pca9685"
|
||||
)
|
||||
|
||||
func main() {
|
||||
const (
|
||||
// Default address on most breakout boards.
|
||||
pcaAddr = 0x40
|
||||
)
|
||||
err := machine.I2C0.Configure(machine.I2CConfig{})
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
d := pca9685.New(machine.I2C0, 0x40)
|
||||
err = d.IsConnected()
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
err = d.Configure(pca9685.PWMConfig{Period: 1e9 / 200}) // 200Hz PWM
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
var value uint32
|
||||
step := d.Top() / 5
|
||||
for {
|
||||
for value = 0; value <= d.Top(); value += step {
|
||||
d.SetAll(value)
|
||||
dc := 100 * value / d.Top()
|
||||
println("set dc @", dc, "%")
|
||||
time.Sleep(800 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ScanI2CDev finds I2C devices on the bus and rreturns them inside
|
||||
// a slice. If slice is nil then no devices were found.
|
||||
func ScanI2CDev(bus machine.I2C) (addrs []uint8) {
|
||||
var addr, count uint8
|
||||
var err error
|
||||
w := []byte{1}
|
||||
// Count devices in first scan
|
||||
for addr = 1; addr < 127; addr++ {
|
||||
err = bus.Tx(uint16(addr), w, nil)
|
||||
if err == nil {
|
||||
count++
|
||||
}
|
||||
}
|
||||
if count == 0 {
|
||||
return nil
|
||||
}
|
||||
// Allocate slice and populate slice with addresses
|
||||
addrs = make([]uint8, count)
|
||||
count = 0
|
||||
for addr = 1; addr < 127; addr++ {
|
||||
err = bus.Tx(uint16(addr), w, nil)
|
||||
if err == nil && count < uint8(len(addrs)) {
|
||||
addrs[count] = addr
|
||||
count++
|
||||
}
|
||||
}
|
||||
return addrs
|
||||
}
|
||||
Reference in New Issue
Block a user