Tutorial - Comunicación serial: Parte 7 (Envío de datos) / datos tipo float

En esta ocasión enviaremos un dato tipo float ingresado por el Monitor Serial de Arduino a la plataforma, para que esta nos reenvíe el dato con punto decimal sin pérdida de datos con un porte máximo de 20 caracteres.

El programa usado es el siguiente:
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL
     
   El siguiente programa nos ayuda a enviar datos del tipo flotante a un Arduino y que se retorne el
   mismo dato enviado con un porte de hasta 20 caracteres

   Formato del dato: xxx.xxx

   Autor: Carolina G.
   http://beetlecraft.blogspot.pe/
    
   El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera 
   ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor
*/

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

void loop(){
  float dato; // Variable de almacenamiento de dato transformado
  
  // Mensaje en puerto serial
  Serial.print("Dato: ");
  dato = dato_salida();   // Lectura del dato arreglado
  Serial.println(dato);
}

float dato_salida(){       // Dato de salida
  float dato_flotante = 0; // Constructor de dato enviado 
  char vector[20];         // Variable de almacenamiento de dato leido por serial   
  int flag = 0;            // Flag de entrada de bucle while
  
  while (flag == 0){ // Bucle mientras el flag sea menor que 1
       
    if (Serial.available()) { // Lectura del puerto serial abierto
      delay(100);
      int i = 0; // Variable auxiliar de construccion de vector
      
      while (Serial.available() > 0){ // Lectura mientras tenga valores el buffer
        char inByte = Serial.read();  // Variable de almacenamiento de entrada de datos
        vector[i] = inByte;           // Vector de almacenamiento para construccion de dato
        i += 1;                       // i = i + 1
        flag = 1;               
      }
      
      dato_flotante = atof(vector);      // Conversion del vector de char a float
      memset(vector, 0, sizeof(vector)); // Limpia los datos ingresados al vector
    }
  } 
  
  return dato_flotante; // Retorna el valor arreglado 
}
El resultado es el siguiente:



Autor: 

No hay comentarios:

Publicar un comentario