Diferencia entre revisiones de «Serial.read()»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo 4)
(Advertencia)
Línea 16: Línea 16:
 
* Si por error no se verifica de antemano si hay datos disponibles, '''read()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
 
* Si por error no se verifica de antemano si hay datos disponibles, '''read()''' retornará 255 para [[byte]] en el caso que el valor real sea -1 (nada).
 
* El buffer en el caso de [[UNO]] y [[NANO]] es de 64 kB. Aunque esto se puede cambiar con la libreria '''HardwareSerial.h'''.
 
* El buffer en el caso de [[UNO]] y [[NANO]] es de 64 kB. Aunque esto se puede cambiar con la libreria '''HardwareSerial.h'''.
 +
* El monitor serie '''nunca''' añade a la cadena escrita CR (\n) ni LF (\n) si haces un simple '''Enter'''. No asi si lo escribes en un block de notas y lo copias en la linea de envio.
  
 
== Ejemplo 1 ==
 
== Ejemplo 1 ==

Revisión del 11:56 28 abr 2019

Descripción

Lee o captura un byte (un carácter) desde el puerto serie.

Sintaxis

char variable = Serial.read();

Parametros

variable
variable para capturar char o byte de entrada. Cuidado no es lo mismo ver ejemplos 1 y 2.

Retorno

El valor recuperado según el número de bits de datos configurado, o -1 si el buffer de entrada está vacío (int).

Advertencia

  • Si por error no se verifica de antemano si hay datos disponibles, read() retornará 255 para byte en el caso que el valor real sea -1 (nada).
  • El buffer en el caso de UNO y NANO es de 64 kB. Aunque esto se puede cambiar con la libreria HardwareSerial.h.
  • El monitor serie nunca añade a la cadena escrita CR (\n) ni LF (\n) si haces un simple Enter. No asi si lo escribes en un block de notas y lo copias en la linea de envio.

Ejemplo 1

En este primer ejemplo usamos una variable tipo char para capturar el caracter.

void setup(){
   Serial.begin(9600);
}
void loop(){
   if (Serial.available()){        //Espera carácter
      char car = Serial.read();    //Lee carácter enviado y lo borra del buffer
      Serial.println(car);         //Imprime carácter enviado
   }
}

Ejemplo 2

En este segundo ejemplo usamos una variable tipo byte para capturar carácter.

void setup(){
   Serial.begin(9600);
}
void loop(){
   if (Serial.available()){        //Espera carácter
      byte car = Serial.read();    //Lee carácter enviado y lo borra del buffer
      Serial.write(car);           //Imprime caracter enviado
      Serial.print(" = ");
      Serial.println(car);         //Imprime código ASCII carácter enviado
   }
}

Ejemplo 3

Es este ejemplo capturaremos varios caracteres y los almacenamos uno a uno en una variable tipo String.

String frase = "";
 
void setup(){
   Serial.begin(9600);
}
 
void loop(){
   while (Serial.available()){
      char caracter = Serial.read();
      frase.concat(caracter);
      delay(10);
   }
   if (frase != ""){
      Serial.println(frase);
      frase = "";
   }
}

Ejemplo 4

Este ejemplo recibe una matriz de ints.

int datos[10];
 
void setup(){
   Serial.begin(9600);
} 
 
void loop(){   
   if (Serial.available() >= 10 * sizeof(datos[0])){
      Serial.readBytes((byte*)datos, 10 * sizeof(datos[0]));
   }
}

Vea también

Referencias