Society of Robots - Robot Forum
Software => Software => Topic started by: V!KR@M on August 09, 2012, 01:00:13 PM
-
Hello everyone, I'm new to robotics and i'm trying to write a line follower robot code using switch case
The problem comes with case statement. That is if i use 3 line sensors, i get 3 inputs. So how can i write switch case for different cases? Like.. case 101:
break;
case 110:
break;
Before going ahead, the code i have tried for testing:
int s[1]; //2 sensors
void setup()
{
pinMode(2, INPUT);
pinMode(12, INPUT);
pinMode(13, OUTPUT);
}
void loop()
{
s[0]= digitalRead(2);
s[1]= digitalRead(12);
switch (s[])
{
case {1,0}:
digitalWrite(13, LOW);//led connected to pin 13
break;
case {1,1}:
digitalWrite(13, HIGH);
break;
}
}
But it shows the error : expected primary expression before ']' token.
Looks like the switch statement doesn't take array.
Is there a way to do with switch case or it's not possible? How to combine all the inputs from sensors and put it in switch statement?
I hope i have expressed properly. Any help would be appreciated.
Sorry for my bad english
-
The switch statement expects a reference to a value to compare to your case. Thus, it can use an array, but only if it knows exactly to what index refer to. What I mean is that the switch does not now what value from your array to use for comparison. The switch statement works with a single variable, and an array is basically a collection of variables.
-
You can not use an array with a case statement. The easiest method would be to convert your input data into a single int using shift and add. Here is a modified verions of your original code.
int s; //2 sensors
void setup()
{
pinMode(2, INPUT);
pinMode(12, INPUT);
pinMode(13, OUTPUT);
}
void loop()
{
s = digitalRead(2); //Read Pin 2 into s
s = (s << 1) + digitalRead(12); //Shift s one and add pin 12
//At this point s contains a value from 0 - 3 which is a 2 bit representation of the two pins.
//Use s in your switch statement and act on it as a single int.
switch (s)
{
case 0: // This is the { 0,0 } case
break;
case 1: // This is the { 0,1 } case
break;
case 2: //This is the { 1,0 } case
digitalWrite(13, LOW);//led connected to pin 13
break;
case 3: //This is the { 1,1 } case.
digitalWrite(13, HIGH);
break;
default:
break
}
}
Hope this helps
-
You can not use an array with a case statement. The easiest method would be to convert your input data into a single int using shift and add. Here is a modified verions of your original code.
int s; //2 sensors
void setup()
{
pinMode(2, INPUT);
pinMode(12, INPUT);
pinMode(13, OUTPUT);
}
void loop()
{
s = digitalRead(2); //Read Pin 2 into s
s = (s << 1) + digitalRead(12); //Shift s one and add pin 12
//At this point s contains a value from 0 - 3 which is a 2 bit representation of the two pins.
//Use s in your switch statement and act on it as a single int.
switch (s)
{
case 0: // This is the { 0,0 } case
break;
case 1: // This is the { 0,1 } case
break;
case 2: //This is the { 1,0 } case
digitalWrite(13, LOW);//led connected to pin 13
break;
case 3: //This is the { 1,1 } case.
digitalWrite(13, HIGH);
break;
default:
break
}
}
Hope this helps
Ok i understand. But does it do a binary addition or decimal addition?
Like what does it do when it comes across an addition like 101+1. Does it give 110 or 102?
-
Ok i understand. But does it do a binary addition or decimal addition?
Like what does it do when it comes across an addition like 101+1. Does it give 110 or 102?
There really isn't a such thing as binary addition or decimal addition. There is only "addition". What you are asking about, is what kind of value does s represent, a decimal or binary number. In the case of the example I posted, think of all of the additions as being "decimal addition".