#define NUMELEMENTS(x) (sizeof(x) / sizeof(x[0]))
struct COLOR {
String name;
int red;
int green;
int blue;
};
COLOR colors[] = {
{"red", 255, 0, 0},
{"green", 0, 255, 0},
{"blue", 0, 0, 255},
{"off", 0, 0, 0},
{"yellow", 255, 255, 0},
{"cyan", 92, 255, 255},
{ "magneta", 255, 0, 255},
{"aqua", 0, 255, 255}
};
byte redPin = 11;
byte greenPin = 10;
byte bluePin = 9;
String myColor;
bool found = false;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Which colour do you want to see?");
// Wait until user input is available
while (Serial.available() == 0) {}
myColor = Serial.readString();
for (uint8_t cnt = 0; cnt < NUMELEMENTS(colors) ; cnt++) {
if (colors[cnt].name == myColor) {
showLeds(colors[cnt].red, colors[cnt].green, colors[cnt].blue);
found = true;
break;
}
}
if (!found) {
Serial.println("");
Serial.println("I do not know that color");
Serial.println("");
showLeds(0, 0, 0);
} else {
found = false;
}
}
void showLeds(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(bluePin, blue);
analogWrite(greenPin, green);
}