Advertisement
kelsey13roberts

Untitled

Jun 26th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. int latchPin = 3;
  2. int clockPin = 4;
  3. int dataPin = 2;
  4.  
  5. int numOfRegisters = 2;
  6. byte* registerState;
  7.  
  8. long effectId = 0;
  9. long prevEffect = 0;
  10. long effectRepeat = 0;
  11. long effectSpeed = 30;
  12.  
  13. void setup() {
  14. //Initialize array
  15. registerState = new byte[numOfRegisters];
  16. for (size_t i = 0; i < numOfRegisters; i++) {
  17. registerState[i] = 0;
  18. }
  19.  
  20. //set pins to output so you can control the shift register
  21. pinMode(latchPin, OUTPUT);
  22. pinMode(clockPin, OUTPUT);
  23. pinMode(dataPin, OUTPUT);
  24. }
  25.  
  26. void loop() {
  27. do{
  28. effectId = random(6);
  29. } while (effectId == prevEffect);
  30. prevEffect = effectId;
  31.  
  32. switch (effectId)
  33. {
  34.  
  35. case 0:
  36. effectRepeat = random(1, 2);
  37. break;
  38. case 1:
  39. effectRepeat = random(1, 2);
  40. break;
  41. case 3:
  42. effectRepeat = random(1, 5);
  43. break;
  44. case 4:
  45. effectRepeat = random(1, 2);
  46. break;
  47. case 5:
  48. effectRepeat = random(1, 2);
  49. break;
  50. }
  51.  
  52. for (int i = 0; i < effectRepeat; i++) {
  53. effectSpeed = random(10, 90);
  54.  
  55. switch (effectId)
  56. {
  57. case 0:
  58. effectA(effectSpeed);
  59. break;
  60. case 1:
  61. effectB(effectSpeed);
  62. break;
  63. case 3:
  64. effectC(effectSpeed);
  65. break;
  66. case 4:
  67. effectD(effectSpeed);
  68. break;
  69. case 6:
  70. effectE(effectSpeed);
  71. break;
  72. }
  73. }
  74. }
  75.  
  76. void effectA(int speed){
  77. for (int i = 0; i < 16; i++){
  78. for (int k = i; k < 16; k++){
  79. regWrite(k, HIGH);
  80. delay(speed);
  81. regWrite(k, LOW);
  82. }
  83.  
  84. regWrite(i, HIGH);
  85. }
  86. }
  87.  
  88. void effectB(int speed){
  89. for (int i = 15; i >= 0; i--){
  90. for (int k = 0; k < i; k++){
  91. regWrite(k, HIGH);
  92. delay(speed);
  93. regWrite(k, LOW);
  94. }
  95.  
  96. regWrite(i, HIGH);
  97. }
  98. }
  99.  
  100. void effectC(int speed){
  101. int prevI = 0;
  102. for (int i = 0; i < 16; i++){
  103. regWrite(prevI, LOW);
  104. regWrite(i, HIGH);
  105. prevI = i;
  106.  
  107. delay(speed);
  108. }
  109.  
  110. for (int i = 15; i >= 0; i--){
  111. regWrite(prevI, LOW);
  112. regWrite(i, HIGH);
  113. prevI = i;
  114.  
  115. delay(speed);
  116. }
  117. }
  118.  
  119. void effectD(int speed){
  120. for (int i = 0; i < 8; i++){
  121. for (int k = i; k < 8; k++)
  122. {
  123. regWrite(k, HIGH);
  124. regWrite(15 - k, HIGH);
  125. delay(speed);
  126. regWrite(k, LOW);
  127. regWrite(15 - k, LOW);
  128. }
  129.  
  130. regWrite(i, HIGH);
  131. regWrite(15 - i, HIGH);
  132. }
  133. }
  134.  
  135. void effectE(int speed){
  136. for (int i = 7; i >= 0; i--){
  137. for (int k = 0; k <= i; k++)
  138. {
  139. regWrite(k, HIGH);
  140. regWrite(15 - k, HIGH);
  141. delay(speed);
  142. regWrite(k, LOW);
  143. regWrite(15 - k, LOW);
  144. }
  145.  
  146. regWrite(i, HIGH);
  147. regWrite(15 - i, HIGH);
  148. }
  149. }
  150.  
  151. void regWrite(int pin, bool state){
  152. //Determines register
  153. int reg = pin / 8;
  154. //Determines pin for actual register
  155. int actualPin = pin - (8 * reg);
  156.  
  157. //Begin session
  158. digitalWrite(latchPin, LOW);
  159.  
  160. for (int i = 0; i < numOfRegisters; i++){
  161. //Get actual states for register
  162. byte* states = &registerState[i];
  163.  
  164. //Update state
  165. if (i == reg){
  166. bitWrite(*states, actualPin, state);
  167. }
  168.  
  169. //Write
  170. shiftOut(dataPin, clockPin, MSBFIRST, *states);
  171. }
  172.  
  173. //End session
  174. digitalWrite(latchPin, HIGH);
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement