Advertisement
dale3h

[Arduino] MultiFx LED Controller

Jan 8th, 2013
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.78 KB | None | 0 0
  1. /*********************************
  2. * Arduino MultiFx LED Controller *
  3. * Dale Higgs / [email protected]  *
  4. *********************************/
  5.  
  6. // 6 PWM Pins on Arduino Micro
  7. const int LED[] = {3,5,6,9,10,11};
  8.  
  9. // Brightness values
  10. int high = 255;
  11. int med = 15;
  12. int low = 3;
  13. int off = 0;
  14.  
  15. // Fx flags to sequence properly
  16. int minFx = 0;
  17. int maxFx = 17;
  18. int curFx = 0;
  19.  
  20. int level[6];
  21.  
  22. void setup() {
  23.   delay(2500);
  24.  
  25.   for (int i=0; i<6; i++) {
  26.     level[i] = off;
  27.     analogWrite(LED[i], high);
  28.     delay(50);
  29.     analogWrite(LED[i], off);
  30.     delay(25);
  31.   }
  32. }
  33.  
  34. void loop() {
  35.   strobeLeftRight();
  36. }
  37.  
  38. void playFx() {
  39.   switch (curFx) {
  40.     case 0:
  41.       solid();
  42.       break;
  43.     case 1:
  44.       chaseRight();
  45.       break;
  46.     case 2:
  47.       chaseLeft();
  48.       break;
  49.     case 3:
  50.       chaseLeftRight();
  51.       break;
  52.     case 4:
  53.       strobeChaseRight();
  54.       break;
  55.     case 5:
  56.       strobeChaseLeft();
  57.       break;
  58.     case 6:
  59.       strobeChaseLeftRight();
  60.       break;
  61.     case 7:
  62.       strobe();
  63.       break;
  64.     case 8:
  65.       strobeLeft();
  66.       break;
  67.     case 9:
  68.       strobeRight();
  69.       break;
  70.     case 10:
  71.       strobeLeftRight();
  72.       break;
  73.     case 11:
  74.       strobeIn();
  75.       break;
  76.     case 12:
  77.       strobeIn2();
  78.       break;
  79.     case 13:
  80.       strobeOut();
  81.       break;
  82.     case 14:
  83.       strobeOut2();
  84.       break;
  85.     case 15:
  86.       strobeInOut();
  87.       break;
  88.     case 16:
  89.       knightRider();
  90.       break;
  91.     case 17:
  92.       knightRiderRev();
  93.       break;
  94.     default:
  95.       all(off);
  96.       break;
  97.   }
  98. }
  99.  
  100. void nextFx() {
  101.   curFx++;
  102.   if (curFx > maxFx)
  103.     curFx = minFx;
  104. }
  105.  
  106. void cycle() {
  107.   for (int i=1; i<=5; i++)
  108.     chaseRight();
  109.   for (int i=1; i<=5; i++)
  110.     chaseLeft();
  111.   for (int i=1; i<=5; i++)
  112.     chaseLeftRight();
  113.   for (int i=1; i<=5; i++)
  114.     strobeChaseRight();
  115.   for (int i=1; i<=5; i++)
  116.     strobeChaseLeft();
  117.   for (int i=1; i<=5; i++)
  118.     strobeChaseLeftRight();
  119.   for (int i=1; i<=5; i++)
  120.     strobe();
  121.   for (int i=1; i<=5; i++)
  122.     strobeLeft();
  123.   for (int i=1; i<=5; i++)
  124.     strobeRight();
  125.   for (int i=1; i<=5; i++)
  126.     strobeLeftRight();
  127.   for (int i=1; i<=5; i++)
  128.     strobeIn();
  129.   for (int i=1; i<=5; i++)
  130.     strobeIn2();
  131.   for (int i=1; i<=5; i++)
  132.     strobeOut();
  133.   for (int i=1; i<=5; i++)
  134.     strobeOut2();
  135.   for (int i=1; i<=5; i++)
  136.     strobeInOut();
  137.   for (int i=1; i<=5; i++)
  138.     knightRider();
  139.   for (int i=1; i<=5; i++)
  140.     knightRiderRev();
  141. }
  142.  
  143. // Solid
  144. void solid() {
  145.   all(high);
  146. }
  147.  
  148. // Chase right
  149. void chaseRight() {
  150.   // Let's take a timeout and step
  151.   int timeout = 1;
  152.   int step = 5;
  153.  
  154.   // Turn all LEDs low
  155.   all(low);
  156.  
  157.   // Chase
  158.   for (int i=1; i<=7; i++) {
  159.     if (i > 1)
  160.       led(i - 1, low);
  161.     if (i <= 6)
  162.       led(i, high, timeout, step);
  163.    
  164.   }
  165.  
  166.   delay(100);
  167. }
  168.  
  169. // Chase left
  170. void chaseLeft() {
  171.   // Let's take a timeout and step
  172.   int timeout = 1;
  173.   int step = 5;
  174.  
  175.   // Turn all LEDs low
  176.   all(low);
  177.  
  178.   // Chase
  179.   for (int i=6; i>=0; i--) {
  180.     if (i < 6)
  181.       led(i + 1, low);
  182.     if (i >= 1)
  183.       led(i, high, timeout, step);
  184.    
  185.   }
  186.  
  187.   delay(100);
  188. }
  189.  
  190. // Chase left & right
  191. void chaseLeftRight() {
  192.   chaseLeft();
  193.   chaseRight();
  194. }
  195.  
  196. // Chase right & right
  197. void chaseRightLeft() {
  198.   chaseRight();
  199.   chaseLeft();
  200. }
  201.  
  202. // Strobe all LEDs
  203. void strobe() {
  204.   // Turn all LEDs off
  205.   all(off);
  206.  
  207.   // Strobe LEDs 1-6
  208.   for (int i=1; i<=4; i++) {
  209.     all(255);
  210.     delay(25);
  211.    
  212.     all(0);
  213.     delay(25);
  214.   }
  215. }
  216.  
  217. // Strobe left side
  218. void strobeLeft() {
  219.   // Turn all LEDs off
  220.   all(off);
  221.  
  222.   // Strobe LEDs 1-3
  223.   for (int i=1; i<=4; i++) {
  224.     for (int j=1; j<=3; j++)
  225.       led(j, high);
  226.      
  227.     delay(25);
  228.    
  229.     for (int j=1; j<=3; j++)
  230.       led(j, off);
  231.      
  232.     delay(25);
  233.   }
  234. }
  235.  
  236. // Strobe right side
  237. void strobeRight() {
  238.   // Turn all LEDs off
  239.   all(off);
  240.  
  241.   // Strobe LEDs 4-6
  242.   for (int i=1; i<=4; i++) {
  243.     for (int j=4; j<=6; j++)
  244.       led(j, high);
  245.      
  246.     delay(25);
  247.    
  248.     for (int j=4; j<=6; j++)
  249.       led(j, off);
  250.      
  251.     delay(25);
  252.   }
  253. }
  254.  
  255. // Strobe left and right
  256. void strobeLeftRight() {
  257.   strobeLeft();
  258.   delay(250);
  259.    
  260.   strobeRight();
  261.   delay(250);
  262. }
  263.  
  264. // Strobe out to in
  265. void strobeIn() {
  266.   // Turn all LEDs off
  267.   all(off);
  268.  
  269.   // Strobe LEDs from out to in
  270.   for (int j=1; j<=3; j++) {
  271.     int led1 = j;
  272.     int led2 = 6 - (j - 1);
  273.    
  274.     for (int i=1; i<=4; i++) {
  275.       led(led1, high);
  276.       led(led2, high);
  277.      
  278.       delay(25);
  279.      
  280.       led(led1, off);
  281.       led(led2, off);
  282.      
  283.       delay(25);
  284.     }
  285.   }
  286.  
  287.   strobe();
  288.   strobe();
  289.   strobe();
  290. }
  291.  
  292. // Strobe out to in, keep on
  293. void strobeIn2() {
  294.   // Turn all LEDs off
  295.   all(off);
  296.  
  297.   // Strobe LEDs from out to in
  298.   for (int i=1; i<=4; i++) {
  299.     led(1, high);
  300.     led(6, high);
  301.    
  302.     delay(25);
  303.    
  304.     led(1, off);
  305.     led(6, off);
  306.    
  307.     delay(25);
  308.   }
  309.  
  310.   for (int i=1; i<=4; i++) {
  311.     led(1, high);
  312.     led(2, high);
  313.     led(5, high);
  314.     led(6, high);
  315.    
  316.     delay(25);
  317.    
  318.     led(1, off);
  319.     led(2, off);
  320.     led(5, off);
  321.     led(6, off);
  322.    
  323.     delay(25);
  324.   }
  325.  
  326.   strobe();
  327.   strobe();
  328. }
  329.  
  330. // Strobe out
  331. void strobeOut() {
  332.   // Turn all LEDs off
  333.   all(off);
  334.  
  335.   // Strobe LEDs from out to in
  336.   for (int j=3; j>=1; j--) {
  337.     int led1 = j;
  338.     int led2 = 6 - (j - 1);
  339.    
  340.     for (int i=1; i<=4; i++) {
  341.       led(led1, high);
  342.       led(led2, high);
  343.      
  344.       delay(25);
  345.      
  346.       led(led1, off);
  347.       led(led2, off);
  348.      
  349.       delay(25);
  350.     }
  351.   }
  352.  
  353.   strobe();
  354.   strobe();
  355.   strobe();
  356. }
  357.  
  358. // Strobe in to out, keep on
  359. void strobeOut2() {
  360.   // Turn all LEDs off
  361.   all(off);
  362.  
  363.   // Strobe LEDs from out to in
  364.   for (int i=1; i<=4; i++) {
  365.     led(3, high);
  366.     led(4, high);
  367.    
  368.     delay(25);
  369.    
  370.     led(3, off);
  371.     led(4, off);
  372.    
  373.     delay(25);
  374.   }
  375.  
  376.   for (int i=1; i<=4; i++) {
  377.     led(2, high);
  378.     led(3, high);
  379.     led(4, high);
  380.     led(5, high);
  381.    
  382.     delay(25);
  383.    
  384.     led(2, off);
  385.     led(3, off);
  386.     led(4, off);
  387.     led(5, off);
  388.    
  389.     delay(25);
  390.   }
  391.  
  392.   strobe();
  393.   strobe();
  394. }
  395.  
  396. // Strobe inside, then outside
  397. void strobeInOut() {
  398.   // Turn all LEDs off
  399.   all(off);
  400.  
  401.   // Strobe LEDs from out to in
  402.   for (int i=1; i<=8; i++) {
  403.     led(3, high);
  404.     led(4, high);
  405.    
  406.     delay(25);
  407.    
  408.     led(3, off);
  409.     led(4, off);
  410.    
  411.     delay(25);
  412.   }
  413.  
  414.   for (int i=1; i<=8; i++) {
  415.     led(1, high);
  416.     led(2, high);
  417.     led(5, high);
  418.     led(6, high);
  419.    
  420.     delay(25);
  421.    
  422.     led(1, off);
  423.     led(2, off);
  424.     led(5, off);
  425.     led(6, off);
  426.    
  427.     delay(25);
  428.   }
  429. }
  430.  
  431. // Strobe & chase right
  432. void strobeChaseRight() {
  433.   // Turn all LEDs low
  434.   all(off);
  435.  
  436.   // Strobe & chase
  437.   for (int i=1; i<=6; i++) {
  438.     for (int j=1; j<=4; j++) {
  439.       led(i, high);
  440.      
  441.       delay(25);
  442.      
  443.       led(i, off);
  444.      
  445.       delay(25);
  446.     }
  447.   }
  448. }
  449.  
  450. // Strobe & chase left
  451. void strobeChaseLeft() {
  452.   // Turn all LEDs low
  453.   all(off);
  454.  
  455.   // Strobe & chase
  456.   for (int i=6; i>=1; i--) {
  457.     for (int j=1; j<=4; j++) {
  458.       led(i, high);
  459.      
  460.       delay(25);
  461.      
  462.       led(i, off);
  463.      
  464.       delay(25);
  465.     }
  466.   }
  467. }
  468.  
  469. // Strobe & chase left & right
  470. void strobeChaseLeftRight() {
  471.   strobeChaseLeft();
  472.   strobeChaseRight();
  473. }
  474.  
  475. // Strobe & chase right & left
  476. void strobeChaseRightLeft() {
  477.   strobeChaseRight();
  478.   strobeChaseLeft();
  479. }
  480.  
  481. // Knight rider
  482. void knightRider() {
  483.   // Turn all LEDs off
  484.   all(off);
  485.  
  486.   int sleep = 25;
  487.   int timeout = 1;
  488.   int step = 10;
  489.  
  490.   // Start center, go out
  491.   for (int j=3; j>=1; j--) {
  492.     int led1 = j;
  493.     int led2 = 6 - (j - 1);
  494.    
  495.     led(led1, high, timeout, step);
  496.     led(led2, high, timeout, step);
  497.    
  498.     delay(sleep);
  499.   }
  500.  
  501.   // Start out, go center
  502.   for (int j=1; j<=3; j++) {
  503.     int led1 = j;
  504.     int led2 = 6 - (j - 1);
  505.    
  506.     led(led1, off, timeout, step);
  507.     led(led2, off, timeout, step);
  508.    
  509.     delay(sleep);
  510.   }
  511. }
  512.  
  513. // Knight rider reversed
  514. void knightRiderRev() {
  515.   // Turn all LEDs off
  516.   all(off);
  517.  
  518.   int sleep = 25;
  519.   int timeout = 1;
  520.   int step = 10;
  521.  
  522.   // Start out, go center
  523.   for (int j=1; j<=3; j++) {
  524.     int led1 = j;
  525.     int led2 = 6 - (j - 1);
  526.    
  527.     led(led1, high, timeout, step);
  528.     led(led2, high, timeout, step);
  529.    
  530.     delay(sleep);
  531.   }
  532.  
  533.   // Start center, go out
  534.   for (int j=3; j>=1; j--) {
  535.     int led1 = j;
  536.     int led2 = 6 - (j - 1);
  537.    
  538.     led(led1, off, timeout, step);
  539.     led(led2, off, timeout, step);
  540.    
  541.     delay(sleep);
  542.   }
  543. }
  544.  
  545. // LED control functions
  546.  
  547. // Control all LEDs
  548. void all(int target) {
  549.   for (int i=1; 6<=6; i++)
  550.     led(i, target);
  551. }
  552.  
  553. // Defaults: target, timeout, step
  554. void led(int n) {
  555.   int index = n - 1;
  556.  
  557.   if (level[index] > 0)
  558.     led(n, 0);
  559.   else
  560.     led(n, 255);
  561. }
  562.  
  563. // Defaults: timeout, step
  564. void led(int n, int target) {
  565.   led(n, target, 0);
  566. }
  567.  
  568. // Defaults: step
  569. void led(int n, int target, int timeout) {
  570.   led(n, target, timeout, 1);
  571. }
  572.  
  573. void led(int n, int target, int timeout, int step) {
  574.   int index = n - 1;
  575.  
  576.   if (timeout == 0) {
  577.     // No fade
  578.     analogWrite(LED[index], target);
  579.     delay(1);
  580.   } else {
  581.     // Fade
  582.     if (level[index] < target) {
  583.       // Fade in
  584.       for (int x=level[index]; x<=target; x+=step) {
  585.         analogWrite(LED[index], x);
  586.         delay(timeout);
  587.       }
  588.       analogWrite(LED[index], target);
  589.       delay(1);
  590.     } else {
  591.       // Fade out
  592.       for (int x=level[index]; x>=target; x-=step) {
  593.         analogWrite(LED[index], x);
  594.         delay(timeout);
  595.       }
  596.       analogWrite(LED[index], target);
  597.       delay(1);
  598.     }
  599.   }
  600.  
  601.   // Save current level
  602.   level[index] = target;
  603. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement