Advertisement
kartonman

sunrise to sunset original

Sep 8th, 2021
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.47 KB | None | 0 0
  1. /*
  2. Sunrise-Day-Sunset-Night sketch for RGB led type WS2811 with 'BRG' color.
  3. This is performed in a time lapse of 30 minutes or 11520 steps.
  4. Meanwhile the street lights are gradually switched On and Off.
  5. Modified by Philippe "Smitty" Desmyttere (March 2021). https://www.facebook.com/groups/926390087391995/user/1168034489
  6. This code is in public domain so feel free to use/modify it.
  7. */
  8.  
  9. //-----------------------------
  10. //----------LED DATA-----------
  11. #define FASTLED_INTERNAL
  12. #include <FastLED.h>
  13. #include <Wire.h>
  14.  
  15.  
  16. #define NUM_LEDS 3 // NUMBER OF PIXELS IN THE USED STRIP
  17. #define DATA_PIN 6
  18.  
  19. uint16_t currentPixel = 0; // SET TO PIXEL NUMBER 0
  20. uint16_t led = 0;
  21.  
  22. int STREET_LED = 9; // THE PIN THAT THE STREET LEDs ARE ATTACHED TO
  23. int STREET_LED2 = 10; // THE PIN THAT THE STREET LEDs ARE ATTACHED TO
  24. int brightness_STREET = 0; // BRIGHTNESS OF THJE STREET LEDs AT STARTUP
  25. int fadeAmount = 1; // KeeP THIS AMOUNT UNDER 5 FOR A NICE FADING OF THE STREET LEDs
  26.  
  27.  
  28.  
  29. //-----------------------------
  30. //-----------TIMING------------
  31.  
  32. unsigned long currentMillis = 0;
  33. unsigned long previousMillis = 0;
  34.  
  35. unsigned long speedOfNightToMorning = 1800; // DURATION IN STEPS OF nightDayCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  36. unsigned long speedOfMorningToNoon = 3600; // DURATION IN STEPS OF dayNoonCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  37. unsigned long speedOfNoonToEvening = 4320; // DURATION IN STEPS OF noonEveningCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  38. unsigned long speedOfEveningToNight = 1800; // DURATION IN STEPS OF eveningNightCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  39.  
  40. //_____________________________
  41. //---------TEST TIMING---------
  42. //unsigned long speedOfNightToMorning = 100;//1800; // DURATION IN STEPS OF nightDayCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  43. //unsigned long speedOfMorningToNoon = 100;//3600; // DURATION IN STEPS OF dayNoonCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  44. //unsigned long speedOfNoonToEvening = 100;//4320; // DURATION IN STEPS OF noonEveningCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  45. //unsigned long speedOfEveningToNight = 100;//1800; // DURATION IN STEPS OF eveningNightCycle ROUTINE - 6steps/second (1 minute = 360 steps)
  46.  
  47. unsigned long timeBaseInterval = speedOfEveningToNight + speedOfNightToMorning; // TIMEBASE FOR THE EVENING + NIGHT CYCLE
  48. unsigned long time_Now = 0;
  49.  
  50. byte maxBrightness = 150; // VALUES FROM 0 - 255 -> THE HIGHER, THE MORE Amps NEEDED - FOR THE LED STRIPS
  51.  
  52. static const float intervalNightToMorning = speedOfNightToMorning; // STEPS PER MILLISECONDS
  53. static const float intervalMorningToNoon = speedOfMorningToNoon;
  54. static const float intervalNoonToEvening = speedOfNoonToEvening;
  55. static const float intervalEveningToNight = speedOfEveningToNight;
  56.  
  57. //-----------------------------
  58. //----------PALETTES-----------
  59.  
  60. DEFINE_GRADIENT_PALETTE (Night_To_Morning_gp) { // NIGHT TO MORNING PALETTE (nightDayCycle)
  61. 0, 0,51,102, //Dark Midnight Blue
  62. 64, 0,35,71, //Oxford Blue
  63. 102, 0, 0, 0, //Rich Black
  64. 153, 0, 0, 0, //Rich Black
  65. 191,0,35,71, //Oxford Blue
  66. 255,0,51,102, //Dark Midnight Blue
  67. };
  68.  
  69. DEFINE_GRADIENT_PALETTE (Morning_To_Noon_gp) { // MORNING TO NOON PALETTE (dayNoonCycle)
  70. 0,0,63,125, //Dark Cerulean Blue
  71. 36,45,45,45, //Charleston Green
  72. 85,34,34,34, //Raisin Black
  73. 167,0,69,84, //Midnight Green
  74. 255,255,142,0, //Dark Orange
  75. };
  76.  
  77. DEFINE_GRADIENT_PALETTE (Noon_To_Evening_gp) { // NIGHT TO DAY PALETTE (noonEveningCycle)
  78. 0,253,119,2, //Heat Wave Orange
  79. 90,255,80,3, //Aerospace International Orange
  80. 100, 50, 50, 200, //Daylight
  81. 155, 50, 50, 200, //Daylight
  82. 175, 255,80,3, //Aerospace International Orange
  83. 255, 253,119,2, //Heat Wave Orange
  84. };
  85.  
  86. DEFINE_GRADIENT_PALETTE (Evening_To_Night_gp) { // DAY TO NIGHT PALETTE (eveningNightCycle)
  87. 0, 255,142,0, //Dark Orange
  88. 36, 0,69,84, //Midnight Green
  89. 85, 34,34,34, //Raisin Black
  90. 167, 45,45,45, //Charleston Green
  91. 255, 0,63,125, //Dark Cerulean Blue
  92.  
  93. };
  94.  
  95. CRGBPalette16 myPal1 = Night_To_Morning_gp; // CREATING PALETTE OBJECTS AS MANY AS THERE ARE PALETTES IN USE
  96. CRGBPalette16 myPal2 = Morning_To_Noon_gp;
  97. CRGBPalette16 myPal3 = Noon_To_Evening_gp;
  98. CRGBPalette16 myPal4 = Evening_To_Night_gp;
  99.  
  100. struct CRGB leds[NUM_LEDS]; // DEFINE OBJECT OF LEDS
  101. static uint8_t paletteIndex = 0; // CURRENT GRADIENT PALETTE COLOUR
  102.  
  103. //------------------------------
  104. //------------SETUP-------------
  105.  
  106. void setup() {
  107. Serial.begin(9600);
  108. FastLED.addLeds<WS2811, DATA_PIN, BRG>(leds, NUM_LEDS); // BRG SEQUENCE IN PLACE OF RGB FOR MY STRIP
  109.  
  110. pinMode(STREET_LED, OUTPUT);
  111.  
  112. }
  113.  
  114. //-----------------------------
  115. //------------LOOP-------------
  116.  
  117. void loop() {
  118.  
  119. eveningNightCycle();
  120. nightDayCycle();
  121. dayNoonCycle();
  122. noonEveningCycle();
  123.  
  124. FastLED.show();
  125.  
  126. currentMillis = millis(); // capture the latest value of millis()
  127. // this is equivalent to noting the time from a clock
  128. // use the same time for all LED flashes to keep them synchronized
  129. if(millis() >= time_Now + timeBaseInterval)
  130. {
  131. time_Now += timeBaseInterval;
  132. streetLightFading();
  133. }
  134. }
  135.  
  136. //------------------------------
  137. //-----DAY TO NIGHT CYCLES------
  138.  
  139. void nightDayCycle()
  140. {
  141. CRGB colour = ColorFromPalette(myPal1, paletteIndex, maxBrightness, LINEARBLEND); // OR EVENTUALLY A BUILT-IN PALETTE
  142. fill_solid(leds, NUM_LEDS, colour); // LIGHT THE WHOLE STRIP WITH THE COLOUR GRABBED FROM THE PALETTE
  143.  
  144.  
  145.  
  146. EVERY_N_MILLISECONDS(intervalNightToMorning) { // TRAVERSE THE COMPLETE PALETTE
  147. if (paletteIndex < 255) { // see https://github.com/FastLED/FastLED/issues/515#issuecomment-340627525
  148. paletteIndex++;
  149. }
  150. if (paletteIndex == 255) {
  151. paletteIndex = 0;
  152. }
  153. }
  154. Serial.println(colour); // MAY BE REMOVED AFTER TESTING
  155. }
  156.  
  157. void dayNoonCycle()
  158. {
  159. CRGB colour = ColorFromPalette(myPal2, paletteIndex, maxBrightness, LINEARBLEND);
  160. fill_solid(leds, NUM_LEDS, colour);
  161.  
  162.  
  163.  
  164. EVERY_N_MILLISECONDS(intervalMorningToNoon) {
  165. if (paletteIndex < 255) {
  166. paletteIndex++;
  167. }
  168. if (paletteIndex == 255) {
  169. paletteIndex = 0;
  170. }
  171. }
  172. Serial.println(colour); // MAY BE REMOVED AFTER TESTING
  173. }
  174.  
  175. void noonEveningCycle()
  176. {
  177. CRGB colour = ColorFromPalette(myPal3, paletteIndex, maxBrightness, LINEARBLEND);
  178. fill_solid(leds, NUM_LEDS, colour);
  179.  
  180.  
  181.  
  182. EVERY_N_MILLISECONDS(intervalNoonToEvening) {
  183. if (paletteIndex < 255) {
  184. paletteIndex++;
  185. }
  186. if (paletteIndex == 255) {
  187. paletteIndex = 0;
  188. }
  189. }
  190. Serial.println(colour); // MAY BE REMOVED AFTER TESTING
  191. }
  192.  
  193. void eveningNightCycle()
  194. {
  195. CRGB colour = ColorFromPalette(myPal4, paletteIndex, maxBrightness, LINEARBLEND);
  196. fill_solid(leds, NUM_LEDS, colour);
  197.  
  198.  
  199.  
  200. EVERY_N_MILLISECONDS(intervalEveningToNight) {
  201. if (paletteIndex < 255) {
  202. paletteIndex++;
  203. }
  204. if (paletteIndex == 255) {
  205. paletteIndex = 0;
  206. }
  207. }
  208. Serial.println(colour); // MAY BE REMOVED AFTER TESTING
  209. }
  210.  
  211. //------------------------------
  212. //--------FADING LIGHTS---------
  213.  
  214. void streetLightFading()
  215. {
  216. if (currentMillis - previousMillis >= timeBaseInterval)
  217. analogWrite(STREET_LED, brightness_STREET);
  218. analogWrite(STREET_LED2, brightness_STREET);
  219. brightness_STREET = brightness_STREET + fadeAmount;
  220. if (brightness_STREET <= 0 || brightness_STREET >= 255) {
  221. fadeAmount = -fadeAmount ;
  222. }
  223.  
  224. delayMicroseconds(timeBaseInterval); //waits for "timeBaseInterval" to see the fading effect
  225. // As of Arduino 0018, delayMicroseconds() no longer disables interrupts.
  226.  
  227. }
  228.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement