Advertisement
Guest User

Untitled

a guest
Nov 30th, 2014
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.01 KB | None | 0 0
  1. /*
  2. Christmas 2014 LED dot matrix on balcony.
  3. This sketch controls 50 RGB LEDs controlled by WS28x1
  4. and displays digit 1-31.
  5.  
  6. May 2014 - rediculum
  7. */
  8.  
  9. // Libs
  10. #include <avr/pgmspace.h>
  11. #include "FastLED.h"
  12. #include <Wire.h>
  13. #include <RealTimeClockDS1307.h>
  14. #include "BitBool.h"
  15. #include "XMas14_RGB.h"
  16.  
  17. // Pin outs
  18. /*
  19. RTC SDA = A4
  20. RTC SCL = A5   */
  21. #define DATA_PIN 3
  22. //#define CLOCK_PIN 13
  23.  
  24. // Define the array of leds and var declarations
  25. #define NUM_LEDS 50 // Change also in BitBool
  26. #define DURATION 30000 // Duration of an animation (except fading)
  27. byte today, arrSize, arrElement, indicator;
  28. unsigned long endtime;
  29. CRGB leds[NUM_LEDS];
  30.  
  31. void setup() {
  32.   Serial.begin(9600);
  33.   Serial.println(F("XMas14 RGB Lights"));
  34.  
  35.   //FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
  36.   FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
  37.  
  38.   Serial.print(F("Test run"));
  39.   for (byte i = 0; i < 50; i++) {  
  40.     leds[i]= CHSV(64,64,64);
  41.     FastLED.show();
  42.     delay(50);
  43.   }
  44.   delay(3000);
  45.   for (byte i = 0; i < 50; i++) {  
  46.     leds[i]= CHSV(0,0,0);
  47.     FastLED.show();
  48.     delay(50);
  49.   }
  50.  
  51.  
  52.   indicator = 0;
  53. }
  54.  
  55. void loop() {
  56.   // Read day from RTC
  57.   RTC.readClock();
  58.   today = RTC.getDay();
  59.   //today = 24;
  60.   //for (today = 10; today < 32; today++) {
  61.  
  62.   // Count amount of bits (1) in matrix for that row (today) and define the array size
  63.   arrSize = 0;
  64.   for (byte i = 0; i < 50; i++) {
  65.     leds[i].maximizeBrightness();
  66.     if (matrix[today][i] == 1) {
  67.       arrSize++;
  68.     }  
  69.   }
  70.   byte numArray[arrSize];
  71.  
  72.   Serial.print(F("Displaying number: "));
  73.   Serial.print(today);    
  74.   Serial.print(F(" (array size "));
  75.   Serial.print(arrSize);
  76.   Serial.println(F(")"));
  77.  
  78.   // Fill the LED number into the defined array.
  79.   // Array element 0 is LED 1, element 49 is LED 50, and so on!
  80.   Serial.print(F("LEDS: "));
  81.   arrElement = 0;
  82.   for (byte i = 0; i < NUM_LEDS; i++) {
  83.     if (matrix[today][i] == 1) {
  84.       numArray[arrElement] = i;
  85.       Serial.print(numArray[arrElement]); Serial.print(F(" "));
  86.       arrElement++;
  87.     }
  88.   }
  89.   Serial.println(F(""));Serial.println(F("---------------------")); // Separator
  90.  
  91.   delay(100);FastLED.clear();delay(100);
  92.  
  93.   // Light up randomly one LED light blue (Aqua)
  94.   Serial.print(F("Light up dots ... "));
  95.   endtime = millis() + DURATION;
  96.   while (millis() < endtime) {
  97.     byte led = random(0,NUM_LEDS - 1);
  98.     fadeOutColour(led,0,128);
  99.     delay(random(1,500));
  100.   }
  101.   Serial.println(F(" done"));
  102.  
  103.   delay(100);FastLED.clear();delay(100);
  104.      
  105.   Serial.print(F("Fade in ... "));
  106.   // Fade in new number with random colours
  107.   for (byte i = 0; i < arrSize; i++) {
  108.     //Serial.print(numArray[i]); Serial.print(F(" "));
  109.     fadeInColour(numArray[i],random(0,255));
  110.     delay(3);
  111.   }
  112.   Serial.println(F(" done"));    
  113.  
  114.   delay(DURATION);
  115.  
  116.  
  117.   // Randomly change color of a single LED
  118.   Serial.print(F("Random Color change ... "));
  119.   endtime = millis() + DURATION;
  120.   while (millis() < endtime) {
  121.     setColour(numArray[random(0,arrSize)],random8());
  122.     FastLED.show();
  123.     delay(100);
  124.   }
  125.   Serial.println(F(" done"));
  126.  
  127.   // Rainbow single LEDs
  128.   Serial.print(F("Rainbow single .."));
  129.   byte divider = 255 / arrSize;
  130.   endtime = millis() + DURATION;
  131.   while (millis() < endtime) {
  132.     for (byte led = 0; led < arrSize; led++) {
  133.       leds[numArray[led]] = CHSV((indicator * divider),255,255);
  134.       indicator++;
  135.     }
  136.     FastLED.show();
  137.     delay(100);
  138.   }
  139.   Serial.println(F(" done"));
  140.  
  141.   // Rainbow with all LEDs at once
  142.   Serial.print(F("Rainbow all ..."));
  143.   endtime = millis() + DURATION;
  144.   while (millis() < endtime) {
  145.     for (byte color = 0; color < 255; color++) {
  146.       for (byte led = 0; led < arrSize; led++) {
  147.         setColour(numArray[led],color);
  148.       }
  149.       FastLED.show();
  150.       delay(100);
  151.     }
  152.   }
  153.   Serial.println(F(" done"));
  154.  
  155.   Serial.print(F("Fade out ... "));
  156.   // Fade out bright
  157.   for (byte i = 0; i < arrSize; i++) {
  158.     //Serial.print(numArray[i]); Serial.print(F(" "));
  159.     fadeOutColour(numArray[i],128,255);
  160.     delay(3);
  161.   }
  162.   Serial.println(F(" done"));    
  163.  
  164.  
  165.   Serial.println(F(""));Serial.println(F("End of loop"));Serial.println(F(""));
  166.  
  167.   if (millis() > 4294000000) {
  168.     asm volatile ("  jmp 0"); // Soft Reset after 49 days
  169.   }
  170.   //}
  171. }
  172.  
  173.  
  174. //================================================================================================
  175.  
  176.  
  177.  
  178. // Fades in one LED in by a given colour 0-255)
  179. void fadeInColour(byte led, byte hue){
  180.   for (byte i = 0; i < 255; i++) {
  181.     leds[led] = CHSV(hue,255,i);
  182.     FastLED.show();
  183.     delayMicroseconds(300);
  184.   }
  185. }
  186.  
  187. // Fades out one LED in by a given colour 0-255)
  188. void fadeOutColour(byte led, byte sat, byte hue){
  189.   for (byte i = 255; i > 0; i--) {
  190.     leds[led] = CHSV(hue,sat,i);
  191.     FastLED.show();    
  192.     delayMicroseconds(300);
  193.   }
  194. }
  195.  
  196. // Sets one LED to a specified colour.
  197. // Does not invoke FastLED.show()!
  198. void setColour(byte led, byte hue) {
  199.   leds[led] = CHSV(hue,255,255);
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement