2018-05-26 20:17:12 +00:00
|
|
|
#include <Adafruit_NeoPixel.h>
|
2018-05-10 13:57:38 +00:00
|
|
|
|
2018-05-26 20:17:12 +00:00
|
|
|
#define NUM_LEDS 40
|
|
|
|
#define PIN_STRIP 17
|
|
|
|
bool shouldUpdateLights = false;
|
2018-06-17 20:40:10 +00:00
|
|
|
uint8_t lightMode = 0;
|
2018-05-10 13:57:38 +00:00
|
|
|
|
2018-05-26 20:17:12 +00:00
|
|
|
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, PIN_STRIP, NEO_GRB + NEO_KHZ800);
|
|
|
|
|
|
|
|
void lightOff() {
|
|
|
|
for(int i = 0; i < NUM_LEDS; i++) {
|
|
|
|
pixels.setPixelColor(i, pixels.Color(0,0,0));
|
|
|
|
}
|
|
|
|
portDISABLE_INTERRUPTS();
|
|
|
|
pixels.show();
|
|
|
|
portENABLE_INTERRUPTS();
|
2018-05-10 13:57:38 +00:00
|
|
|
}
|
|
|
|
|
2018-05-26 20:17:12 +00:00
|
|
|
void lightWhite() {
|
|
|
|
for(int i = 0; i < NUM_LEDS; i++) {
|
|
|
|
pixels.setPixelColor(i, pixels.Color(180,180,180));
|
2018-05-10 13:57:38 +00:00
|
|
|
}
|
2018-05-26 20:17:12 +00:00
|
|
|
portDISABLE_INTERRUPTS();
|
|
|
|
pixels.show();
|
|
|
|
portENABLE_INTERRUPTS();
|
|
|
|
}
|
|
|
|
|
2018-06-17 20:09:05 +00:00
|
|
|
void lightPolice() {
|
|
|
|
// Temporary mode to test
|
|
|
|
for(int i = 0; i < NUM_LEDS; i++) {
|
|
|
|
pixels.setPixelColor(i, pixels.Color(0,0,180));
|
|
|
|
}
|
|
|
|
|
|
|
|
portDISABLE_INTERRUPTS();
|
|
|
|
pixels.show();
|
|
|
|
portENABLE_INTERRUPTS();
|
|
|
|
}
|
|
|
|
|
|
|
|
void lightBlinkers(bool isLeft) {
|
|
|
|
// Temporary mode to test
|
|
|
|
for(int i = 0; i < NUM_LEDS; i++) {
|
|
|
|
if(i<10 && isLeft) pixels.setPixelColor(i, pixels.Color(180,180,0));
|
|
|
|
else if(i>30 && !isLeft) pixels.setPixelColor(i, pixels.Color(180,180,0));
|
|
|
|
else pixels.setPixelColor(i, pixels.Color(180,180,180));
|
|
|
|
}
|
|
|
|
portDISABLE_INTERRUPTS();
|
|
|
|
pixels.show();
|
|
|
|
portENABLE_INTERRUPTS();
|
|
|
|
}
|
|
|
|
|
2018-05-26 20:17:12 +00:00
|
|
|
void lightBackFront() {
|
|
|
|
for(int i = 0; i < NUM_LEDS; i++) {
|
2018-06-17 20:09:05 +00:00
|
|
|
if(i<5 || i>34) pixels.setPixelColor(i, pixels.Color(190,0,0));
|
|
|
|
else pixels.setPixelColor(i, pixels.Color(180,180,180));
|
2018-05-26 20:17:12 +00:00
|
|
|
}
|
|
|
|
portDISABLE_INTERRUPTS();
|
|
|
|
pixels.show();
|
|
|
|
portENABLE_INTERRUPTS();
|
|
|
|
}
|
|
|
|
|
|
|
|
void updateLights() {
|
|
|
|
if(lightActive) {
|
2018-06-17 20:40:10 +00:00
|
|
|
Serial.println("light active");
|
2018-06-17 20:09:05 +00:00
|
|
|
switch(lightMode) {
|
|
|
|
case 0:
|
|
|
|
lightBackFront();
|
2018-06-17 20:40:10 +00:00
|
|
|
Serial.println("normal");
|
2018-06-17 20:09:05 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
lightBlinkers(true); // left
|
2018-06-17 20:40:10 +00:00
|
|
|
Serial.println("blink");
|
2018-06-17 20:09:05 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
lightBlinkers(false); // right
|
2018-06-17 20:40:10 +00:00
|
|
|
Serial.println("plink");
|
2018-06-17 20:09:05 +00:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
lightPolice();
|
2018-06-17 20:40:10 +00:00
|
|
|
Serial.println("plice");
|
2018-06-17 20:09:05 +00:00
|
|
|
break;
|
|
|
|
}
|
2018-05-26 20:17:12 +00:00
|
|
|
}else {
|
2018-06-17 20:40:10 +00:00
|
|
|
Serial.println("light inactive");
|
2018-05-26 20:17:12 +00:00
|
|
|
lightOff();
|
|
|
|
}
|
|
|
|
|
|
|
|
shouldUpdateLights = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setupLights() {
|
|
|
|
portDISABLE_INTERRUPTS();
|
|
|
|
pixels.begin();
|
|
|
|
portENABLE_INTERRUPTS();
|
|
|
|
delay(1);
|
|
|
|
lightOff();
|
2018-05-10 13:57:38 +00:00
|
|
|
}
|