Guest User

Untitled

a guest
Sep 20th, 2020
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.03 KB | None | 0 0
  1. /* FastLED RGBW Example Sketch
  2. *
  3. * Example sketch using FastLED for RGBW strips (SK6812). Includes
  4. * color wipes and rainbow pattern.
  5. *
  6. * Written by David Madison
  7. * http://partsnotincluded.com
  8. */
  9.  
  10. #include "FastLED.h"
  11. #include "FastLED_RGBW.h"
  12. #include <EEPROM.h>
  13.  
  14. #define NUM_LEDS 300
  15. #define DATA_PIN 6
  16.  
  17. CRGBW leds[NUM_LEDS];
  18.  
  19. CRGB *ledsRGB = (CRGB *) &leds[0];
  20.  
  21. const uint8_t brightness = 128;
  22. #define BUTTON 2
  23. byte selectedEffect=0;
  24.  
  25. void setup() {
  26. FastLED.addLeds<WS2812B, DATA_PIN, RGB>(ledsRGB, getRGBWsize(NUM_LEDS));
  27. FastLED.setBrightness(brightness);
  28. FastLED.show();
  29. pinMode(2,INPUT_PULLUP); // internal pull-up resistor
  30. attachInterrupt (digitalPinToInterrupt (BUTTON), changeEffect, CHANGE); // pressed
  31. digitalWrite(2, HIGH); // turn on pullup resistors
  32. delay(50); // little 100ms delay before attaching the interrupt for the button
  33. }
  34.  
  35. // *** REPLACE FROM HERE ***
  36. void loop() {
  37. EEPROM.get(0,selectedEffect);
  38.  
  39. if(selectedEffect>9) {
  40. selectedEffect=0;
  41. EEPROM.put(0,0);
  42. }
  43.  
  44. switch(selectedEffect) {
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51. case 1 : {
  52. // NewKITT - Color (red, green, blue), eye size, speed delay, end pause
  53. NewKITT(0x09, 0x00, 0xff, 8, 10, 50);
  54. break;
  55. }
  56.  
  57. case 2 : {
  58. // Twinkle - Color (red, green, blue), count, speed delay, only one twinkle (true/false)
  59. RunningLights(0xbf,0x65,0x1d, 50);
  60. break;
  61. }
  62.  
  63.  
  64.  
  65. case 3 : {
  66. // Sparkle - Color (red, green, blue), speed delay
  67. Sparkle(0xff, 0x00, 0xff, 0);
  68. break;
  69. }
  70.  
  71. case 4 : {
  72. // SnowSparkle - Color (red, green, blue), sparkle delay, speed delay
  73. SnowSparkle(0x38, 0x00, 0x33, 20, random(100,1000));
  74. break;
  75. }
  76.  
  77.  
  78.  
  79. case 5 : {
  80. // rainbowCycle - speed delay
  81. rainbowCycle(20);
  82. break;
  83. }
  84.  
  85.  
  86.  
  87. case 6 : {
  88. // theaterChaseRainbow - Speed delay
  89. theaterChaseRainbow(50);
  90. break;
  91. }
  92.  
  93. case 7 : {
  94. // Fire - Cooling rate, Sparking rate, speed delay
  95. Fire(55,120,15);
  96. break;
  97. }
  98.  
  99.  
  100. // simple bouncingBalls not included, since BouncingColoredBalls can perform this as well as shown below
  101. // BouncingColoredBalls - Number of balls, color (red, green, blue) array, continuous
  102. // CAUTION: If set to continuous then this effect will never stop!!!
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. }
  110. }
  111.  
  112. void changeEffect() {
  113. if (digitalRead (BUTTON) == HIGH) {
  114. selectedEffect++;
  115. EEPROM.put(0, selectedEffect);
  116. asm volatile (" jmp 0");
  117. }
  118. }
  119.  
  120.  
  121. // *************************
  122. // ** LEDEffect Functions **
  123. // *************************
  124.  
  125.  
  126.  
  127.  
  128. void NewKITT(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay){
  129. RightToLeft(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  130. LeftToRight(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  131. OutsideToCenter(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  132. CenterToOutside(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  133. LeftToRight(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  134. RightToLeft(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  135. OutsideToCenter(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  136. CenterToOutside(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);
  137. }
  138.  
  139. // used by NewKITT
  140. void CenterToOutside(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  141. for(int i =((NUM_LEDS-EyeSize)/2); i>=0; i--) {
  142. setAll(0,0,0);
  143.  
  144. setPixel(i, red/10, green/10, blue/10);
  145. for(int j = 1; j <= EyeSize; j++) {
  146. setPixel(i+j, red, green, blue);
  147. }
  148. setPixel(i+EyeSize+1, red/10, green/10, blue/10);
  149.  
  150. setPixel(NUM_LEDS-i, red/10, green/10, blue/10);
  151. for(int j = 1; j <= EyeSize; j++) {
  152. setPixel(NUM_LEDS-i-j, red, green, blue);
  153. }
  154. setPixel(NUM_LEDS-i-EyeSize-1, red/10, green/10, blue/10);
  155.  
  156. showStrip();
  157. delay(SpeedDelay);
  158. }
  159. delay(ReturnDelay);
  160. }
  161.  
  162. // used by NewKITT
  163. void OutsideToCenter(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  164. for(int i = 0; i<=((NUM_LEDS-EyeSize)/2); i++) {
  165. setAll(0,0,0);
  166.  
  167. setPixel(i, red/10, green/10, blue/10);
  168. for(int j = 1; j <= EyeSize; j++) {
  169. setPixel(i+j, red, green, blue);
  170. }
  171. setPixel(i+EyeSize+1, red/10, green/10, blue/10);
  172.  
  173. setPixel(NUM_LEDS-i, red/10, green/10, blue/10);
  174. for(int j = 1; j <= EyeSize; j++) {
  175. setPixel(NUM_LEDS-i-j, red, green, blue);
  176. }
  177. setPixel(NUM_LEDS-i-EyeSize-1, red/10, green/10, blue/10);
  178.  
  179. showStrip();
  180. delay(SpeedDelay);
  181. }
  182. delay(ReturnDelay);
  183. }
  184.  
  185. // used by NewKITT
  186. void LeftToRight(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  187. for(int i = 0; i < NUM_LEDS-EyeSize-2; i++) {
  188. setAll(0,0,0);
  189. setPixel(i, red/10, green/10, blue/10);
  190. for(int j = 1; j <= EyeSize; j++) {
  191. setPixel(i+j, red, green, blue);
  192. }
  193. setPixel(i+EyeSize+1, red/10, green/10, blue/10);
  194. showStrip();
  195. delay(SpeedDelay);
  196. }
  197. delay(ReturnDelay);
  198. }
  199.  
  200. // used by NewKITT
  201. void RightToLeft(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  202. for(int i = NUM_LEDS-EyeSize-2; i > 0; i--) {
  203. setAll(0,0,0);
  204. setPixel(i, red/10, green/10, blue/10);
  205. for(int j = 1; j <= EyeSize; j++) {
  206. setPixel(i+j, red, green, blue);
  207. }
  208. setPixel(i+EyeSize+1, red/10, green/10, blue/10);
  209. showStrip();
  210. delay(SpeedDelay);
  211. }
  212. delay(ReturnDelay);
  213. }
  214.  
  215. void Twinkle(byte red, byte green, byte blue, int Count, int SpeedDelay, boolean OnlyOne) {
  216. setAll(0,0,0);
  217.  
  218. for (int i=0; i<Count; i++) {
  219. setPixel(random(NUM_LEDS),red,green,blue);
  220. showStrip();
  221. delay(SpeedDelay);
  222. if(OnlyOne) {
  223. setAll(0,0,0);
  224. }
  225. }
  226.  
  227. delay(SpeedDelay);
  228. }
  229.  
  230.  
  231. void Sparkle(byte red, byte green, byte blue, int SpeedDelay) {
  232. int Pixel = random(NUM_LEDS);
  233. setPixel(Pixel,red,green,blue);
  234. showStrip();
  235. delay(SpeedDelay);
  236. setPixel(Pixel,0,0,0);
  237. }
  238.  
  239. void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {
  240. setAll(red,green,blue);
  241.  
  242. int Pixel = random(NUM_LEDS);
  243. setPixel(Pixel,0xff,0xff,0xff);
  244. showStrip();
  245. delay(SparkleDelay);
  246. setPixel(Pixel,red,green,blue);
  247. showStrip();
  248. delay(SpeedDelay);
  249. }
  250.  
  251. void RunningLights(byte red, byte green, byte blue, int WaveDelay) {
  252. int Position=0;
  253.  
  254. for(int i=0; i<NUM_LEDS*2; i++)
  255. {
  256. Position++; // = 0; //Position + Rate;
  257. for(int i=0; i<NUM_LEDS; i++) {
  258. // sine wave, 3 offset waves make a rainbow!
  259. //float level = sin(i+Position) * 127 + 128;
  260. //setPixel(i,level,0,0);
  261. //float level = sin(i+Position) * 127 + 128;
  262. setPixel(i,((sin(i+Position) * 127 + 128)/255)*red,
  263. ((sin(i+Position) * 127 + 128)/255)*green,
  264. ((sin(i+Position) * 127 + 128)/255)*blue);
  265. }
  266.  
  267. showStrip();
  268. delay(WaveDelay);
  269. }
  270. }
  271.  
  272.  
  273.  
  274. void rainbowCycle(int SpeedDelay) {
  275. byte *c;
  276. uint16_t i, j;
  277.  
  278. for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
  279. for(i=0; i< NUM_LEDS; i++) {
  280. c=Wheel(((i * 256 / NUM_LEDS) + j) & 255);
  281. setPixel(i, *c, *(c+1), *(c+2));
  282. }
  283. showStrip();
  284. delay(SpeedDelay);
  285. }
  286. }
  287.  
  288. // used by rainbowCycle and theaterChaseRainbow
  289. byte * Wheel(byte WheelPos) {
  290. static byte c[3];
  291.  
  292. if(WheelPos < 85) {
  293. c[0]=WheelPos * 3;
  294. c[1]=255 - WheelPos * 3;
  295. c[2]=0;
  296. } else if(WheelPos < 170) {
  297. WheelPos -= 85;
  298. c[0]=255 - WheelPos * 3;
  299. c[1]=0;
  300. c[2]=WheelPos * 3;
  301. } else {
  302. WheelPos -= 170;
  303. c[0]=0;
  304. c[1]=WheelPos * 3;
  305. c[2]=255 - WheelPos * 3;
  306. }
  307.  
  308. return c;
  309. }
  310.  
  311.  
  312.  
  313. void theaterChaseRainbow(int SpeedDelay) {
  314. byte *c;
  315.  
  316. for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel
  317. for (int q=0; q < 3; q++) {
  318. for (int i=0; i < NUM_LEDS; i=i+3) {
  319. c = Wheel( (i+j) % 255);
  320. setPixel(i+q, *c, *(c+1), *(c+2)); //turn every third pixel on
  321. }
  322. showStrip();
  323.  
  324. delay(SpeedDelay);
  325.  
  326. for (int i=0; i < NUM_LEDS; i=i+3) {
  327. setPixel(i+q, 0,0,0); //turn every third pixel off
  328. }
  329. }
  330. }
  331. }
  332.  
  333. void Fire(int Cooling, int Sparking, int SpeedDelay) {
  334. static byte heat[NUM_LEDS];
  335. int cooldown;
  336.  
  337. // Step 1. Cool down every cell a little
  338. for( int i = 0; i < NUM_LEDS; i++) {
  339. cooldown = random(0, ((Cooling * 10) / NUM_LEDS) + 2);
  340.  
  341. if(cooldown>heat[i]) {
  342. heat[i]=0;
  343. } else {
  344. heat[i]=heat[i]-cooldown;
  345. }
  346. }
  347.  
  348. // Step 2. Heat from each cell drifts 'up' and diffuses a little
  349. for( int k= NUM_LEDS - 1; k >= 2; k--) {
  350. heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;
  351. }
  352.  
  353. // Step 3. Randomly ignite new 'sparks' near the bottom
  354. if( random(255) < Sparking ) {
  355. int y = random(7);
  356. heat[y] = heat[y] + random(160,255);
  357. //heat[y] = random(160,255);
  358. }
  359.  
  360. // Step 4. Convert heat to LED colors
  361. for( int j = 0; j < NUM_LEDS; j++) {
  362. setPixelHeatColor(j, heat[j] );
  363. }
  364.  
  365. showStrip();
  366. delay(SpeedDelay);
  367. }
  368.  
  369. void setPixelHeatColor (int Pixel, byte temperature) {
  370. // Scale 'heat' down from 0-255 to 0-191
  371. byte t192 = round((temperature/255.0)*191);
  372.  
  373. // calculate ramp up from
  374. byte heatramp = t192 & 0x3F; // 0..63
  375. heatramp <<= 2; // scale up to 0..252
  376.  
  377. // figure out which third of the spectrum we're in:
  378. if( t192 > 0x80) { // hottest
  379. setPixel(Pixel, 255, 255, heatramp);
  380. } else if( t192 > 0x40 ) { // middle
  381. setPixel(Pixel, 255, heatramp, 0);
  382. } else { // coolest
  383. setPixel(Pixel, heatramp, 0, 0);
  384. }
  385. }
  386.  
  387.  
  388.  
  389.  
  390.  
  391. // *** REPLACE TO HERE ***
  392.  
  393.  
  394.  
  395. // ***************************************
  396. // ** FastLed/NeoPixel Common Functions **
  397. // ***************************************
  398.  
  399. // Apply LED color changes
  400. void showStrip() {
  401. #ifdef ADAFRUIT_NEOPIXEL_H
  402. // NeoPixel
  403. strip.show();
  404. #endif
  405. #ifndef ADAFRUIT_NEOPIXEL_H
  406. // FastLED
  407. FastLED.show();
  408. #endif
  409. }
  410.  
  411. // Set a LED color (not yet visible)
  412. void setPixel(int Pixel, byte red, byte green, byte blue) {
  413. #ifdef ADAFRUIT_NEOPIXEL_H
  414. // NeoPixel
  415. strip.setPixelColor(Pixel, strip.Color(red, green, blue));
  416. #endif
  417. #ifndef ADAFRUIT_NEOPIXEL_H
  418. // FastLED
  419. leds[Pixel].r = red;
  420. leds[Pixel].g = green;
  421. leds[Pixel].b = blue;
  422. #endif
  423. }
  424.  
  425. // Set all LEDs to a given color and apply it (visible)
  426. void setAll(byte red, byte green, byte blue) {
  427. for(int i = 0; i < NUM_LEDS; i++ ) {
  428. setPixel(i, red, green, blue);
  429. }
  430. showStrip();
  431. }
Add Comment
Please, Sign In to add comment