223 lines
4.7 KiB
C++
223 lines
4.7 KiB
C++
#define ledStripPinR 5
|
|
#define ledStripPinG 6
|
|
#define ledStripPinB 9
|
|
|
|
int currentLedR = 0;
|
|
int currentLedG = 0;
|
|
int currentLedB = 0;
|
|
|
|
int targetLedR = 0;
|
|
int targetLedG = 0;
|
|
int targetLedB = 0;
|
|
|
|
int fadeDelay = 5;
|
|
|
|
// Modes:
|
|
// 0 = Off
|
|
// 1 = Static
|
|
// 2 = Fade
|
|
// 3 = Dynamic
|
|
int currentMode = 2;
|
|
|
|
void handleLedStrip () {
|
|
|
|
// Check if we need to handle target colors
|
|
if (currentLedR == targetLedR && currentLedG == targetLedG && currentLedB == targetLedB) {
|
|
return;
|
|
}
|
|
|
|
// Check which mode we are in, and change values based on that
|
|
if (currentMode == 1) {
|
|
// Static Mode
|
|
analogWrite(ledStripPinR, targetLedR);
|
|
analogWrite(ledStripPinG, targetLedG);
|
|
analogWrite(ledStripPinB, targetLedB);
|
|
}
|
|
|
|
if (currentMode == 2) {
|
|
// Fade Mode
|
|
|
|
//
|
|
// Red
|
|
//
|
|
|
|
// Target val is greater, add to current led value
|
|
if (targetLedR > currentLedR) {
|
|
currentLedR = currentLedR + 1;
|
|
}
|
|
|
|
// Target val is smaller, remove from current led value
|
|
if (targetLedR < currentLedR) {
|
|
currentLedR = currentLedR - 1;
|
|
}
|
|
|
|
//
|
|
// Green
|
|
//
|
|
|
|
// Target val is greater, add to current led value
|
|
if (targetLedG > currentLedG) {
|
|
currentLedG = currentLedG + 1;
|
|
}
|
|
|
|
// Target val is smaller, remove from current led value
|
|
if (targetLedG < currentLedG) {
|
|
currentLedG = currentLedG - 1;
|
|
}
|
|
|
|
//
|
|
// Blue
|
|
//
|
|
|
|
// Target val is greater, add to current led value
|
|
if (targetLedB > currentLedB) {
|
|
currentLedB = currentLedB + 1;
|
|
}
|
|
|
|
// Target val is smaller, remove from current led value
|
|
if (targetLedB < currentLedB) {
|
|
currentLedB = currentLedB - 1;
|
|
}
|
|
|
|
analogWrite(ledStripPinR, currentLedR);
|
|
analogWrite(ledStripPinG, currentLedG);
|
|
analogWrite(ledStripPinB, currentLedB);
|
|
|
|
if (currentLedR == targetLedR && currentLedG == targetLedG && currentLedB == targetLedB) {
|
|
char deviceUUID[10] = "34gr-54jf";
|
|
char command[20] = "target_reached";
|
|
char data[69] = "0";
|
|
sendSerialCommand(deviceUUID, command, data);
|
|
}
|
|
|
|
delay(fadeDelay);
|
|
}
|
|
|
|
}
|
|
|
|
void ledStripCommand(char* deviceUUID, char* command, char* data) {
|
|
if (strcmp(command, "clear_color") == 0) {
|
|
targetLedR = 0;
|
|
targetLedG = 0;
|
|
targetLedB = 0;
|
|
}
|
|
|
|
if (strcmp(command, "set_color") == 0) {
|
|
setColor(data);
|
|
}
|
|
|
|
if (strcmp(command, "set_mode") == 0) {
|
|
setMode(data);
|
|
}
|
|
|
|
if (strcmp(command, "set_mode") == 0) {
|
|
setMode(data);
|
|
}
|
|
|
|
if (strcmp(command, "set_fade_delay") == 0) {
|
|
setFadeDelay(data);
|
|
}
|
|
}
|
|
|
|
void setColor(char* dataBuffer) {
|
|
char * strtokIndex;
|
|
char rValueRaw[4];
|
|
char gValueRaw[4];
|
|
char bValueRaw[4];
|
|
|
|
// Get Red Value
|
|
strtokIndex = strtok(dataBuffer, ",");
|
|
strcpy(rValueRaw, strtokIndex);
|
|
|
|
// Get Green Value
|
|
strtokIndex = strtok(NULL, ",");
|
|
strcpy(gValueRaw, strtokIndex);
|
|
|
|
// Get Blue Value
|
|
strtokIndex = strtok(NULL, ",");
|
|
strcpy(bValueRaw, strtokIndex);
|
|
|
|
targetLedR = atoi(rValueRaw);
|
|
targetLedG = atoi(gValueRaw);
|
|
targetLedB = atoi(bValueRaw);
|
|
}
|
|
|
|
void setMode(char* dataBuffer) {
|
|
if (strcmp(dataBuffer, "static") == 0) {
|
|
currentMode = 1;
|
|
}
|
|
|
|
if (strcmp(dataBuffer, "fade") == 0) {
|
|
currentMode = 2;
|
|
}
|
|
}
|
|
|
|
void setFadeDelay(char* dataBuffer) {
|
|
fadeDelay = atoi(dataBuffer);
|
|
}
|
|
|
|
void initLedStrip() {
|
|
|
|
// Define Pin Outputs
|
|
pinMode(ledStripPinR, OUTPUT);
|
|
pinMode(ledStripPinG, OUTPUT);
|
|
pinMode(ledStripPinB, OUTPUT);
|
|
|
|
// Write 0 to all rgbs
|
|
analogWrite(ledStripPinR, 0);
|
|
analogWrite(ledStripPinG, 0);
|
|
analogWrite(ledStripPinB, 0);
|
|
|
|
// Loop Each Color
|
|
//
|
|
|
|
// Red
|
|
for (int colorIndex = 0; colorIndex < 256; colorIndex++) {
|
|
analogWrite(ledStripPinR, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
for (int colorIndex = 255; colorIndex > -1; colorIndex--) {
|
|
analogWrite(ledStripPinR, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
// Green
|
|
for (int colorIndex = 0; colorIndex < 256; colorIndex++) {
|
|
analogWrite(ledStripPinG, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
for (int colorIndex = 255; colorIndex > -1; colorIndex--) {
|
|
analogWrite(ledStripPinG, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
// Blue
|
|
for (int colorIndex = 0; colorIndex < 256; colorIndex++) {
|
|
analogWrite(ledStripPinB, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
for (int colorIndex = 255; colorIndex > -1; colorIndex--) {
|
|
analogWrite(ledStripPinB, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
// All
|
|
for (int colorIndex = 0; colorIndex < 256; colorIndex++) {
|
|
analogWrite(ledStripPinR, colorIndex);
|
|
analogWrite(ledStripPinG, colorIndex);
|
|
analogWrite(ledStripPinB, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
for (int colorIndex = 255; colorIndex > -1; colorIndex--) {
|
|
analogWrite(ledStripPinR, colorIndex);
|
|
analogWrite(ledStripPinG, colorIndex);
|
|
analogWrite(ledStripPinB, colorIndex);
|
|
delay(3);
|
|
}
|
|
|
|
}
|