CUAL ES LA FORMA MAS SENCILLA DE CONTROLAR UN SERVO? [SOLUCIONADO]

Tengo una duda y es la siguiente:

Cual es la forma mas sencilla de controlar un servomotor? yo estoy aprendiendo a utilizar arduino y aun no conosco mucho sobre el llevo como 2 semanas mas o menos leyendo y viendo tutoriales y no e encontrado nada sobre como darle varios angulos a un servo, en todos los tutoriales solo hacen que se mueva de 0 a 90 o de 0 a 180 sin regresar a un angulo anterior ya sea de 0 a 180 regresar a 90 y volver a 180 por ejemplo.

Viendo esto con lo poco que se intente hacerlo por mi mismo utilizando solo for pero tengo un problema y tal ves sea que no se puede controlar un servo de esta manera les explico mi problema:

en mi codigo pude hacer que el servo empiece de 0 viaje a 180 y regrese a 90 utilizando solo for pero cuando intento hacer k vuelva a 180 este se va directo a 0 no se si sea un error en el programa o siemplemente no se pueda mover los angulos de esta manera utilizando solo for para un servo les dejo aqui el codigo.

#include <Servo.h>

Servo servo1;
int servoPin = 9;

void setup()
{
servo1.attach(servoPin);
}

void loop()
{
for (int i=0; i<=0; i=i+180)
{
servo1.write(i);
delay(2000);
}

for (int i=180; i<=180; i=i-90)
{
servo1.write(i);
delay(2000);
}
for(int i=90; i<=180; i=180)
{
servo1.write(i);
delay(2000);
}
}

Una cosa mas, pienso que si utilizando for se pudiera manejar un servo tendria que hacer un for para cada angulo al que quiera posicionarme si hay una forma mas facil y rapida porfavor me podrian ayudar en esto?

Muchas gracias.

El código falla.

Dejando de lado que veo una forma demasiado tediosa e innecesaria para hacer algo tan simple, el segundo for no va a hacer lo que según has comentado quieres que haga.

El primer for está bien a pesar de ser poco elegante en cuanto a lo que hace (no obstante, me suena que el valor máximo para el servo debería ser 179, pero debería consultarlo).

En el segundo for está el problema:
i=180 (que es donde se quedó); se hace mientras i<=180; i=i-90
Primeramente fija el valor donde ya estaba, 180.
Seguidamente i=90, sigue siendo <=180, por tanto se cumple y actualiza el servo.
Tras eso, i=0, actualiza servo, y bueno, se queda en bucle inifito.

Si quieres hacerlo tal y como pretendes, si no me equivoco el código debería ser algo así:

#include <Servo.h>

Servo servo1;
int servoPin = 9;

void setup()
{
 servo1.attach(servoPin); 
}

void loop()
{
  for (int i=0; i<=0; i=i+180)
{
  servo1.write(i);
  delay(2000);
}

for (int i=180; i>=90; i=i-90)
{
  servo1.write(i);
  delay(2000);
}
for(int i=90; i<=180; i=180)
{
  servo1.write(i);
  delay(2000);
}
}

Aunque para esta prueba simplemente usando:
servo1.write(0);
delay(2000);
servo1.write(180);
delay(2000);
servo1.write(90);
delay(2000);
servo1.write(180);
delay(2000);

Lo tienes resuelto.

Un saludo.

Muchas gracias por la ayuda :wink: