Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
enero 12, 2016enero 12, 2016 Gustavo Circelli Arduino, Arduino para
principiantes, Programacin
(Visto 14 veces, 7 visitas hoy)
Serial Arduino parte II, tratar las diversas funciones para el tratamiento de
Cadenas, y que ya hemos introducido el la primera parte Arduino Serial Parte
I Veremos la manipulacin de cadenas , y arreglos o arrays[], y si vamos un
poco mas profundo, el uso de punteros. En esta entrada vamos a cubrir la
funcin Serial.read() de lectura de datos y su relacin con las cadenas.
Lo primero que vamos a ver es la funcin Serial.read() , luego lo que son los
arrays[], como se definen e inicializan. Teniendo un conocimiento de los
arrays[], despus podemos introducirnos en el mundo de las Cadenas que son
un caso especial de los arrays[], y mas tarde con los punteros dada su similitud
con las cadenas que conceptualmente estn muy ligados dado que el elemento
de la cadena es un puntero indexado.
Serial.read()
Esta funcin lee de a un Byte nicamente, y al hacerlo lo extrae del buffer.
Recordemos que un dato que enviado desde el Monitor Serial es primero
interpretado como ASCII y el monitor lo que hace es enviar los Bytes
convertidos. Por ejemplo si enviamos un 1, el monitor interpretar que es un
ASCII, as, enviar el entero 49 que es el ASCII (1). Despus resta, como
nosotros desde Arduino, lo interpretemos o que tipo de variables utilicemos
para recuperarlo. El monito de Arduino cuando enva datos, lo hace de acuerdo
a la configuracin que tengamos seteada en dicho monitor. Si observamos
tenemos varias opciones de configuracin:
Serial.read()
Para nuestro anlisis carguemos el siguiente cdigo donde Arduino lo que hace
es renviar como loop todo lo mismo que recibe
Loop
Serial.available()
....
Edificio[9] vive Mirta
Array[]
Declaracin e inicializacin de Arreglos
Existen varias maneras de declarare inicializar datos a los arreglos, lo primero
que debemos especificar es el Tipo de dato que va a contener el array[], es
decir, siguiendo con la analoga del edificio, que es lo que vive o se aloja en
cada departamento. Lo segundo es la dimensin.
<Tipo de dato> nombreArray [Dimensin];
int arreglo[10]; // De esta manera especificamos que cada elemento ser un
entero.
float arreglo[20]; // Cada elemento ser un float. De igual manera podemos
especificar tipos como String (Cadenas), char, punteros, etc, etc.
Inicializacin de Arrays
Se pueden declarar arrays[] y asignar ms tarde o directamente declarar y
asignarle los elementos, vemos los casos posibles:
Caso 1: Declaracin solamente y posterior inicializacin
Int precios [4];
precios[0]=10; precios[1]=24; precios[2]=10045; precios[3]=0;
Caso 2: Declaracin e inicializacin
Int percios[4]={10,24,10045,0};
Caso 3: Declaracin e inicializacin ( sin dimensin)
Int precios[]={10,24,10045,0};
Recorriendo Arrays[]
El array[] se accede mediante el ndice de los elementos, dicho ndice x es un
puntero dentro del array[x] que apunta al contenido en la posicin x. Si int
precios [4]={10,24,10045,0}; precios[1] ser 24, el ndice x=1. Vemos como
Recor
rido Arrays[]Cada 500 ms se imprimir el vector completo.
Array[] de
Cadenas
Cadenas
Las cadenas, como fue introducido, son conjunto de caracteres con la
caracterstica que poseen un carcter especial de terminacin de cadena \0 o
llamado carcter Null de fin de cadena o ASCII(0). Existen varias maneras de
definir cadenas.
Lo que distingue simplemente un array de caracteres y una cadena , es que la
cadena es un array de caracteres + el ltimo elemento Null o \0.
String datosCadena=soy cadena tambin;
char arreglo[]={n,o,-, s,o,y,-, c,a,d,e,n,a};
char cadena[]={s,o,y,-, c,a,d,e,n,a,\0};
char otracadena[]=Soy otra Cadena;
arreglo es simplemente un vector de caracteres NO una cadena. Cadena si es
una cadena. datosCadena y otracadena tambin son cadenas.
La diferencia es que en caso de definirlas con arrays[] hay que inclur el \0
final de cadena.
Esto es hablando extrictamente del Ansi C o standard C. Este carcter no
se visible y tampoco se puede imprimir ya que se usa como fin de cadena. Las
funciones print y println estn compliladas en sus libreras de manera buscan
ese carcter para saber cuando finaliza la impresin, o la unin de cadenas, las
funciones que manipulan cadenas en general. Cuando deben mandar algo al
puerto Serie , previamente le agregan en Null antes de llamar a la librera, en el
sistema Arduino ( Ojo esto es solo en las funciones print/println) ya que tratan
al argumento como cadenas, no ocurre as con otras funciones que manipulan
cadenas pues suponen que lo son.
Veamos este ejemplo y nos queda mas claro:
Tenemos un arreglo de caracters sin fin de cadena y datos que es una cadena
char arreglo[]={n,o,-, s,o,y,-, c,a,d,e,n,a};
Cadenas
Se observa:
no soy-cadena
De esta manera hemos podido imprimirla dado que lo recorrimos como un
vector, como hemos visto.
Veamos lo siguente que pasa cuando la cadena, no es cadena y se usan las
funciones de librera de Cadenas
String datos=soy Juan; es una cadena
char cadena[]={s,o,y,-, c,a,d,e,n,a,\0}; esta tambin es cadena
La funcin concat permite unir cadenas, similar al operador + de cadenas
tambin con el Objeto String
Funcin concat
Operador +
Conclusin Importante: Si trabajamos los arreglos char[] como cadenas no
olvidar el carcter Null ya que si se pretende usar las funciones cadena va a
haber problemas extraos. Si queremos usar cadenas sin arreglos pueden
usar el Objeto String que permite definir variables cadena y automaticamente
genera el Null. Las funciones print/println son funciones que tratan a las
variables como cadenas de texto
Funcines de cadena
unacadena.length(): devuelve la longitud de unacadena (es decir, el nmero
de caracteres). No se cuenta el carcter nulo que marca los finales de cadena.
No tiene parmetros.
unacadena.compareTo(otracadena): compara unacadena con otracadena que
se pase como parmetro (bien de forma literal, bien mediante un objeto
String). Comparar significa detectar qu cadena se ordena antes que la otra.
Las cadenas se comparan desde su principio carcter a carcter utilizando el
orden de sus cdigos ASCII. Esto quiere decir, por ejemplo, que a va antes que
b pero despus que A, y las cifras van antes de las letras. Su valor de retorno
ser un nmero negativo si unacadena va antes que la cadena pasada como
parmetro, 0 si las dos cadenas son iguales o un nmero positivo si
unacadena va despus que la cadena pasada como parmetro.
funcionesCadena
resin Funciones Cadena
Imp
getBytes()
getBytes()
y la salida sera 80-97-110-97-109-97-Null. Ahora si son los Ascii de todo el
substring Panama
El arreglo[cantidad-1]=Nul, no tiene mucho sentido ni razn de porque es esto.
Si la conversin fuera no a Bytes[] sino a Char[], tendra sentido porque en
realidad obtendramos una cadena. Quizs sea un bug de la versin de
Arduino.
Probemos entonces con toCharArray()
toCharArray()
Vemos que ahora no es necesario el bucle For como el caso anterior. Por
qu? , porque arreglo2[] es un arreglo de caracteres y es uno de los
argumentos favoritos de Print y Println.
caracteres y enviar los ASCII uno a uno . Luego sumarle otro valor flotante , el
mismo 100.5 y presentar el resultado.
Utilizando
flag para que permita que While() salte
De esta manera permitimos evitamos el delay( ) del caso anterior que
el bloqueante, y el micro no puede hacer otra cosa que esperar. Esto permite
que el Micro pueda ejecutar otros procesos.
Si fuese por ejemplo un dispositivo, no desde el monitor , desde donde viniesen
los datos, por ejemplo BlueTooth() que tambin es serie, podramos inventar
una trama en donde la misma termine con el carcter z. Por ejemplo el
dispositivo enva el entero 145z y nosotros tenemos que filtrar y tomar el 145.
Suponemos que CR y LF no se usan as que para simular colocamos el monitor
en Sin Ajuste de lnea aunque de la otra manera igual funciona. Para probar
este cdigo, desde el monitor haga Send cualquier entero y z, ejemplo 14534z.
Te gust? Comparte!
Relacionado
Gustavo Circelli
Ingeniero Electrnico egresado de la U.N.Mar del Plata, Analista Programador
(ISSD Crdoba) , Profesor PDI (UTN). Especialista en Comunicaciones y
sistemas automatizados.
Post navigation
Algoritmos, Diagramas de Flujo y el Arte de Programar
Punteros , Serial Arduino Parte III
Buscar en Panama Hitek
Principio del formulario
Licencia
Panama Hitek by Antony Garca G. and Kiara Navarro is licensed
under a Creative Commons Reconocimiento-NoComercial 4.0 Internacional
License.
Nuestros contenidos listados segn categoras
antony.garcia.gon ES
PP-DonationsBF:b
Panama Hitek
USD
Vistanos!!
Mantente en contacto a travs de nuestras redes sociales. Vistanos aqu
tambin.
Panamahitek 2014 - Todos los Derechos Reservados.