Paolo Sanna
/
PCA9685_Hello_World
demonstration program for the library created for PCA9685 PWM controller
main.cpp@0:305237ecbbe5, 2015-07-22 (annotated)
- Committer:
- dreamworker
- Date:
- Wed Jul 22 13:23:02 2015 +0000
- Revision:
- 0:305237ecbbe5
- Child:
- 1:9fd2d2f5184e
Hello World example for PCA9685 PWM controller
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dreamworker | 0:305237ecbbe5 | 1 | /*PCA9685 library example code |
dreamworker | 0:305237ecbbe5 | 2 | *test library performed with two servomotor, attached in channel 0 and 1, that rotate to the right and to the left |
dreamworker | 0:305237ecbbe5 | 3 | */ |
dreamworker | 0:305237ecbbe5 | 4 | #include"PCA9685.h" |
dreamworker | 0:305237ecbbe5 | 5 | #include"mbed.h" |
dreamworker | 0:305237ecbbe5 | 6 | |
dreamworker | 0:305237ecbbe5 | 7 | |
dreamworker | 0:305237ecbbe5 | 8 | |
dreamworker | 0:305237ecbbe5 | 9 | PCA9685 pwm(D14,D15); |
dreamworker | 0:305237ecbbe5 | 10 | |
dreamworker | 0:305237ecbbe5 | 11 | void setServoPulse(uint8_t n, float pulse) { |
dreamworker | 0:305237ecbbe5 | 12 | float pulselength = 10000; // 10,000 units per seconds |
dreamworker | 0:305237ecbbe5 | 13 | pulse = 4094 * pulse / pulselength; |
dreamworker | 0:305237ecbbe5 | 14 | pwm.setPWM(n, 0, pulse); |
dreamworker | 0:305237ecbbe5 | 15 | } |
dreamworker | 0:305237ecbbe5 | 16 | |
dreamworker | 0:305237ecbbe5 | 17 | void initServoDriver() { |
dreamworker | 0:305237ecbbe5 | 18 | pwm.begin(); |
dreamworker | 0:305237ecbbe5 | 19 | pwm.setPrescale(64); //This value is decided for 10ms interval. |
dreamworker | 0:305237ecbbe5 | 20 | pwm.frequencyI2C(400000); //400kHz |
dreamworker | 0:305237ecbbe5 | 21 | } |
dreamworker | 0:305237ecbbe5 | 22 | |
dreamworker | 0:305237ecbbe5 | 23 | int main() { |
dreamworker | 0:305237ecbbe5 | 24 | |
dreamworker | 0:305237ecbbe5 | 25 | while(1){ |
dreamworker | 0:305237ecbbe5 | 26 | initServoDriver(); |
dreamworker | 0:305237ecbbe5 | 27 | wait(0.2); |
dreamworker | 0:305237ecbbe5 | 28 | setServoPulse(0, 2300); |
dreamworker | 0:305237ecbbe5 | 29 | setServoPulse(1, 500); |
dreamworker | 0:305237ecbbe5 | 30 | wait(0.5);//delay necessary to perform the action |
dreamworker | 0:305237ecbbe5 | 31 | setServoPulse(0, 1350); |
dreamworker | 0:305237ecbbe5 | 32 | setServoPulse(1, 1350); |
dreamworker | 0:305237ecbbe5 | 33 | wait(0.5); |
dreamworker | 0:305237ecbbe5 | 34 | setServoPulse(0,550); |
dreamworker | 0:305237ecbbe5 | 35 | setServoPulse(1, 2250); |
dreamworker | 0:305237ecbbe5 | 36 | wait(0.5); |
dreamworker | 0:305237ecbbe5 | 37 | setServoPulse(0, 2300); |
dreamworker | 0:305237ecbbe5 | 38 | wait(2); |
dreamworker | 0:305237ecbbe5 | 39 | for (int mov = 550; mov < 2300; mov++){ |
dreamworker | 0:305237ecbbe5 | 40 | setServoPulse(0, mov); |
dreamworker | 0:305237ecbbe5 | 41 | wait(0.001); |
dreamworker | 0:305237ecbbe5 | 42 | } |
dreamworker | 0:305237ecbbe5 | 43 | for (int mov = 500; mov < 2200; mov++){ |
dreamworker | 0:305237ecbbe5 | 44 | setServoPulse(1, mov); |
dreamworker | 0:305237ecbbe5 | 45 | wait(0.001); |
dreamworker | 0:305237ecbbe5 | 46 | } |
dreamworker | 0:305237ecbbe5 | 47 | } |
dreamworker | 0:305237ecbbe5 | 48 | } |