• 大小: 1KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Python
  • 标签: python  PCA9685  

资源简介

树莓派_python_PCA9685_16路舵机自定义角度控制源码,输入需要控制的角度就可以达到控制舵机移动,代码默认是控制0号端口,其他1-15自行修改

资源截图

代码片段和文件信息

# -*- coding: UTF-8 -*-
import smbus
import time
pca9685_adr=0x40
pca9685_mode1adr=0x00
pca9685_mode2adr=0x01
pca9685_subadr1=0x02
pca9685_subadr2=0x03
pca9685_subadr3=0x04
pca9685_allcalladr=0x05
pca9685_led0_on_l=0x06
pca9685_led0_on_h=0x07
pca9685_led0_off_l=0x08
pca9685_led0_off_h=0x09
pca9685_all_led_on_l=0xfa
pca9685_all_led_on_h=0xfb
pca9685_all_led_off_l=0xfc
pca9685_all_led_off_h=0xfd
pca9685_pre_scale=0xfe
pca9685_testmode=0xff
pca9685_mode=0x00
bus=smbus.SMBus(1)
class PCA9685(object):
    def __init__(self address=pca9685_adr):
        self._address =address
        self._bus = smbus.SMBus(1)

    def init(self):
        bus.write_byte_data(self._addresspca9685_mode1adr0x0)
#        bus.write_byte_data(self._addressmode1adr0x21)

    def setsq(selfhz):
        hz=float(hz)
        data=(25000000/(4096*hz))-1
        data=int(data)
        oldmode1=bus.read_byte_data(self._addresspca9685_mode1adr)
        newmode1 = (oldmode1&0x7F) | 0x10
        bus.write_byte_data(self._addresspca9685_mode1adrnewmode1)
        bus.write_byte_data(self._addresspca9685_pre_scaledata)
        bus.write_byte_data(self._addresspca9685_mode1adroldmode1)
        time.sleep(0.005)
        bus.write_byte_data(self._addresspca9685_mode1adroldmode1|0xa1)
        self.init()

    def hex1(selfx1):
        if x1<0xff:
            x_l=x1
            x_h=0x00
        else :
            x_h=x1/256
            x_l=x1-x_h*256
        return x_lx_h

    def write_16(selfledu_16):
        (u_16_lu_16_h)=self.hex1(u_16)
        bus.write_byte_data(self._addressledu_16_l)
        bus.write_byte_data(self._addressled+1u_16_h)
    def allinit(self):
        self.write_16(pca9685_all_led_on_l0)
        self.write_16(pca9685_all_led_off_l300)
    def setallpwm(selfledonledoff):
        self.write_16(pca9685_all_led_on_lledon)
        self.write_16(pca9685_all_led_off_lledoff)
    def setpwm(selfnledonledoff):
        print ledonledoff
        self.write_16(pca9685_led0_on_l+4*nledon)
        self.write_16(pca9685_led0_on_l+4*nledoff)
    def getsq(self):
        data=bus.read_byte_data(self._addresspca9685_pre_scale)
        hz=25000000/(4096*(data+1))
        return hz
    def setallangle(selfangle):
        if angle>180:angle=180
        if angle<0:angle=0
        self.setsq(50)
        time1=float(angle+45)/90
        ledoff=int((time1/20)*4096)
        self.write_16(pca9685_all_led_on_l0)
        self.write_16(pca9685_all_led_off_lledoff)
    def setangle(selfnangle):
        “““
        if angle<16:angle=16
        hz=self.getsq()
        print hz
        time=float(1000/hz)#一个周期的时间
        if angle>180:angle=180
        time1=float(angle+45)/90
        print timetime1
        ledoff=int((time1/time)*4096)
        print ledoff
        “““
        if angle>180:angle=180
        if angle<0:angle=0
        #self.setsq(50)
        time1=flo

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-28 22:41  dj\
     文件        3188  2016-06-04 21:18  dj\PCA9685.py
     文件         410  2018-12-30 01:22  dj\testdj1.py

评论

共有 条评论