duda para conocedores de C y/o arduino: Controlar un led mediante comunicación serial

Buenas, estoy controlando el led integrado en el arduino mediante la comunicación Serial, con un código que no he escrito yo. Lo he incorporado a mi código, y he comentado lo que supe comentar, para que esté un poco más claro.

String content = "";
char character;
int led = 13; //Asignamos el pin 13 al led

void setup(){
  Serial.begin(9600); //Empezamos la comunicación serial
  pinMode(led, OUTPUT); //Establecemos el pin 13 como salida
}

void loop()
{
  while(Serial.available()) {
      character = Serial.read();
      content.concat(character);
  }

  //Si escribimos "encender" en el Serial, el led se encederá; y si escribimos "apagar", se apagará
  if (content == "encender") {
    digitalWrite(led, HIGH);
    delay(1000);
    content = "";
  }
 
  else if (content == "apagar"){
    digitalWrite(led, LOW);
    delay(1000);
    content = "";
  }

}


La parte de:
{
while(Serial.available()) {
character = Serial.read();
content.concat(character);
}
no la entiendo, ¿Qué hace? Para los que saben de C pero no de arduino, aclaro que si escribes cualquier cosa en el Serial (a secas), te devuelve el último caracter.
Creo que va así:

mientras el el puerto serie esté disponible lo que hace es sacar un carácter y concatenarlo al string content, cuando deje de estar disponible sale del bucle.

Por lo tanto si escribes en el serial encender lo que haría ese bucle while sería lo siguiente

Iteración 0:

valor de content = ""

Iteración 1:

valor de content = "e"

Iteración 2:

valor de content = "en"

Iteración 3:

valor de content = "enc"

...

Iteración 8:

valor de content = "encender"

Resumiendo, por cada iteración va sacando un carácter y lo va concatenando al valor actual de content.

Yo he usado Arduino este año y se suele hacer así para sacar caracteres del puerto serie.
1 respuesta