首先在代码的开头调用PWM所需要的库,以及在顶部做相关的参数声明:
// PWM 参数设置
#include <Adafruit_PWMServoDriver.h>
#include <Wire.h>
TwoWire wire = TwoWire();
Adafruit_PWMServoDriver pwm =
Adafruit_PWMServoDriver(PCA9685_I2C_ADDRESS, wire);
#define MIN_PULSE_WIDTH 600
#define MAX_PULSE_WIDTH 2600
#define FREQUENCY 50
在 setup() 中自定义对应的I2C引脚,开发板对应的I2C输出引脚为14,12。
void setup() {
// 自定义I2C接口
wire.pins(14, 12);
pwm.begin();
pwm.setPWMFreq(FREQUENCY);
}
然后在 loop() 中调用输出PWM到对应的引脚,具体使用方法如下:
void loop(){
pwm.setPWM(0, 0, pulseWidth(90)); // 0号接口输出90度
pwm.setPWM(1, 0, pulseWidth(180)); // 1号接口输出180度
}
另外记得在代码中新增如下方法:
// PWM舵机控制函数
int pulseWidth(int angle) {
int pulse_wide, analog_value;
pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
return analog_value;
}