Saltar al contenido

como detener un bucle arduino

Intenta entender el código correctamente antes de usarlo a tu proyecto y si tquieres aportar algo puedes comentarlo.

Solución:

Esto no está publicado en Arduino.cc pero, de hecho, puede salir de la rutina de bucle con una simple salida (0);

Esto se compilará en prácticamente cualquier tablero que tenga en su lista de tableros. Estoy usando IDE 1.0.6. Lo he probado con Uno, Mega, Micro Pro e incluso con Adafruit Trinket

void loop() 
// All of your code here

/* Note you should clean up any of your I/O here as on exit, 
all 'ON'outputs remain HIGH */

// Exit the loop 
exit(0);  //The 0 is required to prevent compile error.

Lo uso en proyectos en los que conecto un botón al pin de reinicio. Básicamente, su ciclo se ejecuta hasta la salida (0); y luego simplemente persiste en el último estado. Hice algunos robots para mis hijos, y cada vez que presiona un botón (restablecer), el código comienza desde el inicio de la función loop().

Arduino específicamente no proporciona absolutamente ninguna forma de salir de su loop función, como lo muestra el código que realmente lo ejecuta:

setup();

for (;;) 
    loop();
    if (serialEventRun) serialEventRun();

Además, en un microcontrolador no hay nada a lo que salir en primer lugar.

Lo más cercano que puede hacer es simplemente detener el procesador. Eso detendrá el procesamiento hasta que se reinicie.

Matti Virkkunen lo dijo bien, no hay una forma “decente” de detener el bucle. No obstante, al mirar su código y hacer varias suposiciones, imagino que está tratando de generar una señal con una frecuencia determinada, pero desea poder detenerla.

Si ese es el caso, hay varias soluciones:

  1. Si desea generar la señal con la entrada de un botón, puede hacer lo siguiente

    int speakerOut = A0;
    int buttonPin = 13;
    
    void setup() 
        pinMode(speakerOut, OUTPUT);
        pinMode(buttonPin, INPUT_PULLUP);
    
    
    int a = 0;
    
    void loop() 
        if(digitalRead(buttonPin) == LOW) 
            a ++;
            Serial.println(a);
            analogWrite(speakerOut, NULL);
    
            if(a > 50 && a < 300) 
                analogWrite(speakerOut, 200);
            
    
            if(a <= 49) 
                analogWrite(speakerOut, NULL);
            
    
            if(a >= 300 && a <= 2499) 
                analogWrite(speakerOut, NULL);
            
        
    
    

    En este caso estamos usando un pin de botón como un INPUT_PULLUP. Puede leer la referencia de Arduino para obtener más información sobre este tema, pero en pocas palabras, esta configuración establece una resistencia pullup interna, de esta manera puede tener su botón conectado a tierra, sin necesidad de resistencias externas.
    Nota: Esto invertirá los niveles del botón, LOW será presionado y HIGH será realizado.

  2. La otra opción sería usar uno de los temporizadores de hardware incorporados para obtener una función llamada periódicamente con interrupciones. No profundizaré, aquí hay una gran descripción de lo que es y cómo usarlo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *