es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo avanzar más allá del bucle for/while en Arduino.

Nuevo en Arduino, he intentado hacer un bucle for o while para realizar una pausa en lugar de utilizar la función delay(). He probado MUCHOS valores, pero el LED permanece en estado ALTO, funciona si uso la función delay(). Ten en cuenta que no voy a usar este código como pausa, solo lo intenté y ahora no entiendo qué está saliendo mal.
La placa es un Nano Every, uso el IDE de Arduino, Fcpu = 8MHz.

const byte ledPin = 13;
byte ledState = HIGH; 
pinMode(ledPin, OUTPUT);
void loop() {
  unsigned long i = 0;
   // lea el estado del interruptor en una variable local:
  //estadoEna = digitalRead(sw1);
  //estadoDir = digitalRead(sw2);

  while (i < 10000000)
  {
    i++;
  }
  //delay(1000);
  ledState ^= 1;
  digitalWrite(ledPin, ledState);
  i = 0;

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando crear un retraso utilizando un bucle while en lugar de utilizar la función delay() incorporada en tu placa Arduino Nano Every. Sin embargo, el LED continúa en el estado HIGH aunque hayas probado varios valores.

    Un problema potencial es que el valor de i nunca se reinicia a 0 después de que se complete el bucle, por lo que el bucle while nunca saldrá. Puedes solucionar esto reiniciando i a 0 antes de que comience nuevamente el bucle while.

    Otro problema potencial es que el valor de retraso del bucle que estás utilizando (10000000) puede ser demasiado grande y hacer que el LED permanezca en el estado HIGH. Este valor depende de la velocidad de reloj del microcontrolador, que para el Nano Every es de 8 MHz. Por lo tanto, es probable que el bucle esté tomando 10 millones de ciclos de reloj para completarse, lo cual es mucho tiempo. Intenta con un valor más pequeño y verifica si eso resuelve el problema.

    Finalmente, utilizar un bucle while para crear un retraso no es la forma más eficiente de gestionar el tiempo en tu código. Puede hacer que tu código no responda y te hagas perder otros eventos importantes que ocurran en la placa. Generalmente, se recomienda utilizar la función delay() o implementar un mecanismo de temporización más eficiente como una interrupción de temporizador.

    Espero que esto te ayude a diagnosticar y resolver los problemas en tu código. ¡Buena suerte con tus proyectos de Arduino!

Comments are closed.