Diferencia entre revisiones de «Serial.readBytesUntil()»

De ArduWiki
Saltar a: navegación, buscar
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
lee los caracteres del buffer serie en una matriz. La función termina si se detecta el carácter terminador, la longitud determinada ha sido leído, o el tiempo de espera se ha alcanzado (ver Serial.setTimeout()).
+
Lee caracteres desde el búfer del puerto serie, hacia el especificado. La función termina si la longitud determinada se ha leído, se ha encontrado el caracter terminador (no lo incluye en la lectura pero sí lo descarta del buffer de entrada del puerto), o el tiempo de espera (ver Serial.setTimeout()) se ha agotado.
  
 
== Sintaxis ==
 
== Sintaxis ==
Línea 8: Línea 8:
  
 
== Parametros ==
 
== Parametros ==
:caracter: el caracter a buscar tipo [[char]].
+
:caracter: el caracter terminador ([[char]]).
:buffer: el buffer para almacenar los bytes tipo [[char]] o [[byte]].
+
:buffer: el buffer/vector/matriz para almacenar los bytes ([[char]]* o [[byte]]*).
;largo: tel número de bytes a leer tipo [[int]].
+
;largo: el número de bytes a leer ([[int]]).
  
 
== Retorna ==
 
== Retorna ==
Devuelve el número de caracteres leídos en el buffer. Un 0 significa que no se encontraron datos válidos.
+
Devuelve el número de caracteres colocados en el búfer ([[int]]). Un 0 significa que no se encontró nada durante el tiempo de espera o antes del terminador.  
  
 
== Advertencias ==
 
== Advertencias ==
Nada.
+
* La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución ([[SRAM]]).
  
 
== Ejemplo ==
 
== Ejemplo ==
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 +
if (Serial.available()) {
 +
  buffer[Serial.readBytesUntil('\r', buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
 +
  Serial.read(); // Descarta el '\n' que suele venir con el '\r'
 +
  Serial.print(F("Linea de texto leida: \""));
 +
  Serial.print(buffer);
 +
  Serial.println('\"');
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Revisión del 20:16 7 jul 2018

Descripción

Lee caracteres desde el búfer del puerto serie, hacia el especificado. La función termina si la longitud determinada se ha leído, se ha encontrado el caracter terminador (no lo incluye en la lectura pero sí lo descarta del buffer de entrada del puerto), o el tiempo de espera (ver Serial.setTimeout()) se ha agotado.

Sintaxis

Serial.readBytesUntil(caracter, buffer, largo);

Parametros

caracter: el caracter terminador (char).
buffer: el buffer/vector/matriz para almacenar los bytes (char* o byte*).
largo
el número de bytes a leer (int).

Retorna

Devuelve el número de caracteres colocados en el búfer (int). Un 0 significa que no se encontró nada durante el tiempo de espera o antes del terminador.

Advertencias

  • La longitud del buffer debe respetarse, de lo contrario se corre el riesgo de un "desbordamiento de buffer" que puede corromper el contenido la memoria de ejecución (SRAM).

Ejemplo

if (Serial.available()) {
  buffer[Serial.readBytesUntil('\r', buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
  Serial.read(); // Descarta el '\n' que suele venir con el '\r'
  Serial.print(F("Linea de texto leida: \""));
  Serial.print(buffer);
  Serial.println('\"');
}

Vea también

Referencias