Hi,
Is it possible to assign a variable to a servo. So that I could change what that variable meant. So say that my variable is named "ServoVariable" (very original). Could I control "Servo1", by calling on ServoVariable if I had declared that Servo1 is equal to ServoVariable. But than in another part of the program separate from the part where I declared ServoVariable as being Servo1, but rather ServoVariable was now equal to "Servo2".
Assign symbols (values) to the meanings "Servo1" and "Servo2" then have a variable that is assigned one of these meanings. You might want a "ServoNone" as well. You might want to look up the "enum" keyword, it does this sort of thing. Old school C programmers like myself use #define.
The 1 > 2 was just as an example.
I'm trying to write as little code as possible. So I can write a function, that can be used throughout the whole code and just change what the "ServoVariable" is declared as to change what it does.
The problem I having is that I'm only wanting to define the angle in the switch case. And then the Servo used in the if statements. So the switch case angles stay the same, but the servo used changes.
The spaces in between the "moveServo( , 10);" is me leaving the servo part blank, for it to be defined later. And the "moveServo(Servo2, );" is leaving for the next statement "test();" to define the angle.
The problem I having is that I'm only wanting to define the angle in the switch case.
The problem is that you have unrealistic expectations. If you want to define a "current servo", and have an moveTheCurrentServo() calls move the current servo, you need to approach the problem completely differently.
You've been given enough hints to do that. There is nothing magic about a Servo instance that makes it different from an int.
Servo s1;
Servo s2;
Servo* p;
s1.attach(PIN1); // some arbitrary pin number
s2.attach(PIN2); // some arbitrary pin number
p = &s1; // now p points to s1
p->write(180); // write 180 to s1
p = &s2; // now p points to s2
p->write(0); // write 0 to s2
Lc324:
The problem I having is that I'm only wanting to define the angle in the switch case. And then the Servo used in the if statements. So the switch case angles stay the same, but the servo used changes.
If the servos are defined as an array (I showed how earlier) then you can use the index to the array to choose which one to use. For example
Not sure as to what the maim question is, but below is some servo test code for multiple servos.
//zoomkat 11-22-12 simple delimited ',' string parse
//from serial port input (via serial monitor)
//and print result out serial port
//multi servos added
String readString;
#include <Servo.h>
Servo myservoa, myservob, myservoc, myservod; // create servo object to control a servo
void setup() {
Serial.begin(9600);
//myservoa.writeMicroseconds(1500); //set initial servo position if desired
myservoa.attach(6); //the pin for the servoa control
myservob.attach(7); //the pin for the servob control
myservoc.attach(8); //the pin for the servoc control
myservod.attach(9); //the pin for the servod control
Serial.println("multi-servo-delimit-test-dual-input-11-22-12"); // so I can keep track of what is loaded
}
void loop() {
//expect single strings like 700a, or 1500c, or 2000d,
//or like 30c, or 90a, or 180d,
//or combined like 30c,180b,70a,120d,
if (Serial.available()) {
char c = Serial.read(); //gets one byte from serial buffer
if (c == ',') {
if (readString.length() >1) {
Serial.println(readString); //prints string to serial port out
int n = readString.toInt(); //convert readString into a number
// auto select appropriate value, copied from someone elses code.
if(n >= 500)
{
Serial.print("writing Microseconds: ");
Serial.println(n);
if(readString.indexOf('a') >0) myservoa.writeMicroseconds(n);
if(readString.indexOf('b') >0) myservob.writeMicroseconds(n);
if(readString.indexOf('c') >0) myservoc.writeMicroseconds(n);
if(readString.indexOf('d') >0) myservod.writeMicroseconds(n);
}
else
{
Serial.print("writing Angle: ");
Serial.println(n);
if(readString.indexOf('a') >0) myservoa.write(n);
if(readString.indexOf('b') >0) myservob.write(n);
if(readString.indexOf('c') >0) myservoc.write(n);
if(readString.indexOf('d') >0) myservod.write(n);
}
readString=""; //clears variable for new input
}
}
else {
readString += c; //makes the string readString
}
}
}