Ya tenemos aquí la segunda entrega de este tutorial de Heserral sobre el puerto de serie de Arduino. En esta 2ª parte, aprenderemos como procesar cadenas de texto y como recibir números enteros. Lo que aunque parezca una chorrada, no lo es, puesto que como hemos visto en el capítulo anterior, el puerto serie recibe byte a byte (o lo que es lo mismo, caracter a caracter) y por si fuera poco, vienen en formato Decimal.
Que no cunda el pánico…..vamos a ver que es muy sencillo.
EJEMPLO:
Arduino va a estar a la espera de los comandos que el enviemos por el puerto serie. Si recibe una cadena de texto “arranca”, enciende el LED del Pin 13…..cualquier otra cosa que escriba, apaga el pin.
int ledPin = 13;
char vstart[]=”arranca”;
void setup() {
Serial.begin(9600);
}
char cadena[24];
byte contador=0;
void loop(){
if(Serial.available()){
memset(cadena, 0, sizeof(cadena));
while (Serial.available()>0){
delay(5);
cadena[contador]=Serial.read();
contador++;
}
cadena[contador]=0;
contador=0;
if (comando()==true){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}
}
boolean comando(){
boolean n=false;
for(int i=0; i<=6;i++){
if((cadena[i]==vstart[i])){
n=true;
}else{return false;}
}
Serial.println(cadena);
return true;
}
Creamos el comando “arranca” como un array de char (Recordemos que en Arduino, en un principio, no existen los Strings).
creamos un array que va a contener la cadena escrita en la consola…le asignamos un tope de 24 caracteres (Nos sobra).
memset : Lo que hace es limpiar el contenido del array cadena , desde la posición 0, hasta el valor máximo del array (Sizeof))…si no borramos el array después de cada lectura, lo que va a pasar, es que nos van a quedar los caracteres de las palabras que hemos escrito antes, en las posiciones que no hemos sobreescrito….me explico:
Escribo: holamundo…..sin borrar el array, escribo por encima prueba…..lo que voy a tener al final en el array es probando (ando, queda como residuo de holamundo)
memset, elimina el problema y deja el array limpito, limpito.
Creamos una nueva función comando que lo que hace es comprobar uno a uno, los caracteres escritos en la consola, con los caracteres que contiene vstart =”arranca”….si van coincidiendo, modifica la variable local n y va indicando que los caracteres coinciden.
En el momento que un caracter no coincida, sale directamente del bucle y devuelve un falso (la cadena no coincide) como respuesta.
EL TRUCO, ESTÁ EN CONTARLOS CARACTERES DE VSTART (6) for(int i=0; i<=6;i++) Y COMPROBAR QUE COINCIDEN CON LOS 6 PRIMEROS DE CADENA (QUE TIENE 24)
OBTENER UN ENTERO DESDE EL PUERTO SERIE
void setup() {
Serial.begin(9600);
}
char cadena[24];
byte contador=0;
int valor=0;
void loop(){
if(Serial.available()){
memset(cadena, 0, sizeof(cadena));
while (Serial.available()>0){
delay(5);
cadena[contador]=Serial.read();
contador++;
}
valor=atoi(cadena);
Serial.println(valor+1);
contador=0;
}
}
Definimos, igual que antes una cadena de tipo char con 24 caracteres como máximo
y una nueva variable de tipo entero valor que va a contener el número sacado de cadena.
EL TRUCO está en atoi (Array to integer).Convierte un array en un número entero.
Para probar que tenemos un entero (y no una string de caracteres numéricos), imprimimos la suma de valor +1
Esperamos que os haya sido de utilidad… podeís encontrar más información y tutoriales sobre Arduino en Heserral Blog











me gustaria un correo de contacto para una consulta sobre analisis de datos seriales povenientes de bascula digital