Diferencia entre revisiones de «Serial.readStringUntil()»
De ArduWiki
m |
(→Ejemplo) |
||
Línea 16: | Línea 16: | ||
* Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota) y nunca se encuentra el caracter terminador, se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar. | * Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota) y nunca se encuentra el caracter terminador, se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, [[String]] es ilimitado en tamaño; pero como la [[SRAM]] no es así, eventualmente el programa llegará a colapsar. | ||
− | == Ejemplo == | + | == Ejemplo 1 == |
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
if (Serial.available()) { | if (Serial.available()) { | ||
− | + | Serial.print(F("Linea de texto leida: \"")); | |
− | + | Serial.print(Serial.readStringUntil('\r')); // Ojo con el tamaño, que puede que de aquí no pase u ocurra comportamiento indefinido. | |
− | + | Serial.println('\"'); | |
− | + | Serial.read(); // Descarta el '\n' que suele venir con el '\r' | |
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 2 == | ||
+ | <syntaxhighlight lang="c++"> | ||
+ | void setup(){ | ||
+ | Serial.begin(115200); | ||
+ | } | ||
+ | void loop(){ | ||
+ | if (Serial.available()>7) { | ||
+ | Serial.print(Serial.readStringUntil("\r\n")); | ||
+ | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Revisión del 19:35 12 jul 2018
Contenido
Descripción
Lee caracteres y los coloca en un String. La función termina si 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.readStringUntil(caracter);
Parametros
- caracter
- el caracter terminador (char).
Retorna
El objeto String resultante de la lectura.
Advertencias
- Hay un "bug" o fallo con esta función: si el flujo de entrada es constante (tiempo de espera nunca se agota) y nunca se encuentra el caracter terminador, se corre el riesgo de colgar completamente el programa. La razón se debe a que, conceptualmente, String es ilimitado en tamaño; pero como la SRAM no es así, eventualmente el programa llegará a colapsar.
Ejemplo 1
if (Serial.available()) {
Serial.print(F("Linea de texto leida: \""));
Serial.print(Serial.readStringUntil('\r')); // Ojo con el tamaño, que puede que de aquí no pase u ocurra comportamiento indefinido.
Serial.println('\"');
Serial.read(); // Descarta el '\n' que suele venir con el '\r'
}
Ejemplo 2
void setup(){
Serial.begin(115200);
}
void loop(){
if (Serial.available()>7) {
Serial.print(Serial.readStringUntil("\r\n"));
}
}