Slowing down servo's
hi guys
i new arduino (5 days in
)
i have put code control 4 legged bot (quadbot). want slow movement down slowing servos.
is possible without having re-write code? want use pot4 control speed (0 being fastest , 450 slowest) , reverse when going backwards(ie. 1021 fastest , 650 slowest) while still giving "forward" or "backward" instruction throught pot4. pot4 returns "center" value servo speed must reset.
below code wrote (only been coding of 5 days
), please give example well.
(the code below work @ fixed speed. tested , confirmed.)
thanks, appreciated.
i new arduino (5 days in
![cheesy :d](https://forum.arduino.cc/smileys/arduino/cheesy.gif)
i have put code control 4 legged bot (quadbot). want slow movement down slowing servos.
is possible without having re-write code? want use pot4 control speed (0 being fastest , 450 slowest) , reverse when going backwards(ie. 1021 fastest , 650 slowest) while still giving "forward" or "backward" instruction throught pot4. pot4 returns "center" value servo speed must reset.
below code wrote (only been coding of 5 days
![smiley-mr-green :smiley-mr-green:](https://forum.arduino.cc/smileys/arduino/smiley-mr-green.png)
(the code below work @ fixed speed. tested , confirmed.)
code: [select]
#include <servo.h>
//serov's//
servo frh; //front right hip//
servo frk; //front right knee//
servo brh; //back right hip//
servo brk; //back right knee//
servo flh; //front left hip//
servo flk; //front left knee//
servo blh; //back left hip//
servo blk; //back left knee//
//local constants , variables//
const int pot4 = a3; //forwards backwards - left pot//
const int pot4c = 546; //the center position of pot.( 0 - 1021 range)//
int speed=50; //the delay between movements//
int swing=500; //the amount of lateral movement//
int lift=300; //the amount vertical movement//
int stretch=500; //knee movement stretch//
int val4; //used store controller position//
int flhcenter = 1350;
int frhcenter = 1350;
int blhcenter = 1350;
int brhcenter = 1300;
int flkcenter = 1500; //these servo centering positions read constants.h//
int frkcenter = 1350;
int blkcenter = 1150;
int brkcenter = 1200;
void setup() {
serial.begin(9600);
//attach seros pwm outputs - mega//
flk.attach(2); //flk red//
frh.attach(3); //frh purple//
brh.attach(4); //brh black//
blh.attach(5); //blh green//
flh.attach(6); //flh blue//
frk.attach(7); //frk brown//
blk.attach(8); //blk yellow//
brk.attach(9); //brk white//
// centering servo's//
flh.writemicroseconds(flhcenter); //front left hip//
frh.writemicroseconds(frhcenter); //front right hip//
blh.writemicroseconds(blhcenter); //back left hip//
brh.writemicroseconds(brhcenter); //back right hip//
flk.writemicroseconds(flkcenter); //front left knee//
frk.writemicroseconds(frkcenter); //front right knee//
blk.writemicroseconds(blkcenter); //back left knee//
brk.writemicroseconds(brkcenter); //back right knee//
delay(1000);
}
void loop(){
analogread(pot4); //a3 left thumb frowards-backwards//
val4 = analogread(pot4);
if (val4 < (pot4c-2)){
forwards();
}
else if (val4 > (pot4c+20)){
backwards();
}
else {
center();
}
delay(10);
}
void center(){
flh.writemicroseconds(flhcenter);
frh.writemicroseconds(frhcenter);
blh.writemicroseconds(blhcenter);
brh.writemicroseconds(brhcenter);
flk.writemicroseconds(flkcenter);
frk.writemicroseconds(frkcenter);
blk.writemicroseconds(blkcenter);
brk.writemicroseconds(brkcenter);
}
void forwards(){
flk.writemicroseconds(flkcenter-lift);
brk.writemicroseconds(brkcenter-lift);
delay(speed);
flh.writemicroseconds(flhcenter+swing);
brh.writemicroseconds(brhcenter-swing);
delay(speed);
flk.writemicroseconds(flkcenter);
brk.writemicroseconds(brkcenter);
delay(speed);
flh.writemicroseconds(flhcenter);
brh.writemicroseconds(brhcenter);
delay(speed);
frk.writemicroseconds(frkcenter-lift);
blk.writemicroseconds(blkcenter-lift);
delay(speed);
frh.writemicroseconds(frhcenter-swing);
blh.writemicroseconds(blhcenter+swing);
delay(speed);
frk.writemicroseconds(frkcenter);
blk.writemicroseconds(blkcenter);
delay(speed);
frh.writemicroseconds(frhcenter);
blh.writemicroseconds(blhcenter);
delay(speed);
}
void backwards(){
flk.writemicroseconds(flkcenter-lift);
brk.writemicroseconds(brkcenter-lift);
delay(speed);
flh.writemicroseconds(flhcenter-swing);
brh.writemicroseconds(brhcenter+swing);
delay(speed);
flk.writemicroseconds(flkcenter);
brk.writemicroseconds(brkcenter);
delay(speed);
flh.writemicroseconds(flhcenter);
brh.writemicroseconds(brhcenter);
delay(speed);
frk.writemicroseconds(frkcenter-lift);
blk.writemicroseconds(blkcenter-lift);
delay(speed);
frh.writemicroseconds(frhcenter+swing);
blh.writemicroseconds(blhcenter-swing);
delay(speed);
frk.writemicroseconds(frkcenter);
blk.writemicroseconds(blkcenter);
delay(speed);
frh.writemicroseconds(frhcenter);
blh.writemicroseconds(blhcenter);
delay(speed);
}
thanks, appreciated.
have tried adjusting 'speed' variable based on value of pot? decrease move away center?
Arduino Forum > Using Arduino > Project Guidance > Slowing down servo's
arduino
Comments
Post a Comment