53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
/***************************************************
|
|
This is an example for our Adafruit 16-channel PWM & Servo driver
|
|
PWM test - this will drive 16 PWMs in a 'wave'
|
|
|
|
Pick one up today in the adafruit shop!
|
|
------> http://www.adafruit.com/products/815
|
|
|
|
These drivers use I2C to communicate, 2 pins are required to
|
|
interface.
|
|
|
|
Adafruit invests time and resources providing this open source code,
|
|
please support Adafruit and open-source hardware by purchasing
|
|
products from Adafruit!
|
|
|
|
Written by Limor Fried/Ladyada for Adafruit Industries.
|
|
BSD license, all text above must be included in any redistribution
|
|
****************************************************/
|
|
|
|
#include <Wire.h>
|
|
#include <Adafruit_PWMServoDriver.h>
|
|
|
|
// called this way, it uses the default address 0x40
|
|
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
|
|
// you can also call it with a different address you want
|
|
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
|
|
// you can also call it with a different address and I2C interface
|
|
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(&Wire, 0x40);
|
|
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
Serial.println("16 channel PWM test!");
|
|
|
|
pwm.begin();
|
|
pwm.setPWMFreq(1600); // This is the maximum PWM frequency
|
|
|
|
// if you want to really speed stuff up, you can go into 'fast 400khz I2C' mode
|
|
// some i2c devices dont like this so much so if you're sharing the bus, watch
|
|
// out for this!
|
|
Wire.setClock(400000);
|
|
}
|
|
|
|
void loop() {
|
|
// Drive each PWM in a 'wave'
|
|
for (uint16_t i=0; i<4096; i += 8) {
|
|
for (uint8_t pwmnum=0; pwmnum < 16; pwmnum++) {
|
|
pwm.setPWM(pwmnum, 0, (i + (4096/16)*pwmnum) % 4096 );
|
|
}
|
|
#ifdef ESP8266
|
|
yield(); // take a breather, required for ESP8266
|
|
#endif
|
|
}
|
|
}
|