miércoles, 26 de diciembre de 2018

Arduino El dato pasado por serial es Numero o Caracter

Estoy con una parte del programa, en el cual solo podemos recibir números y para distinguir entre numero o letra he realizado este pequeño programa.

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //Inicializamos el serial

}

void loop() {
  
  char ch = ' ';       //Variable donde se guarda el char que se recibe por serial.
  bool TodoNumeros = true; //Para saber si todos los caracteres recividos son numeros
  String Mensaje ="" ; //Variable para guardar el texto pasado por serial.
  
  //Lee serial
  if (Serial.available()) //Si el serial esta libre...
    {
    while( ch != '\n') //leemos hasta el retorno de carro o enter.
      { 
      ch = Serial.read(); //Lee un caracter.
   
      TodoNumeros = EsNumero(ch);
      
      if (TodoNumeros == true) Mensaje = Mensaje + ch ; //lo anadimos a la variable mensaje.
 
      delay(25); //Esperamos 25ms para evitar colixiones de datos.
      }//Fin del while
      
     }//Fin del if
     Serial.print ("Leido: ");
  Serial.println (Mensaje);
  delay(2000);
}//Fin Loop

//Esta funcion analiza si el CHAR pasado es numero o un caracter
bool EsNumero(char n){
  
  bool Numero = false;// Valor por defecto false para que entregue un error
 
  switch ( n ){
    
   case '0':  Numero = true;  break;
   case '1':  Numero = true;  break;
   case '2':  Numero = true;  break;
   case '3':  Numero = true;  break;
   case '4':  Numero = true;  break;
   case '5':  Numero = true;  break;
   case '6':  Numero = true;  break;
   case '7':  Numero = true;  break;
   case '8':  Numero = true;  break;
   case '9':  Numero = true;  break;
  
   default:
     Numero = false;// Si no es numero da error
   break;
   
  }
  /*
  Serial.print ("");
  Serial.print ("Caracter: ");
  Serial.println (n);
  Serial.print ("Bolean: ");
  Serial.println (Numero);*/
  delay(200);
  
  return Numero;
}// Fin EsNumero

No hay comentarios:

Publicar un comentario