Advertisement
Oc3

Motolights V3 - No Fancy signal Animations Yet

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