|
发表于 2017-1-17 08:56:50
|
显示全部楼层
/***************************************************
这是对我们的一个例子Adafruit 16通道PWM和伺服驱动
伺服测试——这将推动16伺服系统,一个接一个
接一个adafruit商店今天!
这些显示使用I2C通信2针需要
接口。对于Arduino凯泽本人,这是sci - >模拟5,SDA - >模拟4
Adafruit投入时间和资源提供这个开源的代码,
请支持Adafruit和开源硬件通过购买
产品从Adafruit !
****************************************************/
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// 这种方式,它使用默认地址0 x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// 你也可以叫它你想要使用不同的地址
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
//根据伺服,脉冲宽度最小和最大可能不同,你
//想要这些尽可能小/大打的很难停止
//为马克斯。你将不得不调整需要匹配的伺服系统
// !
#define SERVOMIN 150 // 这是最小的脉冲长度数(4096)
#define SERVOMAX 600 // 这是最大的脉冲长度数(4096)
// 我们的伺服#计数器
//uint8_t servonum = 0;
void setup() {
Serial.begin(9600);
Serial.println("16 channel Servo test!");
pwm.begin();
pwm.setPWMFreq(60); // 模拟伺服系统运行~ 60赫兹更新
}
//这个函数可以使用如果你想设置脉冲长度在几秒钟内
//例如setServoPulse(0,- 0.001)~ 1毫秒脉冲宽度。它不准确!
void setServoPulse(uint8_t n, double pulse) {
double pulselength;
pulselength = 1000000; // 1,000,000 us per second
pulselength /= 60; // 60 Hz
Serial.print(pulselength); Serial.println(" us per period");
pulselength /= 4096; // 12 bits of resolution
Serial.print(pulselength); Serial.println(" us per bit");
pulse *= 1000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}
void loop() {
// 驱动每个伺服一次
//Serial.println(servonum);
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
pwm.setPWM(0, 0, pulselen);
pwm.setPWM(1, 0, pulselen);
pwm.setPWM(2, 0, pulselen);
pwm.setPWM(3, 0, pulselen);
pwm.setPWM(4, 0, pulselen);
pwm.setPWM(5, 0, pulselen);
pwm.setPWM(6, 0, pulselen);
pwm.setPWM(7, 0, pulselen);
pwm.setPWM(8, 0, pulselen);
pwm.setPWM(9, 0, pulselen);
pwm.setPWM(10, 0, pulselen);
pwm.setPWM(11, 0, pulselen);
pwm.setPWM(12, 0, pulselen);
pwm.setPWM(13, 0, pulselen);
pwm.setPWM(14, 0, pulselen);
}
delay(500);
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
pwm.setPWM(0, 0, pulselen);
pwm.setPWM(0, 0, pulselen);
pwm.setPWM(1, 0, pulselen);
pwm.setPWM(2, 0, pulselen);
pwm.setPWM(3, 0, pulselen);
pwm.setPWM(4, 0, pulselen);
pwm.setPWM(5, 0, pulselen);
pwm.setPWM(6, 0, pulselen);
pwm.setPWM(7, 0, pulselen);
pwm.setPWM(8, 0, pulselen);
pwm.setPWM(9, 0, pulselen);
pwm.setPWM(10, 0, pulselen);
pwm.setPWM(11, 0, pulselen);
pwm.setPWM(12, 0, pulselen);
pwm.setPWM(13, 0, pulselen);
pwm.setPWM(14, 0, pulselen);
}
delay(500);
} |
|