Control motor cc joystick

Saludos a la comunidad.
Comento un poco el proyecto. Estoy queriendo hacer un sistema de pan and tilt con motores DC.
Logre controlarlos mediante la lectura analógica de los potenciometros de el joystic y enviando los datos a las salidas pwm.
controlo la velocidad máxima también, pero el cuello de botella esta en que necesito una rampa de aceleración y de desaceleracion.

Para que quede mas claro cuando acciono el joystic necesito contar un tiempo de aceleración asta la velocidad marcada por el joystic y al soltar el joystic de la velocidad que estaba desacelere con el mismo tiempo a cero.

dejo el codigo sobre el cual estoy trabajando, cualquier idea sera bienvenida

//Control de un Joystick velozidad maxima damp
int ejexpin = 4; // Declara pin4 entrada analogica como ejexpin
int ejexmpin = 3; // Declara salida pwm 3 como ejempin
int ejexm2pin = 5; // Delara salida pwm 5 como ejempin2
int ejexd; // delcara ejexd
int vmaxpin = 3; // Declara pin 3 analog como entrada de vmax
int vmax; // Declara vmax como valor de trabajo velozidad maxima
int i;
void setup(){
//Serial.begin(9600);
pinMode(ejexmpin, OUTPUT); // Configura ejempin como salida
pinMode(ejexm2pin, OUTPUT);// configura ejexmpin como salida
}
void loop(){
vmax = analogRead(vmaxpin);
vmax = map(vmax, 0, 1023, 0, 255); //cambia el valor de la lectua analogica de 0 1203 a 0 255
ejexd = analogRead(ejexpin); // lee el valor analogico de ejexpin y lo traslada a ejexd

// Control del Eje X
if (470 > ejexd) {

ejexd = map(ejexd, 0, 470, vmax, 0); // se cambia el antiguo valor de 255 por el valor de la etiquetqa vmax
analogWrite(ejexm2pin,ejexd);
}

else {
analogWrite(ejexm2pin,0);
}
if (ejexd > 530) {

ejexd = map(ejexd, 530, 1023, 0, vmax); // se cambia el antiguo valor de 255 por el valor de la etiquetqa vmax

if ( 0 >= i){

for ( i=0; i<=ejexd; i++){ // el valor de i asciende

analogWrite(ejexmpin, i); // se escribe el valor de i en el pin salida pwm
delay(10);
}
}

analogWrite(ejexmpin,ejexd);
}
else {
analogWrite(ejexmpin,0);
i = 0;
}

}

Esta parte del codigo es solo el control de un motor.

¿Emplear una variable en el delay?

delay(variable)

Si la posicion del joystick no corresponde con la del motor la variable es cero, si corresponde entonces toma el valor correcto.

¿es eso?

Supongo que variable tambien la podrias operar de forma matematica para generar funciones logaritmicas por aproximaciones.

Es decir el valor del delay cambiara mediante una tabla o mediante un calculo conforme el numero de la posicion del joystick se aproxime al valor que quieres...

Creo que lo más sencillo es hacer la media de los últimos X valores tomados de la posición del joystick y tomar esa media para la salida pwm. Cuantos más valores X tomes de media la aceleración será más lenta. En el IDE tienes un ejemplo de cómo hacerlo, Ejemplos -> Analog -> Smoothing.

Muchas Gracias por las respuestas.
A ver lo que hago es lo siguiente leo el valor de la entrada analogica, si es mayor o menor a el valor medio inicia el motor en un sentido o en otro.
luego tomo el valor,lo convierto y se envia a la salida pwm.
Lo que no me sale es, antes de enviar el valor final a la salida pwm, generar un delay y en ese tiempo que la salida pwm valla de 0 a el valor leido en la entrada analoga.
Y luego si el joystick regresa a la pocicion de descanso que la velozidad disminulla no de golpe si no con el mismo tiempo de delay
pense hacerlo con un contador como en el ejemplo fade.

el tema es que tengo 2 motores y en la estructura if - else, cuando entra un contador en uno de los movimientos( por ejemplo forward X )
y si en el joystick acciono reverse Y, asta que no termina el contador de forward X no me envia los datos a la salida pwm de Y.

bueno voy a seguir analizando y muchas gracias por las ideas.

No es necesario que pongas ningún delay. Ese tiempo lo ajustas con el número de muestras sobre las que haces la media.
Por ejemplo toma lecturas del joystick cada 100 ms. Si quieres que el retardo en que el motor alcance la velocidad que le indica el joystick sea de 2 segundos tendrás que hacer constantemente la media de los 20 últimos valores del joystick, ese valor mediado lo mapeas para la salida pwm y ya lo tienes, no hay que hacer nada más.

Cheyenne muchas gracias por la respuesta vamos a probar a ver que sale y comento

Buenas tardes Sr.Leo quería pedirle su ayuda si está en su disposición enviarme el diagrama de conexión para entender cómo se podría conectar los componentes y entender el código que ha publicado, gracias de antemano

Si alguien del 2013 te responde avisa a toda la comunicad.
Mientras te aconsejo dos cosas:
1. Lee las normas del foro. 1er hilo de cualquier sección.
2. No vuelvas a revivir un hilo de mas de 120 dias sin movimientos, por algo te aparecen una letras rojas indicándolo.
Ahora crea un hilo nuevo con tu consulta y espera a ser respondido.