导包的时候会报错,网上有解决办法。主要有个错误是:cannot find package "golang.org/x/exp/io/i2c"in any of:
/usr/lib/go-1.11/src/golang.org/x/exp/io/i2c (from $GOROOT)
/home/pi/go/src/golang.org/x/exp/io/i2c (from $GOPATH)
使用git clone https://github.com/golang/exp.git,将复制下来的exp文件夹移动到你的GOPATH目录,我的就是/home/pi/go/src/golang.org/x/。
package main
import (
"github.com/op/go-logging"
"github.com/sergiorb/pca9685-golang/device"
"golang.org/x/exp/io/i2c"
"log"
"time"
)
const (
I2C_ADDR = "/dev/i2c-1"
ADDR_01 = 0x40
SVO_TYPE = 180 //舵机类型:最大转角
SERVO_HORIZ = 0 //横向舵机
SERVO_VERTIC = 1 //纵向舵机
MIN_PULSE = 103
MAX_PULSE = 512
)
func main() {
logger := logging.Logger{}
dev, err := i2c.Open(&i2c.Devfs{Dev: I2C_ADDR}, ADDR_01)
if err != nil {
log.Fatal(err)
}
pca := device.NewPCA9685(dev, "Servo Controller", MIN_PULSE, MAX_PULSE, &logger)
pca.Frequency = 50.0
pca.Init()
//横向舵机先转到100°,2秒后转到0°
servo0 := pca.NewPwm(SERVO_HORIZ)
setAngle(servo0, 100.0)
time.Sleep(2 * time.Second)
setAngle(servo0, 0.0)
time.Sleep(2 * time.Second)
//纵向舵机先转到100°,2秒后转到0°
servo1 := pca.NewPwm(SERVO_VERTIC)
setAngle(servo1, 100.0)
time.Sleep(2 * time.Second)
setAngle(servo1, 0.0)
time.Sleep(2 * time.Second)
//关闭所有通道
pca.SetAllPwm(0, 0)
}
func setAngle(p *device.Pwm, angle float32) {
offReg := int((0.5 + angle/SVO_TYPE*2) * 4096 / 20)
p.SetPulse(0, offReg)
}