¿Se explicaron los “8 LED Fun” para Arduinos?

0

Soy relativamente nuevo en programación, Arduinos y foros en línea en general. Realmente agradecería una explicación para uno de los tutoriales básicos para Arduinos:

Conecté 8 LED a 8 pines (2 a 9) y programé un script corto para encender los LED sucesivamente, según un esquema (que se encuentra aquí): enlace

Un código de ejemplo sugiere:

int ledPins[] = {2,3,4,5,6,7,8,9);

void setup(){
  for(int i = 0; i<8; i++){
    pinMode(ledPins[i], OUTPUT);
  }
}    
void loop(){
  oneAfterAnotherNoLoop();
}    
void oneAfterAnotherNoLoop(){
  digitalWrite(ledPins[0], HIGH);
  delay(10);
  digitalWrite(ledPins[0], LOW);
  delay(10);
  ...
}

Sin embargo, estoy confundido acerca de la función del método setup (). Me dicen que el método de configuración () solo se ejecuta una vez, ¿no deberían las luces dejar de parpadear después de una iteración? ¿O es una forma de inicializar TODOS los 8 pines continuamente (y no sucesivamente)? Además, ¿por qué son necesarios los métodos setup () y oneAfterAnotherNoLoop ()? Escribí todo en el método loop ():

void loop(){
  for(int i = 0; i<10; i++){
    pinMode(ledPins[i], OUTPUT); 
    digitalWrite(ledPins[i], HIGH);
    delay(250);
    digitalWrite(ledPins[i], LOW);
    delay(250);
  }
}

Y esto funcionó bastante bien, excepto después de unas 20 iteraciones, se quedó atascado en la primera luz LED :(

Cualquier comentario sería muy apreciado! Gracias!

    
pregunta batlike

2 respuestas

5

El método setup() se ejecuta solo una vez porque se usa para establecer la dirección de los pines (entrada o salida).

El método oneAfterAnotherNoLoop() produce solo un parpadeo de los LED. Enciende los LED, espera un poco, apaga los LED y espera un poco más.

El método loop() es un bucle infinito que llama al método oneAfterAnotherNoLoop() para producir un ciclo infinito de parpadeo.

En su código, inicializa los pines cada vez y esto no es necesario. Prueba esto:

void loop() {
  for (int i = 0; i < 8; i++) {       // Initialize pins
    pinMode(ledPins[i], OUTPUT);      // Set pin i as an OUTPUT
  }
  while (1) {                         // Infinite loop
    for (int i = 0; i < 8; i++) {
      digitalWrite(ledPins[i], HIGH); // Drive LED i HIGH
      delay(250);                     // Wait
      digitalWrite(ledPins[i], LOW);  // Drive LED i LOW
      delay(250);                     // Wait
    }
  }
}
    
respondido por el Oceanic815
0

El entorno de ejecución Arduino ejecuta su método setup una vez en el inicio y luego ejecuta el método loop una y otra vez.

Por lo tanto, el método setup es el lugar apropiado para colocar su código de inicialización. Esto incluye cosas como configurar pines para que sean pines de salida en lugar de pines de entrada. Esto significa que no necesita su declaración pinmode en su método loop . Esto ahorra tiempo de procesamiento innecesario.

La persona que escribió el programa ("boceto") en la que basaste el tuyo decidió crear métodos adicionales. Esta puede ser una buena manera de dividir los programas complejos en partes más sencillas de entender. En este caso no fue particularmente útil.

No veo por qué se detuvo el boceto después de algunas iteraciones. ¿Tocaste algo? ¿Se ejecutó de nuevo en Aceptar después de que lo restableciste?

    
respondido por el RedGrittyBrick

Lea otras preguntas en las etiquetas