Soy relativamente nuevo en programación, Arduinos y foros en línea en general. Realmente agradecería una explicación de uno de los tutoriales básicos para Arduinos:
Conecté 8 LED a 8 pines (2 a 9) y programé un breve script para encender los LED sucesivamente, según un esquema (que se encuentra aquí): http://www.instructables.com/files/deriv/F45/G030 /FVT7A09T/F45G030FVT7A09T.GRANDE.jpg
Un código de muestra 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 dijeron que el método setup() solo se ejecuta una vez, entonces, ¿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é se necesitan 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 que después de quizás 20 iteraciones, se atascó en la primera luz LED :(
¡Cualquier comentario sería muy apreciado! ¡Gracias!
El setup()
método se ejecuta solo una vez porque se usa para establecer la dirección de los pines (Entrada o Salida).
El oneAfterAnotherNoLoop()
método produce solo un parpadeo de los LED. Enciende los LED, espera un poco, apaga los LED y espera otro poco.
El loop()
método es un bucle infinito que llama al oneAfterAnotherNoLoop()
método 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
}
}
}
El entorno de tiempo de ejecución de Arduino ejecuta su setup
método una vez al inicio y luego ejecuta el loop
método una y otra vez.
Por lo tanto, el setup
método 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 pinmode
declaración en su loop
método. Esto ahorra tiempo de procesamiento innecesario.
La persona que escribió el programa ("boceto") en el que basó el suyo decidió crear métodos adicionales. Esta puede ser una buena manera de dividir programas complejos en partes más fáciles de entender. En este caso no fue particularmente útil.
No veo por qué tu boceto se detuvo después de algunas iteraciones. ¿Tocaste algo? ¿Funcionó bien de nuevo después de reiniciarlo?
int i;
despuésvoid loop() {
Jim Dearden
yippie
pinMode();
inicializa el controlador de pines. Puede configurar un solo pin comoINPUT
OOUTPUT
y eso generalmente solo debe hacerse una vez. Una vez configurado como salida, adigitalWrite();
controlará el pin de salidaLOW
oHIGH
.vicatcu