Diferencia entre revisiones de «Serial.parseInt()»

De ArduWiki
Saltar a: navegación, buscar
(Referencias)
 
(No se muestran 12 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Busca el siguiente número entero válido en la serie entrante stream.parseInt()hereda de la clase de utilidad Stream.
+
Busca el siguiente número entero entre los datos entrantes, asumiendo que está codificado como texto. Se rige bajo las siguientes reglas:
  
* Los caracteres iniciales que no son dígitos o un signo menos, se saltan;
+
* Los caracteres iniciales que no son dígitos o un signo menos, se saltan.
* El análisis se detiene cuando no se han leído caracteres para un valor de tiempo de espera configurable, o se lee un dígito no;
+
* El análisis se detiene cuando el tiempo de espera se agota, o se lee un caracter que no es dígito (excluyendo el ignorado).
* Si no se leyeron dígitos válidos cuando se produce el tiempo de espera (vea [[Serial.setTimeout()]]), se devuelve 0;
+
* Si no se leyeron dígitos válidos durante el tiempo de espera (vea [[Serial.setTimeout()]]), se devuelve 0.
  
 
== Sintaxis ==
 
== Sintaxis ==
 
<pre>
 
<pre>
 
Serial.parseInt();
 
Serial.parseInt();
 +
Serial.parseInt(caracter);
 
</pre>
 
</pre>
  
 
== Parametros ==
 
== Parametros ==
 +
;caracter: caracter a ignorar una vez iniciado el proceso ([[char]]).
  
 
== Retorna ==
 
== Retorna ==
Devuelve un numero tipo [[int]] o '''0'' si no encuentra nada.
+
Devuelve un número tipo [[long]], o '''0''' si no encuentra nada.
  
 
== Advertencias ==
 
== Advertencias ==
Nada.
+
* Si de parámetro se introduce el símbolo de menos ('-'), el valor retornado nunca será negativo.
 +
* Este parámetro es muy útil para ignorar coma (',') en números como: 10,000.
  
== Ejemplo ==
+
== Ejemplo 1 ==
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 +
123  --> 123
 +
a123 --> 123
 +
123a --> 123
 +
1a2a3 -->1, 2 y 3
 +
</syntaxhighlight>
 +
 +
== Ejemplo 2 ==
 +
En este ejemplo mete uno a uno los dígitos entre 0~9 en monitor serie.
 +
 +
<syntaxhighlight lang="c++">
 +
byte x;
 +
int y;
 +
void setup(){
 +
  Serial.begin(115200);
 +
}
 +
void loop(){
 +
  if (Serial.available()){
 +
      x = Serial.peek();
 +
      y = Serial.parseInt();
 +
      Serial.print(x);        //ASCII
 +
      Serial.print(" = ");
 +
      Serial.println(y);      //Entero
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
== Ejemplo 3 ==
 +
Implementacion de un '''buffer circular''' que se usa para almacenar los ultimos n valores recibidos para efectos de hacer un promedio por ejemplo.
 +
 +
<syntaxhighlight lang="c++">
 +
const byte ventana = 5;
 +
int circularBuffer[ventana];
 +
byte indice = 0;                  //Indice circular
 +
 +
//Mete nuevo "valor" al buffer circular
 +
void meter(int valor){
 +
  circularBuffer[indice] = valor;
 +
  indice++;
 +
  if (indice >= ventana){
 +
      indice = 0;
 +
  }
 +
}
 +
 
void setup(){
 
void setup(){
   Serial.begin(9600);
+
   Serial.begin(115200);
 
}
 
}
 +
 
void loop(){
 
void loop(){
 
   if (Serial.available()){
 
   if (Serial.available()){
       byte car = Serial.peek();   //Lee carácter enviado y NO borra del buffer.
+
       int x = Serial.parseInt();
       Serial.write(car);           //Imprime siempre lo mismo
+
      meter(x);
 +
      for (byte n=0; n<ventana; n++){
 +
        Serial.print(circularBuffer[n]);
 +
        Serial.print(",");
 +
      }
 +
       Serial.println();
 
   }
 
   }
 
}
 
}
Línea 33: Línea 85:
  
 
== Vea también ==
 
== Vea también ==
* [[Serial.begin()]]
+
<categorytree mode=all>Serial</categorytree>
* [[Serial.available()]]
 
* [[Serial.read()]]
 
* [[Serial.print()]]
 
* [[Serial.parseFloat()]]
 
* [[Serial.end()]]
 
  
 
== Referencias ==
 
== Referencias ==
 +
* [https://www.luisllamas.es/buffer-circular-arduino/ Buffer circulare en Arduino] - Luis Llamas
  
[[Category:Funciones]]
+
[[Category:Serial]]

Revisión actual del 17:20 25 jun 2019

Descripción

Busca el siguiente número entero entre los datos entrantes, asumiendo que está codificado como texto. Se rige bajo las siguientes reglas:

  • Los caracteres iniciales que no son dígitos o un signo menos, se saltan.
  • El análisis se detiene cuando el tiempo de espera se agota, o se lee un caracter que no es dígito (excluyendo el ignorado).
  • Si no se leyeron dígitos válidos durante el tiempo de espera (vea Serial.setTimeout()), se devuelve 0.

Sintaxis

Serial.parseInt();
Serial.parseInt(caracter);

Parametros

caracter
caracter a ignorar una vez iniciado el proceso (char).

Retorna

Devuelve un número tipo long, o 0 si no encuentra nada.

Advertencias

  • Si de parámetro se introduce el símbolo de menos ('-'), el valor retornado nunca será negativo.
  • Este parámetro es muy útil para ignorar coma (',') en números como: 10,000.

Ejemplo 1

123  --> 123
a123 --> 123
123a --> 123
1a2a3 -->1, 2 y 3

Ejemplo 2

En este ejemplo mete uno a uno los dígitos entre 0~9 en monitor serie.

byte x;
int y;
void setup(){
   Serial.begin(115200);
}
void loop(){
   if (Serial.available()){
      x = Serial.peek();
      y = Serial.parseInt();
      Serial.print(x);         //ASCII
      Serial.print(" = ");
      Serial.println(y);       //Entero
   }
}

Ejemplo 3

Implementacion de un buffer circular que se usa para almacenar los ultimos n valores recibidos para efectos de hacer un promedio por ejemplo.

const byte ventana = 5;
int circularBuffer[ventana];
byte indice = 0;                  //Indice circular
 
//Mete nuevo "valor" al buffer circular
void meter(int valor){
   circularBuffer[indice] = valor;
   indice++;
   if (indice >= ventana){
      indice = 0;
   }
}
 
void setup(){
   Serial.begin(115200);
}
 
void loop(){
   if (Serial.available()){
      int x = Serial.parseInt();
      meter(x);
      for (byte n=0; n<ventana; n++){ 
         Serial.print(circularBuffer[n]);
         Serial.print(",");
      }
      Serial.println();
   }
}

Vea también


Referencias