Arduino Code (christmas_tree_lights)


SUBMITTED BY: bgnusameera1

DATE: July 13, 2016, 3:41 p.m.

FORMAT: Text only

SIZE: 2.7 kB

HITS: 540

  1. // christmas tree lights
  2. #define NR_OF_LIGHTS 6
  3. int pins[NR_OF_LIGHTS] = { 3, 5, 6, 9, 10, 11 };
  4. int values[NR_OF_LIGHTS];
  5. int steps[NR_OF_LIGHTS];
  6. #define NR_OF_FADESTEPS 4
  7. int fadesteps[NR_OF_FADESTEPS] = { 192, 128, 64, 0 };
  8. int fade_delay = 30; // millisec
  9. int fade_cycles = 1000;
  10. int nr_of_blinks = 2;
  11. int blink_delay = 400; //millisec
  12. int effect = 1;
  13. int randomlights[NR_OF_LIGHTS];
  14. bool chosenlights[NR_OF_LIGHTS];
  15. /**
  16. *
  17. */
  18. void setup() {
  19. randomSeed(analogRead(0));
  20. for (int i = 0; i < NR_OF_LIGHTS; i++) {
  21. values[i] = (int)random(230) + 13; // start values between 'max min' and 'min max'
  22. steps[i] = (int)random(4) + 1; // steps between 1 and 4
  23. }
  24. }
  25. /**
  26. *
  27. */
  28. void loop() {
  29. for (int j = 0; j < fade_cycles; j++) {
  30. for (int i = 0; i < NR_OF_LIGHTS; i++) {
  31. fadingLight(i);
  32. }
  33. delay(fade_delay);
  34. }
  35. if (effect == 1) {
  36. blinkAll();
  37. effect = 2;
  38. }
  39. else if (effect == 2) {
  40. runningLight(0);
  41. effect = 3;
  42. }
  43. else if (effect == 3) {
  44. runningLight(255);
  45. effect = 1;
  46. }
  47. }
  48. /**
  49. *
  50. */
  51. void fadingLight(int i) {
  52. int minvalue = (NR_OF_FADESTEPS * abs(steps[i])) + 1;
  53. int maxvalue = 255 - minvalue;
  54. int fs = NR_OF_FADESTEPS;
  55. for (int j = 0; fs > 0; fs--, j++) {
  56. if (values[i] > fadesteps[j]) {
  57. break;
  58. }
  59. }
  60. values[i] += fs * steps[i];
  61. if (values[i] > maxvalue || values[i] < minvalue) {
  62. steps[i] *= -1;
  63. }
  64. analogWrite(pins[i], values[i]);
  65. }
  66. /**
  67. *
  68. */
  69. void setAllLights(int value) {
  70. for (int i = 0; i < NR_OF_LIGHTS; i++) {
  71. analogWrite(pins[i], value);
  72. }
  73. }
  74. /**
  75. *
  76. */
  77. void blinkAll() {
  78. for (int i = 0; i < nr_of_blinks; i++) {
  79. setAllLights(255);
  80. delay(blink_delay);
  81. setAllLights(0);
  82. delay(blink_delay);
  83. }
  84. }
  85. /**
  86. *
  87. */
  88. void runningLight(int startvalue) {
  89. setAllLights(startvalue);
  90. for (int j = 0; j < 2; j++) {
  91. randomize();
  92. for (int i = 0; i < NR_OF_LIGHTS; i++) {
  93. analogWrite(pins[randomlights[i]], 255 - startvalue);
  94. delay(200);
  95. analogWrite(pins[randomlights[i]], startvalue);
  96. }
  97. }
  98. }
  99. /**
  100. *
  101. */
  102. void randomize() {
  103. for (int i = 0; i < NR_OF_LIGHTS; i++) {
  104. chosenlights[i] = false;
  105. }
  106. //first one always ok
  107. int r = (int)random(NR_OF_LIGHTS);
  108. randomlights[0] = r;
  109. chosenlights[r] = true;
  110. //next 4
  111. for (int i = 1; i < 5; i++) {
  112. while (true) {
  113. r = (int)random(NR_OF_LIGHTS);
  114. if (chosenlights[r] == false) {
  115. break;
  116. }
  117. }
  118. randomlights[i] = r;
  119. chosenlights[r] = true;
  120. }
  121. //last one
  122. for (int i = 0; i < NR_OF_LIGHTS; i++) {
  123. if (chosenlights[i] == false) {
  124. randomlights[5] = i;
  125. break;
  126. }
  127. }
  128. }

comments powered by Disqus