Advertisement
Oc3

Almost Working

Oc3
Apr 1st, 2023 (edited)
733
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.17 KB | None | 0 0
  1. // Included Libraries
  2. #include <FastLED.h>
  3.  
  4. // Output Pin Definitions
  5. #define LEFT_STRIP_PIN 12
  6. #define RIGHT_STRIP_PIN 14
  7.  
  8. // Input Pin Definitions
  9. #define BRAKE_PIN 18
  10. #define RIGHT_TURN_PIN 19
  11. #define LEFT_TURN_PIN 21
  12. #define NUM_LEDS 48
  13.  
  14. // This Must Do Something
  15. CRGB leftStrip[NUM_LEDS];
  16. CRGB rightStrip[NUM_LEDS];
  17.  
  18. //Enumeration States
  19. enum State {
  20.   Running,
  21.   Braking,
  22.   LeftSignal,
  23.   RightSignal,
  24.   BrakeandLeftSignal,
  25.   BrakeandRightSignal,
  26.   Hazzard
  27. };
  28.  
  29. // Arrays For The Led's. Left and Right have their own pattern and should not overlap when commanded
  30. const uint8_t RunningArray_L[] = { 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 };
  31. const uint8_t RunningArray_R[] = { 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 };
  32. const uint8_t MarkerArray_L[] = { 15, 16, 17, 18, 47, 46 };
  33. const uint8_t MarkerArray_R[] = { 15, 16, 17, 18, 47, 46 };
  34. const uint8_t SignalArray_L[] = { 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 26, 27, 29, 30, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47 };
  35. const uint8_t SignalArray_R[] = { 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 26, 27, 29, 30, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47 };
  36. const uint8_t BrakeArray_L[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 };
  37. const uint8_t BrakeArray_R[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 };
  38. uint8_t strobeCount = 0;
  39.  
  40.  
  41. void setup() {
  42.   pinMode(BRAKE_PIN, INPUT_PULLUP);
  43.   pinMode(RIGHT_TURN_PIN, INPUT_PULLUP);
  44.   pinMode(LEFT_TURN_PIN, INPUT_PULLUP);
  45.  
  46.   FastLED.addLeds<WS2812B, LEFT_STRIP_PIN, RGB>(leftStrip, NUM_LEDS);
  47.   FastLED.addLeds<WS2812B, RIGHT_STRIP_PIN, RGB>(rightStrip, NUM_LEDS);
  48.   FastLED.clear(true);
  49. }
  50.  
  51. void loop() {
  52.   FastLED.clear(true);   // Clear all Led's and prep for new state
  53.   State currentState = getCurrentState();
  54.  
  55.  
  56.   switch (currentState) {
  57.     case Running:
  58.       displayRunningLights();
  59.       break;
  60.     case Braking:
  61.       displayBrakingLights();
  62.       break;
  63.     case LeftSignal:
  64.       displayLeftSignalLights();
  65.       break;
  66.     case RightSignal:
  67.       displayRightSignalLights();
  68.       break;
  69.       case BrakeandLeftSignal:
  70.       displayBrakingAndLeftSignalLights();
  71.       break;
  72.     case BrakeandRightSignal:
  73.       displayBrakingAndRightSignalLights();
  74.       break;
  75.     case Hazzard:
  76.       displayLeftSignalLightsAndRightSignalLights();
  77.       break;
  78.   }
  79.  
  80.   FastLED.show();
  81. }
  82. State getCurrentState() {
  83.   static bool wasBraking = false;
  84.   bool brakePinLow = digitalRead(BRAKE_PIN) == LOW;
  85.   bool leftTurnPinLow = digitalRead(LEFT_TURN_PIN) == LOW;
  86.   bool rightTurnPinLow = digitalRead(RIGHT_TURN_PIN) == LOW;
  87.  
  88.   if (!brakePinLow && wasBraking) {
  89.     wasBraking = false;
  90.     resetStrobeCount();
  91.   }
  92.  
  93.   if (brakePinLow && leftTurnPinLow) {
  94.     wasBraking = false;
  95.     return BrakeandLeftSignal;
  96.   } else if (brakePinLow && rightTurnPinLow) {
  97.     wasBraking = false;
  98.     return BrakeandRightSignal;
  99.   } else if (leftTurnPinLow && rightTurnPinLow) {
  100.     return Hazzard;
  101.   } else if (brakePinLow) {
  102.     wasBraking = true;
  103.     return Braking;
  104.   } else if (leftTurnPinLow) {
  105.     return LeftSignal;
  106.   } else if (rightTurnPinLow) {
  107.     return RightSignal;
  108.   } else {
  109.     return Running;
  110.   }
  111. }
  112.  
  113. void resetStrobeCount() {
  114.   strobeCount = 0;
  115. }
  116.  
  117.  
  118. // Display Functions and Patterns.  
  119. void displayRunningLights() {
  120. applyLightPattern(RunningArray_L, leftStrip, 0, 255, 150, sizeof(RunningArray_L) / sizeof(RunningArray_L[0]));
  121. applyLightPattern(RunningArray_R, rightStrip, 0, 255, 150, sizeof(RunningArray_R) / sizeof(RunningArray_R[0]));
  122. applyLightPattern(MarkerArray_L, leftStrip, 32, 255, 150, sizeof(MarkerArray_L) / sizeof(MarkerArray_L[0]));
  123. applyLightPattern(MarkerArray_R, rightStrip, 32, 255, 150, sizeof(MarkerArray_R) / sizeof(MarkerArray_R[0]));
  124. }
  125.  
  126. void displayBrakingLights() {
  127.   static bool strobeOn = false;
  128.   static unsigned long lastStrobeChange = 0;
  129.   unsigned long currentTime = millis();
  130.   uint8_t strobeValue = strobeOn ? 255 : 0;
  131.  
  132.   if (strobeCount < 5) {
  133.     if (currentTime - lastStrobeChange >= 75) { // 75ms strobe interval, adjust for desired frequency
  134.       strobeOn = !strobeOn;
  135.       lastStrobeChange = currentTime;
  136.       if (!strobeOn) {
  137.         strobeCount++;
  138.       }
  139.     }
  140.   } else {
  141.     strobeValue = 255;
  142.   }
  143.  
  144.   applyLightPattern(BrakeArray_L, leftStrip, 0, 255, strobeValue, sizeof(BrakeArray_L) / sizeof(BrakeArray_L[0]));
  145.   applyLightPattern(BrakeArray_R, rightStrip, 0, 255, strobeValue, sizeof(BrakeArray_R) / sizeof(BrakeArray_R[0]));
  146. }
  147. void displayLeftSignalLights() {
  148.   applyLightPattern(SignalArray_L, leftStrip, 32, 255, 255, sizeof(SignalArray_L) / sizeof(SignalArray_L[0]));
  149.   applyLightPattern(MarkerArray_L, leftStrip, 32, 255, 255, sizeof(MarkerArray_L) / sizeof(MarkerArray_L[0]));
  150.   applyLightPattern(RunningArray_R, rightStrip, 0, 255, 150, sizeof(RunningArray_R) / sizeof(RunningArray_R[0]));
  151.   applyLightPattern(MarkerArray_R, rightStrip, 32, 255, 150, sizeof(MarkerArray_R) / sizeof(MarkerArray_R[0]));
  152.  
  153. }
  154. void displayRightSignalLights() {
  155.   applyLightPattern(SignalArray_R, rightStrip, 32, 255, 255, sizeof(SignalArray_R) / sizeof(SignalArray_R[0]));
  156.   applyLightPattern(MarkerArray_R, rightStrip, 32, 255, 255, sizeof(MarkerArray_R) / sizeof(MarkerArray_R[0]));
  157.   applyLightPattern(RunningArray_L, leftStrip, 0, 255, 150, sizeof(RunningArray_L) / sizeof(RunningArray_L[0]));
  158.   applyLightPattern(MarkerArray_L, leftStrip, 32, 255, 150, sizeof(MarkerArray_L) / sizeof(MarkerArray_L[0]));
  159.  
  160. }
  161. void displayBrakingAndLeftSignalLights() {
  162.   applyLightPattern(SignalArray_L, leftStrip, 32, 255, 255, sizeof(SignalArray_L) / sizeof(SignalArray_L[0]));
  163.   applyLightPattern(MarkerArray_L, leftStrip, 32, 255, 255, sizeof(MarkerArray_L) / sizeof(MarkerArray_L[0]));
  164.   applyLightPattern(BrakeArray_R, rightStrip, 0, 255, 255, sizeof(BrakeArray_R) / sizeof(BrakeArray_R[0]));
  165.  
  166. }
  167. void displayBrakingAndRightSignalLights() {
  168.   applyLightPattern(BrakeArray_L, leftStrip, 0, 255, 255, sizeof(BrakeArray_L) / sizeof(BrakeArray_L[0]));
  169.   applyLightPattern(SignalArray_R, rightStrip, 32, 255, 255, sizeof(SignalArray_R) / sizeof(SignalArray_R[0]));
  170.   applyLightPattern(MarkerArray_R, rightStrip, 32, 255, 255, sizeof(MarkerArray_R) / sizeof(MarkerArray_R[0]));
  171.  
  172. }
  173. void displayLeftSignalLightsAndRightSignalLights() {
  174.   applyLightPattern(MarkerArray_L, leftStrip, 32, 255, 255, sizeof(MarkerArray_L) / sizeof(MarkerArray_L[0]));
  175.   applyLightPattern(MarkerArray_R, rightStrip, 32, 255, 255, sizeof(MarkerArray_R) / sizeof(MarkerArray_R[0]));
  176.   applyLightPattern(SignalArray_L, leftStrip, 32, 255, 255, sizeof(SignalArray_L) / sizeof(SignalArray_L[0]));
  177.   applyLightPattern(SignalArray_R, rightStrip, 32, 255, 255, sizeof(SignalArray_R) / sizeof(SignalArray_R[0]));
  178.  
  179. }
  180.  
  181. void applyLightPattern(const uint8_t *array, CRGB *strip, uint8_t h, uint8_t s, uint8_t v, uint8_t arraySize) {
  182. for (int i = 0; i < arraySize; i++) {
  183. strip[array[i]].setHSV(h, s, v);
  184. }
  185. }
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement