Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- RGB2.pde
- Cycles through the colors of a RGB LED
- Adapted from SparkFun Arduino Inventor's Kit CIRC-RGB
- */
- // LED leads connected to PWM pins
- const int RED_LED_PIN = 9;
- const int GREEN_LED_PIN = 10;
- const int BLUE_LED_PIN = 11;
- // for use by the colour balance controls
- int RED_MAX = 255;
- int GREEN_MAX = 255;
- int BLUE_MAX = 255;
- // Potentiometer for basic adjustment
- const byte POT_PIN = 0;
- // an array to hold the brightness values
- int vals[3] = {0,0,0};
- // Length of time we spend showing each color
- const int DISPLAY_TIME = 5; // In milliseconds
- //a general purpose counter
- int i;
- void setup() {
- // blank the leds to start
- showRGB(0,0,0);
- Serial.begin(115200); // for debugging
- }
- void loop() {
- // cycle through some patterns
- noFade(5);
- fadeAll(3);
- fadeOne(3);
- fadeTwo(3);
- fadeThree(3);
- //strobeOne(3600);
- }
- void strobeOne(int secs) {
- // strobe all the leds for a varying on time based on the pot position
- // all times apart from running time are in milliseconds
- int off_time = 67; // not used
- int on_time = 10;
- double long end_time = millis() + (secs * 1000);
- while (millis() < end_time) {
- analogWrite(RED_LED_PIN, 255);
- analogWrite(GREEN_LED_PIN, 255);
- analogWrite(BLUE_LED_PIN, 255);
- delay(on_time);
- analogWrite(RED_LED_PIN, 0);
- analogWrite(GREEN_LED_PIN, 0);
- analogWrite(BLUE_LED_PIN, 0);
- // getting the strobe timing from the pot
- delay(analogRead(POT_PIN));
- }
- }
- void noFade(int secs) {
- // All on full for the duration
- unsigned long end_time = millis() + secs * 1000;
- while (millis() < end_time) {
- showRGB(255,255,255);
- delay(10); // just because
- }
- }
- void fadeAll(int reps) {
- // fade all leds up and back down together 3 times
- for (int x=0;x<reps;x++) {
- for (i=0;i<255;i++) {
- showRGB(i,i,i);
- delay(DISPLAY_TIME);
- }
- for (i=255;i>-1;i--) {
- showRGB(i,i,i);
- delay(DISPLAY_TIME);
- }
- }
- }
- void fadeOne(int reps) {
- // fade up each colour in turn
- for (int x=0;x<reps;x++) {
- for (int led=0;led<3;led++) {
- for (i=0;i<255;i++) {
- vals[0] = i;
- vals[1] = 0;
- vals[2] = 0;
- showRGB(vals[led],vals[(led+1)%3],vals[(led+2)%3]);
- delay(DISPLAY_TIME);
- }
- for (i=255;i>-1;i--) {
- vals[0] = i;
- vals[1] = 0;
- vals[2] = 0;
- showRGB(vals[led],vals[(led+1)%3],vals[(led+2)%3]);
- delay(DISPLAY_TIME);
- }
- }
- }
- }
- void fadeTwo(int reps) {
- // now fade up 1 while fading down another
- for (int x=0;x<reps;x++) {
- for (int led=0;led<3;led++) {
- for (i=0;i<255;i++) {
- vals[0] = i;
- vals[1] = 255-i;
- vals[2] = 0;
- showRGB(vals[led],vals[(led+1)%3],vals[(led+2)%3]);
- // delay twice as long because we're doing 2 things at once
- delay(DISPLAY_TIME * 2);
- }
- }
- }
- }
- void fadeThree(int reps) {
- // same, but with the third led lit this time.
- for (int x=0;x<reps;x++) {
- for (int led=2;led>-1;led--) {
- for (i=0;i<255;i++) {
- vals[0] = i;
- vals[1] = 255-i;
- vals[2] = 255;
- showRGB(vals[led],vals[(led+1)%3],vals[(led+2)%3]);
- delay(DISPLAY_TIME * 2);
- }
- }
- }
- }
- void showRGB(byte red_value, byte green_value, byte blue_value) {
- //red_value = constrain(red_value,0,RED_MAX);
- //green_value = constrain(green_value,0,GREEN_MAX);
- //blue_value = constrain(blue_value,0,BLUE_MAX);
- // hacking a global brightness control in here for now
- int led_max = map(analogRead(POT_PIN), 0, 1023, 0, 255);
- RED_MAX = led_max;
- GREEN_MAX = led_max;
- BLUE_MAX = led_max;
- analogWrite(RED_LED_PIN, constrain(red_value,0,RED_MAX));
- analogWrite(GREEN_LED_PIN, constrain(green_value,0,GREEN_MAX));
- analogWrite(BLUE_LED_PIN, constrain(blue_value,0,BLUE_MAX));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement