background_rings_demo.ino 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #include <SoftwareSerial.h>
  2. #include <WS2812_Definitions.h>
  3. #include <eRCaGuy_ButtonReader.h>
  4. #include <BackgroundRingClass.h>
  5. const int LED_COUNT = 24;
  6. const int MAXBRIGHTNESS = 80;
  7. const int leftFSRSimPin = A7;
  8. const int rightFSRSimPin = A0;
  9. /* Start Button */
  10. const int leftReadyButtonPin = 13;
  11. const int rightReadyButtonPin = 8;
  12. /* WS2812 Christmas Tree Setup:
  13. Two strips of 6 LEDs connected to 5V and Ground, plus the signal pin
  14. */
  15. const int ledPinRight = 12;
  16. const int ledPinLeft = 11;
  17. const int randomPin = A5;
  18. BackgroundRingClass rightRing = BackgroundRingClass(LED_COUNT, ledPinRight);
  19. BackgroundRingClass leftRing = BackgroundRingClass(LED_COUNT, ledPinLeft);
  20. eRCaGuy_ButtonReader leftReadyButton = eRCaGuy_ButtonReader(leftReadyButtonPin, 25);
  21. eRCaGuy_ButtonReader rightReadyButton = eRCaGuy_ButtonReader(rightReadyButtonPin, 25);
  22. eRCaGuy_ButtonReader leftFSRButton = eRCaGuy_ButtonReader(leftFSRSimPin, 25);
  23. eRCaGuy_ButtonReader rightFSRButton = eRCaGuy_ButtonReader(rightFSRSimPin, 25);
  24. void setup() {
  25. // put your setup code here, to run once:
  26. Serial.begin(115200); // Serial used for logging
  27. randomSeed(analogRead(randomPin));
  28. /* WS2812 LED Setup */
  29. //rightRing.begin();
  30. //leftRing.begin();
  31. pinMode(leftReadyButtonPin, INPUT_PULLUP);
  32. pinMode(rightReadyButtonPin, INPUT_PULLUP);
  33. pinMode(leftFSRSimPin, INPUT_PULLUP);
  34. pinMode(rightFSRSimPin, INPUT_PULLUP);
  35. Serial.println("Testing Solids");
  36. rightRing.init_solid(DARKRED, MAXBRIGHTNESS);
  37. leftRing.init_solid(DARKGREEN, MAXBRIGHTNESS);
  38. delay(1000);
  39. leftRing.init_idle();
  40. rightRing.init_idle();
  41. Serial.println("Begin.");
  42. }
  43. void loop() {
  44. static unsigned long last_random_check = millis();
  45. rightRing.tick();
  46. leftRing.tick();
  47. if(button_pressed(rightFSRButton)) {
  48. Serial.println("Right button pressed. Switching.");
  49. //rightRing.init_pulse(random(0, 0xFFFFFF), 255, 2000);
  50. //rightRing.init_pulse(DARKRED, MAXBRIGHTNESS, 2000);
  51. //rightRing.init_spin(DARKRED, DARKGREEN);
  52. //rightRing.init_flip(DARKRED, DARKGREEN);
  53. //rightRing.init_slowroll(DARKRED, DARKGREEN);
  54. rightRing.random_event();
  55. }
  56. if(button_pressed(leftFSRButton)) {
  57. Serial.println("Right button pressed. Switching.");
  58. //leftRing.init_pulse(random(0, 0xFFFFFF), 255, 2000);
  59. //leftRing.init_pulse(DARKGREEN, MAXBRIGHTNESS, 2000);
  60. //leftRing.init_spin(DARKGREEN, DARKRED);
  61. //leftRing.init_flip(DARKGREEN, DARKRED);
  62. //leftRing.init_slowroll(DARKGREEN, DARKRED);
  63. leftRing.random_event();
  64. }
  65. if(leftRing.action == Idle && rightRing.action == Idle) {
  66. if(millis() - last_random_check > 1000) { // only check every 10 seconds
  67. if(random(0, 10) == 0) {
  68. int draw = leftRing.random_event();
  69. rightRing.random_event(draw); // synchronized
  70. }
  71. last_random_check = millis();
  72. }
  73. } else {
  74. last_random_check = millis(); // don't count time in an action
  75. }
  76. //test_solids();
  77. //test_pulses();
  78. //test_random_pulses();
  79. }
  80. bool button_pressed(eRCaGuy_ButtonReader& button)
  81. {
  82. int8_t buttonaction;
  83. boolean buttonstate;
  84. button.readButton(&buttonaction, &buttonstate);
  85. return buttonaction == 1;
  86. }
  87. void test_pulses() {
  88. if(rightRing.action == Idle) {
  89. Serial.println("Changing right");
  90. rightRing.init_pulse(DARKGREEN, MAXBRIGHTNESS, 2000);
  91. }
  92. if(leftRing.action == Idle) {
  93. Serial.println("Changing left");
  94. leftRing.init_pulse(DARKGREEN, MAXBRIGHTNESS, 2000);
  95. }
  96. }
  97. void test_random_pulses() {
  98. if(rightRing.action == Idle) {
  99. Serial.println("Changing right");
  100. rightRing.init_pulse(random(0, 0xFFFFFF), MAXBRIGHTNESS, 2000);
  101. }
  102. if(leftRing.action == Idle) {
  103. Serial.println("Changing left");
  104. leftRing.init_pulse(random(0, 0xFFFFFF), MAXBRIGHTNESS, 2000);
  105. }
  106. }
  107. void test_random_solids() {
  108. if(rightRing.action == Idle) {
  109. Serial.println("Changing right");
  110. rightRing.init_solid(random(0, 0xFFFFFF), MAXBRIGHTNESS);
  111. }
  112. if(leftRing.action == Idle) {
  113. Serial.println("Changing left");
  114. leftRing.init_solid(random(0, 0xFFFFFF), MAXBRIGHTNESS);
  115. }
  116. delay(500);
  117. leftRing.init_idle();
  118. rightRing.init_idle();
  119. }