miércoles, 11 de mayo de 2016

Conversion de una cadena a un numero entero en Processing

Conversión De Una Cadena De Caracteres Enviada Por El Puerto Serie A Un Número Entero En Processing

Los datos enviados por el puerto serie corresponden a un código que representa caracteres alfanuméricos, este código empleado se llama ASCII y es un estándar empleado para el envió y recepción de datos.
Muchos de los datos enviados son numéricos pero representados en ASCII por lo cual es necesario una conversion del conjunto de datos o cadena recibida a su valor numérico decimal correspondiente.
En este ejemplo se envía una cadena de caracteres desde un microcontrolador por el puerto serie, la cadena tiene los caracteres de salto de linea y retorno de carro.

Caracteres no imprimibles presentes en la cadena

Caracter Nulo '\0' es el terminador de una cadena su código ASCII es el 0 también se representa con la palabra reservada null
Caracter New Line '\n' es el salto de linea su codigo ASCII es el 10
Caracter Back Space '\b' es el terminador de una cadena su codigo ASCII es el 8
Caracter Carriage Return '\r' retorno de carro su codigo ASCII es el 13
Pinguino o Arduino envía un retorno de carro '\r' y un salto de linea '\n' cuando se emplea la instruction Serial.println()
Pinguino o Arduino con la instrucción Serial.print() no envía los caracteres especiales de salto de linea y retorno de carro

Referencia

Código Pinguino o Arduino

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("123");
}

Código Processing

import processing.serial.*;//libreria de comunicacion serial
Serial miPuerto;//Objeto puerto
String strNombrePuerto;//Cadena de caracteres para almacenar el nombre del puerto a emplear en la comunicacion
String strDatoRecibido="";//Cadena de caracteres para almacenar el dato enviado por el microcontrolador
String strDato="";
int intDatoRecibido;
void setup() {
  size(200, 200);
  println("Puertos disponible: "+Serial.list());//muestra el listado de los puertos disponibles para comunicacion serial
  strNombrePuerto=Serial.list()[0];//Nombre del puerto 0 del listado de puertos seriales disponibles
  println(strNombrePuerto);//Muestra el nobre del puerto 0 en consola
  miPuerto=new Serial(this, strNombrePuerto, 9600);//configuracion del puerto a 9600 baudios
}
void draw() {
  if ( miPuerto.available() > 0) { //Verifica que hay un nuevo dato 
    strDatoRecibido = miPuerto.readStringUntil('\n');//almacena hasta encontrar el caracter de salto de linea
  }
  if (strDatoRecibido.length()==5) {//la cadena enviada por el microcontrolador tiene 5 caracters tres digitos mas salto de linea y retorno de carro
    strDatoRecibido = trim(strDatoRecibido);//elimina los caracteres especiales de la cadena como retorno de carro y salto de linea
    println("tamaño "+strDatoRecibido.length());//El tamaño a mostrar debe ser 3 ya que elimino el retorno de carro y salto de linea
    println("cadena "+strDatoRecibido);//Muestra la cadena recibida
    intDatoRecibido=Integer.parseInt(strDatoRecibido);//Convierte la cadena recibida a un valor entero
    println("entero "+intDatoRecibido);//Muestra el valor entero
  }
  println("Cantidad de datos en el buffer: "+miPuerto.available());//Muestra cuantos datos hay en el buffer
  miPuerto.clear();//limpia el buffer de recepcion de datos seriales
}

No hay comentarios:

Publicar un comentario en la entrada