Diferencia entre revisiones de «Serial.readBytes()»
De ArduWiki
(→Ejemplo 2) |
|||
(No se muestran 5 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
− | Lee caracteres desde el búfer del puerto serie. La función termina si la longitud determinada se ha leído, o el tiempo de espera (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, o el tiempo de espera (ver [[Serial.setTimeout()]]) se ha agotado. |
== Sintaxis == | == Sintaxis == | ||
Línea 8: | Línea 8: | ||
== Parámetros == | == Parámetros == | ||
− | ;buffer: el buffer para almacenar los bytes ([[char]] o [[byte]]). | + | ;buffer: el buffer/vector/matriz para almacenar los bytes ([[char]]* o [[byte]]*). |
− | ;largo: el número de bytes a leer | + | ;largo: el número de bytes a leer ([[int]]). |
== Retorna == | == 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. | |
== Advertencias == | == 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 == | + | == Ejemplo 1 == |
+ | Hay que recordar que el puerto serie transmite caracteres ASCII. Asi por ejemplo si enviamos 23 la respuesta sera 50 y 51. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | byte ref[2]; | ||
+ | void setup(){ | ||
+ | Serial.begin(115200); | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | if (Serial.available() > 2){ | ||
+ | Serial.readBytes(ref, 2); | ||
+ | Serial.println(ref[0]); | ||
+ | Serial.println(ref[1]); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 2 == | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
+ | if (Serial.available()) { | ||
+ | buffer[Serial.readBytes(buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres | ||
+ | Serial.print(F("Mensaje recuperado: \"")); | ||
+ | Serial.print(buffer); | ||
+ | Serial.println('\"'); | ||
+ | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Vea también == | == Vea también == | ||
− | + | <categorytree mode=all>Serial</categorytree> | |
− | |||
− | |||
− | |||
− | |||
== Referencias == | == Referencias == | ||
− | [[Category: | + | [[Category:Serial]] |
Revisión actual del 00:33 25 jun 2019
Contenido
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, o el tiempo de espera (ver Serial.setTimeout()) se ha agotado.
Sintaxis
Serial.readBytes(buffer, largo);
Parámetros
- 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.
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 1
Hay que recordar que el puerto serie transmite caracteres ASCII. Asi por ejemplo si enviamos 23 la respuesta sera 50 y 51.
byte ref[2];
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available() > 2){
Serial.readBytes(ref, 2);
Serial.println(ref[0]);
Serial.println(ref[1]);
}
}
Ejemplo 2
if (Serial.available()) {
buffer[Serial.readBytes(buffer, sizeof(buffer) - 1)] = 0; // Colocar el terminador de cadenas de caracteres
Serial.print(F("Mensaje recuperado: \""));
Serial.print(buffer);
Serial.println('\"');
}
Vea también