Idea in my project is that after I enter a number representing a case into a serial monitor, the case should repeat until I enter different number.
There will be up to 9 cases, each with different LED blinking patterns (including MSGEQ7 graphic equalizer), but I don't think it is relevant to my problem.
Now, I tried many approaches/examples out there (while loops, if's, static and more..) but have not succeeded to making that the case would repeat/loop more than once, perhaps I did something wrong. I believe there is simple solution to this, but I just cannot find. So if anyone out there can help in any way or have questions, I'm all ears. Thank you!
int ledPin1 = 11;
int ledPin2 = 6;
int ledPin3 = 5;
void setup() {
Serial.begin(9600);
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
}
void loop () {
if (Serial.available() > 0) {
int val = Serial.read();
switch (val)
{
case '1':
digitalWrite(ledPin1, HIGH);
delay(150);
digitalWrite(ledPin1, LOW);
delay(150);
break;
case '2':
digitalWrite(ledPin2, HIGH);
delay(150);
digitalWrite(ledPin2, LOW);
delay(150);
break;
case '3':
digitalWrite(ledPin3, HIGH);
delay(150);
digitalWrite(ledPin3, LOW);
delay(150);
break;
}
}
}
You might want to be sure line endings are turned off if using serial monitor to send numbers. Bottom right of serial monitor by the baud setting dropdown.
Yes. you are right. I focused on the main logic error that the leds were illuminated only if there something in the serial buffer. Of course val should instead be declared globally.
exit status 1
'val' was not declared in this scope
I tried declaring val before if and before setup or loop (as global?), but then led's do not blink (6v6gt version). And in my version, it does not help, the case still runs once, even with static. Maybe I did it wrong, correct me if that is.
int ledPin1 = 11;
int ledPin2 = 6;
int ledPin3 = 5;
static int val = 0; or static int val; or int val = 0; or int val;
void setup() {
...
And I will add that I've been trying similar codes for a few days and I am puzzled to why it is not working.. I have idea that it might be because of the serial connection, because few months ago I tried something similar with IR and it worked, but can't find my drafts from that time.. so I am not certain..
[pre][code]
int ledPin1 = 11;
int ledPin2 = 6;
int ledPin3 = 5;
int val = 0; // declared as global var
void setup() {
Serial.begin(9600);
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
}
void loop () {
if (Serial.available() > 0) {
int val = Serial.read(); <<<< remove "int" from here
} <<<< add a brace here
switch (val)
{
case '1':
digitalWrite(ledPin1, HIGH);
delay(150);
digitalWrite(ledPin1, LOW);
delay(150);
break;
case '2':
digitalWrite(ledPin2, HIGH);
delay(150);
digitalWrite(ledPin2, LOW);
delay(150);
break;
case '3':
digitalWrite(ledPin3, HIGH);
delay(150);
digitalWrite(ledPin3, LOW);
delay(150);
break;
}
} <<< remove a brace here
}