Mi servo no se mueve al ejecutar este código. (Ya resuelto wachin.)

Alguien me ayuda, cuando inicio el código mi servo se mueve un poco hacia la izquierda y ala derecha, pero después no se mueve. Pero si pongo otro código diferente si se mueve normalmente.
Acá esta el código:

Servo servos[13];

/***   Global variables   ***/
int Valor1=1;
int Valor2=2;

/***   Function declaration   ***/

void setup()
{




  servos[9].attach(9);

}


void loop()
{
    if (random(Valor1,Valor2) == 2) {
      tone(6,392,1000);
      delay(1000);
      delay(200);
      servos[9].write(150);
      delay(500);
      delay(3000);
     }else {
      tone(6,392,1000);
      delay(1000);
      delay(200);
      servos[9].write(50);
      delay(500);
      delay(3000);
     }

}

/***   Function definition   ***/

Hola Joaco2799.

Veo cosas raras.

No me compila porque falta la referencia a la librería servos:

Compiling 'Sketch1' for 'ATmega328P (Old Bootloader) (Arduino Nano)'

Sketch1.ino: 1:1: error: 'Servo' does not name a type; did you mean 'Serial'?
Error compiling project sources
Build failed for project 'Sketch1'
Servo servos[13]

La forma en la que creas el objeto Servo servos[13]; creo que no es la correcta. Debería ser:

Servo servos;

En el setup haces esto:

 servos[9].attach(9);

(me despista mucho el 13 al crearlo y el 9 de setup) ¿?


cuando tiene que ser:
servos.attach(9);   // 9 o el pin PWM que quieras

Haz alguna prueba y postea el resultado.
Un saludo.

Repasa como funciona random() random() - Arduino Reference y veras tu error.

jose tiene razón. Pero tal vez te sea más fácil entenderlo en español Arduino en español: random()

Si, en español mejor, pero con una buena traducción, porque según esa web:

Parámetros
min - el límite inferior del valor aleatorio, incluso este (opcional)
max - el límite superior del valor aleatorio, incluso este
Retornos
un número aleatorio entre min and max-1 (long)

Si en 'max' es incluso ese, luego no puede decir max-1

En la web oficial de arduino pone claramente (en inglés):

Parameters
min: lower bound of the random value, inclusive (optional).
max: upper bound of the random value, exclusive.

Returns
A random number between min and max-1. Data type: long.

.

El amigo Manuel Delgado ha hecho un copia y pega de la web de arduino con buena intención, pero eso es lo que pasa cuando traduces con google...

Yo uso visualino y me pone asi, aun asi hace funcionar a mi servo, y sobre la funcion random es que no encontraba otra forma de elegir un numero aleatoriamente entre dos numeros (pongamos que quiero un caramelo de 50 y otro de 150, yo quiero que eligir uno de esos dos caramelos, no un caramelo de otro valor entre esos dos ejem caramelo de 51, 78, 122)

Joaco2799:
Yo uso visualino y me pone asi, aun asi hace funcionar a mi servo, y sobre la funcion random es que no encontraba otra forma de elegir un numero aleatoriamente entre dos numeros (pongamos que quiero un caramelo de 50 y otro de 150, yo quiero que eligir uno de esos dos caramelos, no un caramelo de otro valor entre esos dos ejem caramelo de 51, 78, 122)

pero el fallo esta en que para obtener numeros del 1 al 2 ,el valor maximo es excluido,es decir ,deberias poner random(1,3)
Si quieres obtener numeros discontinuos hay otras soluciones,como definir un array de valores:

int misNumeros[] = {25,50,75,100};
int valor = random(0,4); // para obtener valores de 0 a 3 que son los indices del array
Serial.println(misNumeros[valor]);

Hola Joaco2799.

No te tomes a mal que 776 personas lo lean y sólo 5 contesten.

Te escribo una crítica constitutiva… con algo de coña (a estas horas que quieres, jejeje…):

Se pueden dar muchas circunstancias para no aportar a la solución:

  • no saben la solución porque están empezando
  • no tienen tiempo
  • ven algún disparate que otro
  • ven algún disparate que otro y no tienen tiempo
  • las tres anteriores y leen (MI POST LO VEN 776 Y SOLO 5 RTA.)
  • las cuatro anteriores y no quieren escribir ningún disparate

Motivos hay tantos como personas. Sin ir más lejos, hoy he trabajado 14 horas, he comido pasadas 8 de la tarde y mi hija mayor tiene mañana un examen de matemáticas y no tiene ni idea… así que he repasado con ella…

Entenderás que a veces, cuando son casi las 11 de la noche, mucha gente lea y no responda.

Tanto aquí como en cualquier otro foro, la gente es libre de responder. Eso nos ha pasado a todos.
No te desanimes y continúa investigando y aprendiendo. Nadie nace sabiendo.

Te han recomendado que trabajes sobre el ide oficial y tiene su motivo.
Visualino y similares, como app inventor para android, son muy cómodos para empezar por su facilidad, pero como has podido comprobar, tu quieres hacer una cosa y el programa interpreta otra. Lo descargué para probar cómo se vería el proyecto que estoy haciendo y no encontré la manera de hacerlo. A veces soy muy torpe…

También intenté cargar alguna librería y no fui capaz. Seguro que se puede y será muy fácil, pero tampoco lo encontré.

Una vez me dijeron que los ordenadores son muy tontos… hacen lo que les programa. Con el ide, el programa hace exactamente lo que escribas.

El ide oficial te aporta una serie de extras.

En función de tus conocimientos, recomendaría visual studio (aunque sea la versión community) y la extensión de visual micro. No lo he comprobado, pero imagino que funciona con esa versión. Yo uso la profesional.

Quizás no sea ahora el momento, pero dentro de muy poco podrás dar el salto. Al tratarse de un ide de ese nivel, te aporta más cosas que el de arduino. Es cuestión de gustos.

Tengo compañeros de trabajo que programan en php con notepad++ o ultraedit. Todos son editores de texto, unos más vitaminados que otros, colorean la sintaxis… pero no dejan de ser editores de texto.

Después de todo este rollo… te animo de nuevo a seguir.

Es que no usaba el arduino desde hace tiempo, quizá vuelva a leer de nuevo ese libro de arduino que tengo por alguna parte en mi casa.