# Ayuda con mi servo

**URL:** <https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964>\
**Category:** Software\
**Created:** [September 16, 2023, 1:34am UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964 "2023-09-16T01:34:59Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![maximoracing](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoracing/32/1000897_2.png) [@maximoracing](https://forum.arduino.cc/u/maximoracing)\
**Post date:** [September 16, 2023, 1:34am UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/1 "2023-09-16T01:34:59Z")

</div>

quiero que mi codigo se ejecute cada 10 segundos pero no lo logro hacer funcionar bien, mi servo es un sg90

```arduino
#include <Servo.h>
Servo servo;

void setup() {
  servo.attach(3);
}

void loop() {
  servo.write(180);
  delay(500);
    servo.write(0); // Vuelve a la posición inicial
  delay(500);
}

```

---

<div class="post-metadata">

**Author:** ![pert](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/pert/32/217111_2.png) [@pert](https://forum.arduino.cc/u/pert)\
**Post date:** [September 16, 2023, 2:18am UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/2 "2023-09-16T02:18:39Z")

</div>

He trasladado su tema de una categoría de idioma inglés del foro a la categoría **International \> Español** @maximoracing.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí [la guía " **How to get the best out of this forum**"](https://forum.arduino.cc/t/how-to-get-the-best-out-of-this-forum/679966).  
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [September 16, 2023, 3:53am UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/3 "2023-09-16T03:53:19Z")

</div>

> [@maximoracing](#):
>
> quiero que mi codigo se ejecute cada 10 segundos

Tienes que usar _millis()_ y olvidarte de _delay()_ (al menos en aplicaciones de este tipo).

En la sección _Documentación_ tienes excelentes tutoriales, por ej.

> [@Entender millis y no morir en el intento](https://forum.arduino.cc/t/entender-millis-y-no-morir-en-el-intento/626976):
>
> Al final me he animado y he escrito un tutorial sobre millis. He intentado que sea comprensible y lo he hecho con ejemplos para que sea más fácil de entender. Dada la extensión del tema lo he divido en varias partes, así que disculpad, pero tardo un poco ponerlas todas. Allá vamos.

---

<div class="post-metadata">

**Author:** ![maximoracing](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoracing/32/1000897_2.png) [@maximoracing](https://forum.arduino.cc/u/maximoracing)\
**Post date:** [September 16, 2023, 5:16am UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/5 "2023-09-16T05:16:49Z")

</div>

Muy util, no lo entendí del todo, genere un loop y empezó a girar sin parar jajaja

otra cosa, sabes porque no se estara cumpliendo el angulo exacto de 180?

---

<div class="post-metadata">

**Author:** ![maximoracing](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoracing/32/1000897_2.png) [@maximoracing](https://forum.arduino.cc/u/maximoracing)\
**Post date:** [September 16, 2023, 5:26am UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/6 "2023-09-16T05:26:04Z")

</div>

```arduino
#include <Servo.h>
Servo servo;

unsigned long tiempoAnterior = 0; // Variable para almacenar el tiempo anterior
const unsigned long intervalo = 10000; // Intervalo de 10 segundos en milisegundos
bool enMovimiento = false; // Variable para controlar si el servo está en movimiento

void setup() {
  servo.attach(3);
}

void loop() {
  unsigned long tiempoActual = millis(); // Obtiene el tiempo actual

  if (!enMovimiento && tiempoActual - tiempoAnterior >= intervalo) {
    // Si el servo no está en movimiento y ha pasado el intervalo de tiempo
    enMovimiento = true; // Activar el movimiento
    tiempoAnterior = tiempoActual; // Actualizar el tiempo anterior
  }

  if (enMovimiento) {
    if (tiempoActual - tiempoAnterior <= 500) {
      // Mueve el servo a 180 grados durante los primeros 500ms
      servo.write(180);
    } else if (tiempoActual - tiempoAnterior <= 1000) {
      // Luego, mueve el servo a 0 grados durante los siguientes 500ms
      servo.write(0);
    } else {
      // Desactivar el movimiento después de completar el ciclo
      enMovimiento = false;
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [September 16, 2023, 3:07pm UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/7 "2023-09-16T15:07:46Z")

</div>

La verdad no tengo experiencia con servos pero el primer movimiento (90º) lo hace al ejecutar

```arduino
servo.attach(3);

```

Supongo que lo podés solucionar así

```arduino
void setup() {
  servo.attach(3);
  servo.write(0);
}

```

> [@maximoracing](#):
>
> no lo entendí del todo

Menos mal que _millis()_ no lo entendiste del todo! 😉  
👏 👏 👏

---

<div class="post-metadata">

**Author:** ![maximoracing](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoracing/32/1000897_2.png) [@maximoracing](https://forum.arduino.cc/u/maximoracing)\
**Post date:** [September 16, 2023, 5:25pm UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/8 "2023-09-16T17:25:33Z")

</div>

```arduino
#include <Servo.h>
Servo servo;

unsigned long tiempoAnterior = 0; // Variable para almacenar el tiempo anterior
const unsigned long intervalo = 10000; // Intervalo de 10 segundos en milisegundos
bool movimientoActivo = false; // Variable para controlar si el movimiento está activo

void setup() {
  servo.attach(3);
}

void loop() {
  unsigned long tiempoActual = millis(); // Obtiene el tiempo actual

  if (!movimientoActivo && tiempoActual - tiempoAnterior >= intervalo) {
    // Si el movimiento no está activo y ha pasado el intervalo de tiempo
    movimientoActivo = true; // Activar el movimiento
    tiempoAnterior = tiempoActual; // Actualiza el tiempo anterior
  }

  if (movimientoActivo) {
    servo.write(180);
    delay(500);
    servo.write(0); // Vuelve a la posición inicial
    delay(500);
    servo.write(90); // frena
    delay(500);
    movimientoActivo = false; // Desactivar el movimiento después de completarlo
  }
}

```

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [March 14, 2024, 5:25pm UTC](https://forum.arduino.cc/t/ayuda-con-mi-servo/1168964/9 "2024-03-14T17:25:52Z")

</div>

Closed on March 14, 2024, 5:25pm UTC

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
