#include <Adafruit_NeoPixel.h>
#define LEDPIN 3
#define PIXEL_COUNT 16
int preRpmCount;
int rpmCount;
int preBrightness;
int brightness;
int mode;
bool blinkStart;
bool blinkOn;
unsigned long blinkOnTime;
unsigned long blinkOffTime;
unsigned long now;
char a;
Adafruit_NeoPixel RPM (PIXEL_COUNT, LEDPIN, NEO_GRB + NEO_KHZ800);
uint32_t color[PIXEL_COUNT] = {
0x00ff00, 0x3fff00, 0x7fff00, 0xafff00,
0xffff00, 0xffaf00, 0xff7f00, 0xff3f00,
0xff0000, 0xff003f, 0xff007f, 0xff00af,
0xff00ff, 0xaa00ff, 0x5500ff, 0x0000ff
};
void setup() {
Serial.begin(9600);
Serial.println("begin!");
preRpmCount = 0;
rpmCount = 0;
preBrightness = 255;
brightness = 255;
blinkStart = 0;
blinkOn = 0;
blinkOnTime = 0;
blinkOffTime = 0;
now = 0;
RPM.begin();
RPM.show();
}
void CurRPM(int count){
if (count == 0){
RPM.clear();
RPM.show();
if(blinkStart){blinkStart = 0;}
}
else if(count <= PIXEL_COUNT){
for (int i = 0; i < count; i++){RPM.setPixelColor(i, color[i]);}
RPM.fill(0, count, PIXEL_COUNT - count);
RPM.show();
if(blinkStart){blinkStart = 0;}
}
else if (count > PIXEL_COUNT){
blinkStart = 1;
}
}
void blink(){
if (!blinkOn){
now = millis();
if ((now - blinkOffTime) > 50){
RPM.fill(0xff0000, 0, PIXEL_COUNT);
RPM.show();
blinkOnTime = millis();
blinkOn = 1;
}
}
else if (blinkOn){
now = millis();
if ((now - blinkOnTime) > 200){
RPM.clear();
RPM.show();
blinkOffTime = millis();
blinkOn = 0;
}
}
}
void loop() {
if(Serial.available()){
/*
String rpmCountString = Serial.readStringUntil(';');
Serial.print("String RPM is: ");Serial.println(rpmCountString);
rpmCount = rpmCountString.toInt();
Serial.print("Int RPM is: ");Serial.println(rpmCount);
String brightnessString = Serial.readStringUntil(';');
Serial.print("String brightness is: ");Serial.println(brightnessString);
brightness = brightnessString.toInt();
Serial.print("Int brightness is: ");Serial.println(brightness);
*/
rpmCount = Serial.readStringUntil('R').toInt();
Serial.print("Current RPM light is: ");Serial.println(rpmCount);
//delay(5);
brightness = Serial.readStringUntil('B').toInt();
Serial.print("Current brightness is: ");Serial.println(brightness);
//delay(5);
mode = Serial.readStringUntil('M').toInt();
Serial.print("Current mode is: ");Serial.println(mode);
delay(5);
while (Serial.available() > 0){
a = Serial.read();
}
}
if (brightness != preBrightness && brightness >= 0 && brightness<256){
preBrightness = brightness;
RPM.setBrightness(brightness);
}
if (preRpmCount != rpmCount){
preRpmCount = rpmCount;
CurRPM(rpmCount);
}
if (blinkStart){
blink();
}
}