PCA9685寄存器用法和通信(三)——使用golang

 导包的时候会报错,网上有解决办法。主要有个错误是: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)
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值