I2C driver for the NXP chip PCA9685 16xPWM LED controller A total of 4 RGBA LEDs can be controlled by 1 chip giving a RGBA value in the form of: rgba(0-255,0-255,0-255,0-100) then dimmed by 0-100%
main.cpp@0:62c7c3514d8f, 2012-06-15 (annotated)
- Committer:
- Bas
- Date:
- Fri Jun 15 23:30:43 2012 +0000
- Revision:
- 0:62c7c3514d8f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Bas | 0:62c7c3514d8f | 1 | #include "mbed.h" |
Bas | 0:62c7c3514d8f | 2 | #include "i2c.h" |
Bas | 0:62c7c3514d8f | 3 | #include "pca9685_reg.h" |
Bas | 0:62c7c3514d8f | 4 | |
Bas | 0:62c7c3514d8f | 5 | DigitalOut myled(LED1); |
Bas | 0:62c7c3514d8f | 6 | Serial pc(USBTX, USBRX); |
Bas | 0:62c7c3514d8f | 7 | AnalogIn mypot(p20); |
Bas | 0:62c7c3514d8f | 8 | |
Bas | 0:62c7c3514d8f | 9 | int main() { |
Bas | 0:62c7c3514d8f | 10 | |
Bas | 0:62c7c3514d8f | 11 | |
Bas | 0:62c7c3514d8f | 12 | unsigned char level; |
Bas | 0:62c7c3514d8f | 13 | unsigned char rgba_color[4]; |
Bas | 0:62c7c3514d8f | 14 | |
Bas | 0:62c7c3514d8f | 15 | i2c_probe(); |
Bas | 0:62c7c3514d8f | 16 | init_pca9685(LEDDRV1); |
Bas | 0:62c7c3514d8f | 17 | |
Bas | 0:62c7c3514d8f | 18 | rgba_color[0]=0xff; //red (0-255) |
Bas | 0:62c7c3514d8f | 19 | rgba_color[1]=0x00; //green (0-255) |
Bas | 0:62c7c3514d8f | 20 | rgba_color[2]=0x00; //blue (0-255) |
Bas | 0:62c7c3514d8f | 21 | rgba_color[3]=100; //amber (0-100) (0.00-1.00) |
Bas | 0:62c7c3514d8f | 22 | |
Bas | 0:62c7c3514d8f | 23 | while (1) { |
Bas | 0:62c7c3514d8f | 24 | level=mypot*100; |
Bas | 0:62c7c3514d8f | 25 | printf("level: %d\r\n",level); |
Bas | 0:62c7c3514d8f | 26 | pca9685_rgba_led(LEDDRV1,RGBA_LED1,rgba_color,level); |
Bas | 0:62c7c3514d8f | 27 | //channel_light(0,r*level/0xff); |
Bas | 0:62c7c3514d8f | 28 | //channel_light(1,g*level/0xff); |
Bas | 0:62c7c3514d8f | 29 | //channel_light(2,b*level/0xff); |
Bas | 0:62c7c3514d8f | 30 | |
Bas | 0:62c7c3514d8f | 31 | } |
Bas | 0:62c7c3514d8f | 32 | } |
Bas | 0:62c7c3514d8f | 33 | |
Bas | 0:62c7c3514d8f | 34 | /* void loop() { |
Bas | 0:62c7c3514d8f | 35 | int r, g, b; |
Bas | 0:62c7c3514d8f | 36 | |
Bas | 0:62c7c3514d8f | 37 | // fade from blue to violet |
Bas | 0:62c7c3514d8f | 38 | for (r = 0; r < 256; r++) { |
Bas | 0:62c7c3514d8f | 39 | analogWrite(REDPIN, r); |
Bas | 0:62c7c3514d8f | 40 | delay(FADESPEED); |
Bas | 0:62c7c3514d8f | 41 | } |
Bas | 0:62c7c3514d8f | 42 | // fade from violet to red |
Bas | 0:62c7c3514d8f | 43 | for (b = 255; b > 0; b--) { |
Bas | 0:62c7c3514d8f | 44 | analogWrite(BLUEPIN, b); |
Bas | 0:62c7c3514d8f | 45 | delay(FADESPEED); |
Bas | 0:62c7c3514d8f | 46 | } |
Bas | 0:62c7c3514d8f | 47 | // fade from red to yellow |
Bas | 0:62c7c3514d8f | 48 | for (g = 0; g < 256; g++) { |
Bas | 0:62c7c3514d8f | 49 | analogWrite(GREENPIN, g); |
Bas | 0:62c7c3514d8f | 50 | delay(FADESPEED); |
Bas | 0:62c7c3514d8f | 51 | } |
Bas | 0:62c7c3514d8f | 52 | // fade from yellow to green |
Bas | 0:62c7c3514d8f | 53 | for (r = 255; r > 0; r--) { |
Bas | 0:62c7c3514d8f | 54 | analogWrite(REDPIN, r); |
Bas | 0:62c7c3514d8f | 55 | delay(FADESPEED); |
Bas | 0:62c7c3514d8f | 56 | } |
Bas | 0:62c7c3514d8f | 57 | // fade from green to teal |
Bas | 0:62c7c3514d8f | 58 | for (b = 0; b < 256; b++) { |
Bas | 0:62c7c3514d8f | 59 | analogWrite(BLUEPIN, b); |
Bas | 0:62c7c3514d8f | 60 | delay(FADESPEED); |
Bas | 0:62c7c3514d8f | 61 | } |
Bas | 0:62c7c3514d8f | 62 | // fade from teal to blue |
Bas | 0:62c7c3514d8f | 63 | for (g = 255; g > 0; g--) { |
Bas | 0:62c7c3514d8f | 64 | analogWrite(GREENPIN, g); |
Bas | 0:62c7c3514d8f | 65 | delay(FADESPEED); |
Bas | 0:62c7c3514d8f | 66 | } |
Bas | 0:62c7c3514d8f | 67 | } |
Bas | 0:62c7c3514d8f | 68 | -------------------------------------------------------------------------------- |
Bas | 0:62c7c3514d8f | 69 | */ |