Ramping / Easing servo between points
first time poster, long time reader. let me start saying appreciate can offer me. new this, have been able learn these forums.
let me begin letting know have accomplished. have servo can moved forward button, button , 2 more buttons set "markers". when switch high, pressing marker button sets marker current position of servo. when switch low, pressing marker button move servo marker. there pot controls speed.
what i'm having trouble (by "trouble" mean "i have no idea begin") when traveling between 2 marker positions servo accelerate speed, continue traveling @ speed , decelerate stop. "ramping" effected speed. said, appreciated. time.
let me begin letting know have accomplished. have servo can moved forward button, button , 2 more buttons set "markers". when switch high, pressing marker button sets marker current position of servo. when switch low, pressing marker button move servo marker. there pot controls speed.
what i'm having trouble (by "trouble" mean "i have no idea begin") when traveling between 2 marker positions servo accelerate speed, continue traveling @ speed , decelerate stop. "ramping" effected speed. said, appreciated. time.
code: [select]
#include <servo.h>
servo myservo; // servo
int potpin = 0; // analog pin potentiometer
int delayset; // delay speed, controlled analog pot
int marker1 = 120; // initial value of marker1
int marker2 = 40; // initial value of marker2
const int bpin1 = 7; // marker1 button pin
const int bpin2 = 6; // marker2 button pin
const int bpin3 = 3; // forward button pin
const int bpin4 = 8; // button pin
const int switchpin = 5; // switch pin
int b1 = 0; // marker1 button
int b2 = 0; // marker2 button
int b3 = 0; // forward button
int b4 = 0; // button
int switch = 0; // switch
int pos = 90; // servo position
void setup()
{
myservo.attach(9);
pinmode(bpin1, input);
pinmode(bpin2, input);
pinmode(bpin3, input);
pinmode(bpin4, input);
pinmode(switchpin, input);
}
void loop()
{
delayset = analogread(potpin);
delayset = map(delayset, 0, 1023, 40, 0);
b1 = digitalread(bpin1);
b2 = digitalread(bpin2);
b3 = digitalread(bpin3);
b4 = digitalread(bpin4);
switch = digitalread(switchpin);
if (b1 == low && switch == low) { // if marker1 button pressed in run mode
for(int = pos; < marker1; ++) // if current position less marker1 travel forward
{
myservo.write(i);
delay(delayset); // speed @ travel
pos ++; // tell position variable are
}
for(int = pos; > marker1; --) // if current position greater marker1 travel backward
{
myservo.write(i);
delay(delayset); // speed @ travel
pos --; // tell position variable are
}
}
else if (b2 == low && switch == low) {
for(int = pos; < marker2; ++) // if current position less marker1 travel forward
{
myservo.write(i);
delay(delayset); // speed @ travel
pos ++; // tell position variable are
}
for(int = pos; > marker2; --) // if current position greater marker1 travel backward
{
myservo.write(i);
delay(delayset); // speed @ travel
pos --; // tell position variable are
}
}
if (b1 == low && switch == high) { // if marker1 button pressed set marker1 current position
marker1 = pos;
}
else if (b2 == low && switch == high) { // if marker2 button pressed set marker2 current position
marker2 = pos;
}
if (b3 == low) { // if button pressed, go
pos = pos --;
}
if (b4 == low){ // if forward button pressed, go forward
pos = pos ++;
}
if (pos < 1) // if current position less 1 position equals 1 ( min limit of servo )
pos=1;
if (pos > 167) // if current position greater 169 position equals 169 ( max limit of servo )
pos=167;
myservo.write(pos); // write current position servo
delay(delayset); // delay writes servo (speed)
}
so, want variable delay(), rather fixed delay(). there various ways this.the simplest use if statement, based in loop index, determine value use in delay statement.
since servo doesn't see benefit in starting , stopping different periods of time, i'm not sure benefit gain. depends on servos controlling, guess.
since servo doesn't see benefit in starting , stopping different periods of time, i'm not sure benefit gain. depends on servos controlling, guess.
Arduino Forum > Using Arduino > Programming Questions > Ramping / Easing servo between points
arduino
Comments
Post a Comment