Guardar variable entre bucles en Arduino IDE

0

Tengo este código:

int data=0;

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

void loop(){
    Serial.write(data);
    delay(50);
}

void serialEvent() {
    data = Serial.read();
}

Este ejemplo debería actualizar la variable de datos cuando se reciben datos en serie. Pero por alguna razón no funciona de esa manera, nada se imprime en el monitor de serie.

Pero cuando muevo el método Write a la función serialEvent , tengo mis datos impresos como se esperaba. ¿Por qué está pasando esto? Si estoy en lo cierto, la variable data debería imprimirse con el último valor que obtuve de Serial.read() .

    
pregunta Alexander

1 respuesta

3

El compilador ve que se lee data cada vez que pasa por el bucle, pero nunca lo actualiza en ningún lugar al que se pueda acceder directamente. Por lo tanto, ha optimizado el código de tal manera que se usa el valor inicial de data (0) en lugar de leer el valor real.

Puede desactivar esta optimización declarando la variable volatile . Esto obligará al compilador a generar código que lea el valor real cada vez que lo haga.

volatile int data=0;
    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas