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.

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.


Arduino Forum > Using Arduino > Programming Questions > Ramping / Easing servo between points


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial