Problema con servo 360º

Hola, me he comprado dos servos de 360º para no modificar los futaba del helicoptero con los que he estado haciendo pruebas, pero resulta que cuando le doy la señal de que vaya a la posicion 150 por ejemplo arranca pero no para, esto es normal? como hago para q pare?, el codigo de ejemplo es este.

#include <Servo.h>  
   
Servo servo1;  // Crea un Objeto servo  
int posicion;    // Variable de la posicion del servo  
   
void setup()  
{  
  servo1.attach(2);  // Selecionamos el pin 2 como el pin de control para els ervo  
}  
   
void loop()  
{  
  
  posicion = 150;            // Establecemos el valor de la posicion a 150º  
  posicion = map(posicion, 0, 1023, 0, 179);     // Establecemos la relacion entre los grados de giro y el PWM  
  /* Con el mapa de valores anterior establecemos una relacin proporcional */  
  /* entre el pulso minimo 0 con el grado minimo, 0 tambien y el pulso maximo*/  
  /* 1023 con el grado maximo, 179*/  
  servo1.write(posicion);                  // Escribimos la posicion con el mapa de valores al servo  
  delay(150);                           // Y le damos un tiempo para que sea capaz de moverse  
}

El servo es un pepino ya q tiene un torque enorme, lo q necesito para q mueva sin problemas una reflex para arriba y para abajo, pero me falla eso cosa q con el mismo programa el futaba va perfecto. Seria este.

http://www.springrc.cn/en_index/view_list.asp?id=245&typeid=61

Un saludo.

Buenas,

No he tocado demasiado los servos y lo poco que he tocado a sido sin las librerias. De todos modos tengo una sospecha que la referencia del servo.write() me ha subrayado. Copio a continuación:

"""On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with 0 being full-speed in one direction, 180 being full speed in the other, and a value near 90 being no movement). """

Es decir, ¿no estarás modificando el valor de la velocidad en vez del ángulo de movimiento?

Un saludo.

Creo q es porque es un servo digital y funciona diferente, tanto que no se ni por donde pillarlo, tiene en el centro un potenciometro.

Nada no hay manera lo unico q consigo es que cambien de giro.
Si alguien los quiere son suyos por 22? en su casa.

Es que esos servos realmente no son de 360º, son de rotacion contínua.
Si están bien calibrados, que se supone que sí, al mandarle un pulso de 1.5ms deberían estar quietos y según aumentas el pulso va acelerando hacia un lado y si lo disminuyes acelera hacia el otro.

Haciendo esto deberia ir a saltitos hasta 180 y volver a 0 pero esque da muchas vueltas y luego vuelve otras tantas, sin control, no logro comprender su funcionamiento.

#include <Servo.h>

int servoPin = 2;       // the number of the output pin for the servo
int ledPin = 5;

int angulo = 90;        // Valor inicial del servo
int ampl = 900;
int pulso = 0;
long tiempo = 0;

void setup()
{

  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  pinMode(servoPin, OUTPUT);

  digitalWrite(servoPin,LOW);
  digitalWrite(ledPin,LOW);

}

void loop()
{
  /* lanzar los pulsos que el servo necesita para controlar su posición, teniendo en cuenta que:
   *  90º = 1500us
   *  180º = 1500us + ampl
   *  0º = 1500us -ampl
   */
  pulso = map(angulo,0,180,1500-ampl,1500+ampl);
  digitalWrite(servoPin,HIGH);
  delayMicroseconds(pulso);
  digitalWrite(servoPin,LOW);
  delay(20);
  if ((millis() - tiempo) > 500)
  {
    angulo = angulo + 5;
    tiempo = millis();
    if (angulo > 180) {
      angulo = 0;
    }
  }
}

Un servo normal tiene un potenciómetro que gira cuando lo hace el brazo del servo y es la forma que tiene de leer la posición en la que está.
Si tu mandas un pulso de 1,5ms el girará hacia la posición en la que el potenciómetro diga que está en el centro.

Los servos de rotación contínua no tienen ese potenciómetro o bien está anulado, la única forma de que esté parado es mandando un pulso de 1,5ms; a medida que el pulso aumenta aumentará la velocidad hacia un lado hasta que con 2.3ms de pulso (según marcas) tienes la velocidad máxima. Y a 0.7ms la máxima velocidad hacia el otro.

Según esto con tu código debería arrancar el servo a la máxima velocidad hacia un lado, luego ir bajando la velocidad, parar y después ir aumentando la velocidad hacia el otro.

Si lo que tu quieres es que el servo se coloque en una posición fija lo que necesitas es un servo de 180º normal.

Gracias Lale tonces no me sirven estos servos para lo q quiero , vaya putada a ver si consigo venderlos.
Un saludo.