Go Down

Topic: Controlling different servos simultaneously ? (Read 391 times) previous topic - next topic

joto

Jul 02, 2008, 08:28 pm Last Edit: Jul 02, 2008, 08:38 pm by joto Reason: 1
hello alltogether,

I'm bloody new to arduino & co, unfortunately lost and might need some help
with synchronising some servos.

Just shortly to understand my project:
I want to create a movable "water-tap" controlled by 3 servos.

See: http://www.freshform.de/download/Mario.mov

To get some kind of realistic behaviour/gestures, the servos need to
work all simultaneously! So I could e.g. create a circular movement out of
back/forth and left/right.

With my code so far, the functions only go one after the other, which defentitely
doesn't work for my purpose.

Code: [Select]

//int pulse = 0;        // Amount to pulse the servo
//int end = 0;
//int act =0;
//int counter=0;

/*int refreshTime = 20; // the time needed in between pulses
unsigned long lastPulse = 0;*/

//int analogValue = 0;  // the value returned from the analog sensor
//int analogPin = 0;    // the analog pin that the sensor's on
// minPulse = links ; maxPulse = rechts


//servo1
int servoPin1 = 2;     // Control pin for servo motor
int minPulse1 = 850;   // Minimum servo position
int maxPulse1 = 1400;  // Maximum servo position

//servo2
int servoPin2 = 3;     // Control pin for servo motor
int minPulse2 = 500;   // Minimum servo position
int maxPulse2 = 2400;  // Maximum servo position

//servo3
int servoPin3 = 4;     // Control pin for servo motor
int minPulse3 = 400;   // Minimum servo position
int maxPulse3 = 2400;  // Maximum servo position


void setup() {
 pinMode(servoPin1, OUTPUT);  // Set servo pin as an output pin
 pinMode(servoPin2, OUTPUT);  // Set servo pin as an output pin
 // pinMode(potPin, INPUT);  // Set servo pin as an output pin
//pulse = 1500;           // Set the motor position value to the minimum
 Serial.begin(9600);
}


void loop() {
 moveServo(servoPin1, 850, 1400,1,1,2,2);
 
 moveServo(servoPin2, 500, 2400,3,3,5,5);
}


void moveServo(int servoPin, int minPulse, int maxPulse, int v1, int v2, int d1, int d2) {

for (int i=minPulse; i<maxPulse; i = i + v1) {  
// count up

 digitalWrite(servoPin, HIGH);   // Turn the motor on
 delayMicroseconds(i);       // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW);    // Turn the motor off
 delay(d1);
}
 for (int i=maxPulse; i>minPulse; i = i - v2) {  
// count down

 digitalWrite(servoPin, HIGH);   // Turn the motor on
 delayMicroseconds(i);       // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW);    // Turn the motor off
 delay(d2);

}
}

/*
void moveServo1() {

for (int i=minPulse; i<maxPulse; i = i + 1) {  
// count up

 digitalWrite(servoPin, HIGH);   // Turn the motor on
 delayMicroseconds(i);       // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW);    // Turn the motor off
 delay(2);
}
 for (int i=maxPulse; i>minPulse; i = i - 1) {  
// count down

 digitalWrite(servoPin, HIGH);   // Turn the motor on
 delayMicroseconds(i);       // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW);    // Turn the motor off
 delay(2);

}
}
}*/

/*

void moveServo2() {

for (int i=minPulse; i<maxPulse; i = i + 3) {  
// count up

 digitalWrite(servoPin, HIGH);   // Turn the motor on
 delayMicroseconds(i);       // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW);    // Turn the motor off
 delay(5);
}
 for (int i=maxPulse; i>minPulse; i = i - 3) {  
// count down

 digitalWrite(servoPin, HIGH);   // Turn the motor on
 delayMicroseconds(i);       // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW);    // Turn the motor off
 delay(5);

}
}*/




Does anyone has an idea, understandable for a beginner like me?

tx for all thinking
joto

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy