#include #include // 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 pwm0 = Adafruit_PWMServoDriver(0x43); Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x42); Adafruit_PWMServoDriver pwm; #define REDLED 9 #define GREENLED 10 #define BLUELED 11 void setup() { Serial.begin(9600); Serial.println("RGB 7-segment LED display"); pwm0.begin(); pwm0.setPWMFreq(1600); // This is the maximum PWM frequency pinMode(REDLED, OUTPUT); pinMode(GREENLED, OUTPUT); pinMode(BLUELED, OUTPUT); for (uint8_t pwmnum = 0; pwmnum < 16; pwmnum++) { pwm0.setPin(pwmnum, 0, 0); } } void loop() { #define DELAY 500 #define MAX 11 // #define REDFACTOR 0.25f // #define GREENFACTOR 0.25f // #define BLUEFACTOR 0.75f #define LUMFACTOR 0.06125f #define REDFACTOR 1.f #define GREENFACTOR 0.5f #define BLUEFACTOR 0.5f byte red = (int)(LUMFACTOR * REDFACTOR * 255); byte green = (int)(LUMFACTOR * GREENFACTOR * 255); byte blue = (int)(LUMFACTOR * BLUEFACTOR * 255); Serial.print("red: "); Serial.print(red, DEC); Serial.print(", green: "); Serial.print(green, DEC); Serial.print(", blue: "); Serial.print(blue, DEC); Serial.println(); analogWrite(REDLED, red); Serial.print("R"); for (byte i = 0; i < MAX; i++) { setDigit(0, i); setDigit(1, i+1); Serial.print(i,DEC); delay(DELAY); } // digitalWrite(REDLED, 0); analogWrite(BLUELED, 0); Serial.print("b"); analogWrite(GREENLED, green); Serial.print("G"); for (byte i = 0; i < MAX; i++) { setDigit(0, i); setDigit(1, i-1); Serial.print(i,DEC); delay(DELAY); } // digitalWrite(GREENLED, 0); analogWrite(REDLED, 0); Serial.print("r"); analogWrite(BLUELED, blue); Serial.print("B"); for (byte i = 0; i < MAX; i++) { setDigit(0, i); setDigit(1, i); Serial.print(i,DEC); delay(DELAY); } // digitalWrite(BLUELED, 0); analogWrite(GREENLED, 0); Serial.println("g"); } void setDigit(byte digit, byte value) { if (value < 0 || value > 10) return; if (digit < 0 || digit > 3) return; byte pinBase = 0; if (digit == 1 || digit == 3) pinBase = 8; pwm = pwm0; if (digit > 1) pwm = pwm1; int on = 4095; int off = 0; switch (value) { case 0: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, on, 0); pwm.setPin(5 + pinBase, on, 0); pwm.setPin(6 + pinBase, off, 0); break; case 1: pwm.setPin(0 + pinBase, off, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, off, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, off, 0); pwm.setPin(6 + pinBase, off, 0); break; case 2: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, off, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, on, 0); pwm.setPin(5 + pinBase, off, 0); pwm.setPin(6 + pinBase, on, 0); break; case 3: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, off, 0); pwm.setPin(6 + pinBase, on, 0); break; case 4: pwm.setPin(0 + pinBase, off, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, off, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, on, 0); pwm.setPin(6 + pinBase, on, 0); break; case 5: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, off, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, on, 0); pwm.setPin(6 + pinBase, on, 0); break; case 6: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, off, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, on, 0); pwm.setPin(5 + pinBase, on, 0); pwm.setPin(6 + pinBase, on, 0); break; case 7: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, off, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, off, 0); pwm.setPin(6 + pinBase, off, 0); break; case 8: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, on, 0); pwm.setPin(5 + pinBase, on, 0); pwm.setPin(6 + pinBase, on, 0); break; case 9: pwm.setPin(0 + pinBase, on, 0); pwm.setPin(1 + pinBase, on, 0); pwm.setPin(2 + pinBase, on, 0); pwm.setPin(3 + pinBase, on, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, on, 0); pwm.setPin(6 + pinBase, on, 0); break; case 10: default: pwm.setPin(0 + pinBase, off, 0); pwm.setPin(1 + pinBase, off, 0); pwm.setPin(2 + pinBase, off, 0); pwm.setPin(3 + pinBase, off, 0); pwm.setPin(4 + pinBase, off, 0); pwm.setPin(5 + pinBase, off, 0); pwm.setPin(6 + pinBase, off, 0); break; } }