Asegúrese de que la serie se haya escrito antes de ejecutar la siguiente línea

Al ejecutar el siguiente código en mi Arduino Micro, solo se imprime la primera línea:

void crash(void) {
    abort();
}

void setup(void) {
    Serial.begin(9600);

    while(!Serial.available()) {
        Serial.println("Please input something to begin");
        delay(500);
    }

    Serial.println("First"); // Gets printed
    delay(500); // Make sure Arduino is done writing to the serial connection

    Serial.println("Second"); // Doesn't get printed
    crash(); // Makes the Arduino device crash
}

void loop(void) {

}

Me gustaría hacer algo como esto para que se imprima la segunda línea, antes de que el dispositivo se bloquee:

void setup(void) {
    Serial.begin(9600);

    while(!Serial.available()) {
        Serial.println("Please input something to begin");
        delay(500);
    }

    Serial.println("First"); // Gets printed
    delay(500); // Make sure Arduino is done writing to the serial connection

    Serial.println("Second"); // Doesn't get printed

    wait_for_serial_write(); // Not really a function

    crash(); // Makes the Arduino device crash
}

void loop(void) {

}

¿Qué función puedo usar en lugar de wait_for_serial_write?

La razón por la que quiero hacer esto es porque mi Arduino falla "aleatoriamente", por lo que puse algunas Serial.printlndeclaraciones de depuración que me gustaría ver antes de que el dispositivo falle.

Tampoco puedo usarlo delayen mi código real ya que el bloqueo ocurre durante una interrupción del temporizador, donde delayno funciona.

Tengo curiosidad, ¿qué hace crashexactamente?
@KevinMark Llama a abortla función que "Anula el proceso actual, produciendo una terminación anormal del programa". No sé cómo se implementa, pero no se ejecuta ningún código ni en el temporizador ni en la función de bucle. El Arduino tampoco se reinicia.

Respuestas (1)

Serial.flush()es exactamente lo que estás buscando.