// (all), (green), (blue), (red), (none)- turns lights either on or off
// (red, blue, green) or (green, blue, red) or (blue, green, red) or (blue, red, green) or (green, red, blue) or (red, green, blue)- turns three lights on in that order
// (blue and green), (green and red), (red and blue)-(doesnt matter what order)- turns two lights on at once
// (flash)- flashes lights, will ask you for number of times to flash
String ledColour;
String msg = "What colour LED do you want to turn on?";
String msg2 = " LED has turned on!";
int redPin = 7;
int bluePin = 6;
int greenPin = 5;
int delayTime = 200;
int j;
String msg3 = "LED will flash ";
int myNumber;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
Serial.println("(all), (green), (blue), (red), (none)- turns lights either on or off");
Serial.println("(red, blue, green) or (green, blue, red) or (blue, green, red) or (blue, red, green) or (green, red, blue) or (red, green, blue)- turns three lights on in that order");
Serial.println("(blue and green), (green and red), (red and blue)-(doesnt matter what order)- turns two lights on at once");
Serial.println("(flash)- flashes lights, will ask you for number of times to flash");
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(msg);
while (Serial.available() == 0) {
}
ledColour = Serial.readString();
if (ledColour == "red" || ledColour == "Red") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("Red");
Serial.println(msg2);
}
if (ledColour == "blue" || ledColour == "Blue") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("Blue");
Serial.println(msg2);
}
if (ledColour == "green" || ledColour == "Green") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("Green");
Serial.println(msg2);
}
if (ledColour == "none" || ledColour == "None") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("No");
Serial.println(msg2);
}
if (ledColour == "all" || ledColour == "All") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("All");
Serial.println(msg2);
}
if (ledColour == "blue and green" || ledColour == "green and blue") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("blue and green");
Serial.println(msg2);
}
if (ledColour == "blue and red" || ledColour == "red and blue") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("red and blue");
Serial.println(msg2);
}
if (ledColour == "red and green" || ledColour == "green and red") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("green and red");
Serial.println(msg2);
}
if (ledColour == "flash" || ledColour == "Flash") {
Serial.println("How many times?");
while (Serial.available() == 0) {
}
myNumber = Serial.parseInt();
Serial.print(msg3);
Serial.print(myNumber);
Serial.println(" times");
for (j = 1; j <= myNumber; j = j + 1) {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
}
}
if (ledColour == "red, blue, green" || ledColour == "Red, Blue, Green") {
Serial.println("LED will go red-blue-green");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
}
if (ledColour == "green, blue, red" || ledColour == "Green, Blue, Red") {
Serial.println("LED will go green-blue-red");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
}
if (ledColour == "blue, red, green" || ledColour == "Blue, Red, Green") {
Serial.println("LED will go blue-red-green");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
}
if (ledColour == "blue, green, red" || ledColour == "Blue, Green, Red") {
Serial.println("LED will go blue-green-red");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
}
if (ledColour == "green, red, blue" || ledColour == "Green, Red, Blue") {
Serial.println("LED will go green-red-blue");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
}
if (ledColour == "red, green, blue" || ledColour == "Red, Green, Blue") {
Serial.println("LED will go red-green-blue");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
}
}
Welcome to the forum
Your topic was MOVED to its current forum category which is more appropriate than the original as it has nothing to do with avrdude
What exactly do you mean when you say that your for loops are not working. How does the problem manifest itself ?
did you try print?
ledColour = Serial.readString();`
Serial.println( ledColour);
?
From the documentation for readString you will note this warning...
Most likely your string contains CR or LF characters.
Try using (for example)
if(ledColour.indexOf("red") >= 0 || ledColour.indexOf("Red") >= 0)
yeah it printed it and it read the input of the serial monitor properly but i previously tried using an if statement in another piece of code and that didnt work either, so all of a sudden its stopped working and i dont know if its to do with the software or the board.
I just tried it and didnt seem to work
Please post your latest code.
i accidentally said for loops at the start, was meant to say if statements, sorry
// (all), (green), (blue), (red), (none)- turns lights either on or off
// (red, blue, green) or (green, blue, red) or (blue, green, red) or (blue, red, green) or (green, red, blue) or (red, green, blue)- turns three lights on in that order
// (blue and green), (green and red), (red and blue)-(doesnt matter what order)- turns two lights on at once
// (flash)- flashes lights, will ask you for number of times to flash
String ledColour;
String msg = "What colour LED do you want to turn on?";
String msg2 = " LED has turned on!";
int redPin = 7;
int bluePin = 6;
int greenPin = 5;
int delayTime = 200;
int j;
String msg3 = "LED will flash ";
int myNumber;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
Serial.println("(all), (green), (blue), (red), (none)- turns lights either on or off");
Serial.println("(red, blue, green) or (green, blue, red) or (blue, green, red) or (blue, red, green) or (green, red, blue) or (red, green, blue)- turns three lights on in that order");
Serial.println("(blue and green), (green and red), (red and blue)-(doesnt matter what order)- turns two lights on at once");
Serial.println("(flash)- flashes lights, will ask you for number of times to flash");
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(msg);
while (Serial.available() == 0) {
}
ledColour = Serial.readString();
if (ledColour.indexOf("red") >= 0 || ledColour.indexOf("Red") >= 0) {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("Red");
Serial.println(msg2);
}
if (ledColour == "blue" || ledColour == "Blue") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("Blue");
Serial.println(msg2);
}
if (ledColour == "green" || ledColour == "Green") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("Green");
Serial.println(msg2);
}
if (ledColour == "none" || ledColour == "None") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("No");
Serial.println(msg2);
}
if (ledColour == "all" || ledColour == "All") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("All");
Serial.println(msg2);
}
if (ledColour == "blue and green" || ledColour == "green and blue") {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("blue and green");
Serial.println(msg2);
}
if (ledColour == "blue and red" || ledColour == "red and blue") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
delay(delayTime);
Serial.print("red and blue");
Serial.println(msg2);
}
if (ledColour == "red and green" || ledColour == "green and red") {
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
delay(delayTime);
Serial.print("green and red");
Serial.println(msg2);
}
if (ledColour == "flash" || ledColour == "Flash") {
Serial.println("How many times?");
while (Serial.available() == 0) {
}
myNumber = Serial.parseInt();
Serial.print(msg3);
Serial.print(myNumber);
Serial.println(" times");
for (j = 1; j <= myNumber; j = j + 1) {
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
}
}
if (ledColour == "red, blue, green" || ledColour == "Red, Blue, Green") {
Serial.println("LED will go red-blue-green");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
}
if (ledColour == "green, blue, red" || ledColour == "Green, Blue, Red") {
Serial.println("LED will go green-blue-red");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
}
if (ledColour == "blue, red, green" || ledColour == "Blue, Red, Green") {
Serial.println("LED will go blue-red-green");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
}
if (ledColour == "blue, green, red" || ledColour == "Blue, Green, Red") {
Serial.println("LED will go blue-green-red");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
}
if (ledColour == "green, red, blue" || ledColour == "Green, Red, Blue") {
Serial.println("LED will go green-red-blue");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
}
if (ledColour == "red, green, blue" || ledColour == "Red, Green, Blue") {
Serial.println("LED will go red-green-blue");
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(redPin, HIGH);
delay(delayTime);
digitalWrite(greenPin, HIGH);
delay(delayTime);
digitalWrite(bluePin, HIGH);
delay(delayTime);
digitalWrite(redPin, LOW);
delay(delayTime);
digitalWrite(greenPin, LOW);
delay(delayTime);
digitalWrite(bluePin, LOW);
}
}
You've only changed one line... for "red". Does the check for red work?
You need to change all lines where you check the value of ledColour.
Also... given some of your later checks also contain the the word "red"... like "blue and red" you are probably better you do those checks first, and use else if between the various if statements.
Alternatively just change the readString to readStringUntil('\r') then you can leave your code as is. (Assumes you're not using LF as your line ending).
Oh wow thank you so much it’s working now
I used this exact same code last year without the changes that I just made and it worked perfectly fine, how come it’s not working now?
You probably had “no line ending” set in the Serial Monitor.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.