Professional Documents
Culture Documents
1
ndice
Introduccin 3
Estructuras de control de flujo repetitivas 3
while 4
do while 8
for 11
break y continue 13
go to 14
Comunicacin serie 15
Monitor serie 17
Enviar datos del Arduino al IDE 21
Saltos de lnea y tabulaciones 31
Variables 34
Recibir datos 42
Comunicacin serie entre Arduinos 57
Funciones 68
Funciones con valor de retorno 73
Pasar parmetros a una funcin 76
Interrupciones 81
Interrupciones por seal 81
Interrupciones por tiempo 85
Fritzing 87
Simuladores 90
2
www.full-ebook.com
Introduccin
Este ejemplar es la continuacin del libro Arduino. Entendiendo el
mundo. Tomo I. Por lo tanto, si no has ledo el Tomo I, te recomiendo
que lo hagas antes de continuar con la lectura de este. La finalidad de
este libro es compartir nuevos conocimientos relacionados con los
vistos en el libro anterior.
3
www.full-ebook.com
while
while(condicin)
{
//Instrucciones que se ejecutan mientras se cumpla la condicin
}
Imagen 1.
Imagen 2.
4
www.full-ebook.com
Imagen 3.
Imagen 4.
5
www.full-ebook.com
Imagen 5.
Imagen 6.
Ejercicio propuesto:
6
www.full-ebook.com
1. Conectar un led, un botn y un potencimetro. Regular el led
mientras el botn est pulsado.
7
www.full-ebook.com
do while
do
{
//Instrucciones que se ejecutan al menos una vez y
mientras se cumpla la condicin
}while(condicin);
Imagen 7.
8
www.full-ebook.com
Imagen 8.
Imagen 9.
Ejercicios propuestos:
9
www.full-ebook.com
2.Conectar un led y un potencimetro. El led siempre se
tiene que encender durante al menos 1 segundo y, si la
entrada analgica (conectada al potencimetro) recibe una
seal entre 1 y 4 V, permanecer encendido al menos 1
segundo ms. Cuando no se cumpla esta condicin, el led
deber apagarse durante al menos 4 segundos .
10
www.full-ebook.com
for
11
www.full-ebook.com
Imagen 10.
Imagen 11.
Imagen 12.
12
www.full-ebook.com
break y continue
Imagen 13.
Imagen 14.
13
www.full-ebook.com
Imagen 15.
go to
go to nombre_etiqueta;
-
.
.
.
nombre_etiqueta:;
Imagen 16.
14
www.full-ebook.com
Imagen 17
Comunicacin serie
Para transmitir datos al exterior, un Arduino dispone de varios
protocolos de comunicacin: atendiendo a si es una comunicacin
sncrona o asncrona, disponemos de varios protocolos de
comunicacin. En este captulo, trabajaremos con la comunicacin
serie (UART).
15
www.full-ebook.com
USB. Para ello, el Arduino UNO dispone de un segundo MCU
(ATmega16U2), que realiza la traduccin.
Imagen 18.
Todos los MCU de los Arduinos disponen entonces del hardware para
establecer una comunicacin UART (transmisor receptor asncrono
universal). No necesitamos profundizar en esta tecnologa, lo que nos
interesa saber es que, para que dos dispositivos se comuniquen
mediante UART, se necesitan tres cables: TX, que es por el que se
transmite, RX, por el que se recibe y GND, conexin en comn entre
ambos dispositivos. Al disponer de dos lneas diferentes para recibir y
enviar datos, la comunicacin es full duplex (informacin en ambos
sentidos).
16
www.full-ebook.com
Imagen 19.
Monitor serie
Imagen 20.
Si hacemos clic sobre la lupa, se abre una pestaa, adems del IDE
de Arduino, lo que se conoce como monitor serie.
17
www.full-ebook.com
Imagen 21. Monitor serie
Imagen 23.
18
www.full-ebook.com
Imagen 24.
Imagen 25.
Al lado del conector USB del hardware del Arduino UNO, disponemos
de un botn que sirve para restear el Arduino. Si continuamos con el
mismo programa y circuito anteriores y pulsamos el botn, vemos
que ocurre lo mismo que al abrir el puerto serie.
19
www.full-ebook.com
Imagen 26.
Serial.begin(parmetro);
300
1200
2400
4800
9600
19200
38400
57600
74880
115200
230400
250000
20
www.full-ebook.com
Imagen 27.
Serial.println();
Imagen 28.
21
www.full-ebook.com
Imagen 29.
Serial.print();
Imagen 30.
Imagen 31.
22
www.full-ebook.com
Imagen 32. Conexin Pull-Down externa
Imagen 33.
Imagen 34.
23
www.full-ebook.com
Imagen 35.
Imagen 36
Imagen 37.
24
www.full-ebook.com
Imagen 38.
Imagen 39.
Imagen 40.
25
www.full-ebook.com
Imagen 41.
Imagen 42.
Imagen 43.
26
www.full-ebook.com
Por qu? Un byte est formado por 8 bits, esto significa que
tenemos 256 (28) posibles combinaciones de ceros y unos. Si esto lo
traducimos a nmeros reales, comprendera nmeros entre 0 y 255.
Como la variable es de tipo byte, al llegar a 255 y tratar de
incrementar el valor del contador, este se resetea y vuelve a empezar
desde 0.
Imagen 44.
Imagen 45.
27
www.full-ebook.com
Con todos estos conceptos ms claros, vamos a sacarle un poco ms
de partido a la monitorizacin de un Arduino.
Imagen 46.
Imagen 47.
28
www.full-ebook.com
Imagen 48.
Con todo esto, podemos monitorizar el estado del led a travs del
IDE. Puede darse la circunstancia de que, al cambiar de estado, nos
enve dos veces el mensaje de encendido y apagado. Esto es debido
al mecanismo de un interruptor, que introduce interferencias en la
seal; veremos en prximos tomos cmo eliminar esto.
Imagen 49.
Lo que hace esto es que la seal pase varias veces por el margen que
delimita los dos estados posibles: encendido o apagado, 0 o 1...
Entonces, cabe la posibilidad de tomar lecturas incorrectas. Veremos
cmo solucionar esta cuestin en el prximo tomo, profundizando en
un componente nuevo: el condensador.
29
www.full-ebook.com
Imagen 50.
Imagen 51.
Imagen 52.
Imagen 53.
30
www.full-ebook.com
Tenemos conectado el potencimetro, por un lado, a la entrada
analgica y, por otro, a una entrada digital. Lo que se pretende
demostrar es que los mrgenes para cada estado son: de 0 a 2,5 V,
estado = 0, y de 2,5 a 5 V, estado = 1. Si analizamos el
comportamiento, vemos que, entre 2,4 y 2,6, los cambios se pueden
volver difciles de predecir; es un factor que hay que tener en cuenta
a la hora de disear los circuitos con los que trabajemos.
Salto de lnea: \n
Imagen 54.
Imagen 55.
31
www.full-ebook.com
Imagen 56.
Imagen 57.
Imagen 58.
32
www.full-ebook.com
Imagen 59.
Tabulacin: \t
Al igual que ocurra con \n, que incluye un salto de lnea, con los
caracteres \t se incluye una tabulacin.
Imagen 60.
Imagen 61.
33
www.full-ebook.com
En resumen, el funcionamiento es igual que \n, pero haciendo una
tabulacin y, por supuesto, se pueden usar en un mismo mensaje
varios saltos de lneas y tabulaciones.
Variables
Hasta ahora, hemos visto casi todos los tipos de datos numricos,
salvo los datos tipo float y double, que permiten almacenar datos con
decimales. En estas variables, se pueden almacenar datos entre
3.4028235x1038 a 3.4028235x1038 y se escriben con punto y no con
coma.
34
www.full-ebook.com
Cdigo Cdigo Cdigo
numrico Carcter numrico Carcter numrico Carcter
33 ! 65 A 97 a
34 " 66 B 98 b
35 # 67 C 99 c
36 $ 68 D 100 d
37 % 69 E 101 e
38 & 70 F 102 f
39 71 G 103 g
40 ( 72 H 104 h
41 ) 73 I 105 i
42 * 74 J 106 j
43 + 75 K 107 k
44 , 76 L 108 l
45 - 77 M 109 m
46 . 78 N 110 n
47 / 79 O 111 o
48 0 80 P 112 p
49 1 81 Q 113 q
50 2 82 R 114 r
51 3 83 S 115 s
52 4 84 T 116 t
53 5 85 U 117 u
54 6 86 V 118 v
55 7 87 W 119 w
56 8 88 X 120 x
57 9 89 Y 121 y
58 : 90 Z 122 z
59 ; 91 [ 123 {
60 < 92 \ 124 |
61 = 93 ] 125 }
62 > 94 ^ 126 ~
63 ? 95 _ 127 DEL
64 @ 96
35
www.full-ebook.com
Imagen 62.
Imagen 63.
Imagen 64.
36
www.full-ebook.com
Imagen 65.
Imagen 66.
Imagen 67.
37
www.full-ebook.com
Imagen 68.
Imagen 69.
Imagen 70.
Imagen 71.
38
www.full-ebook.com
Imagen 72.
Imagen 73.
Imagen 74.
39
www.full-ebook.com
Imagen 75.
Serial.write();
40
www.full-ebook.com
Imagen 76.
Imagen 77.
41
www.full-ebook.com
Hasta aqu quizs sea fcil de entender, lo que puede resultar un
poco ms complicado es el envo de nmeros. Cuando se enva un
nmero, lo que se hace es traducir cada dgito con la tabla ASCII y,
luego, se enva cada dgito traducido.
Cdigo
numrico Carcter
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
Es importante tener esta cuestin en cuenta a la hora de recibir
valores del IDE, puesto que, si son nmeros, antes de operar con
ellos, debemos realizar la conversin correcta.
Recibir datos
Serial.availble();
Imagen 78.
42
www.full-ebook.com
Una vez que sepamos si hay datos o no, debemos leerlos y
almacenarlos en una variable, para que se eliminen del buffer de
entrada y dejen espacio a otros datos que se puedan recibir. Si no lo
hacemos, una vez que se llene el buffer de entrada (con 64 datos),
cada carcter que nos enven se perdera.
Serial.read();
Imagen 79.
43
www.full-ebook.com
Imagen 80.
Si enviamos:
Imagen 81.
Ilustracin 82
44
www.full-ebook.com
byte o, lo que es lo mismo, entre carcter y carcter, ponemos un
guion para diferenciar cundo empieza y acaba uno. En la
comunicacin serie pasa algo similar: cada byte viene precedido por
un bit de inicio y un bit de fin, que delimitan cada carcter.
Imagen 83.
Imagen 84.
45
www.full-ebook.com
Antes de enviar un mensaje por el puerto serie y probar si, al enviar
encender, se enciende y, con apagar se apaga, debemos
configurar el monitor serie.
Imagen 85.
Equivalente nmero
Codificacin binario natural
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 1 0 2
0 0 0 0 0 0 1 1 3
0 0 0 0 0 1 0 0 4
0 0 0 0 0 1 0 1 5
Cdigo
numrico Carcter
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
46
www.full-ebook.com
Imagen 86.
toInt();
Imagen 87.
47
www.full-ebook.com
Ejercicios propuestos:
48
www.full-ebook.com
3. Conectar un led, un botn y un pulsador a un Arduino.
Configurar tres modos de funcionamiento que se puedan
controlar desde el IDE: modo 1, el led parpadea cada
segundo; modo 2, el led se puede encender o apagar con el
botn; modo 3, el led se puede regular con el
potencimetro.
49
www.full-ebook.com
Contina
50
www.full-ebook.com
4. Dos Arduinos: el Arduino A recibe rdenes de encendido y
apagado de un led por el puerto serie y el Arduino B tiene
conectado el led. Si el A recibe el mensaje de encender, el B
debe encender el led; si el A recibe el mensaje de apagar, el B
debe apagar el led.
A B
51
www.full-ebook.com
B
52
www.full-ebook.com
5. Dos Arduinos: el Arduino A recibe el valor de regulacin de
un led y el B tiene conectado el led. El Arduino B debe regular
el led en funcin del valor que se enve por el puerto serie al
Arduino A.
A B
53
www.full-ebook.com
6. Dos Arduinos: el Arduino A se comunica por el puerto serie
con el IDE y el Arduino B tiene conectado un botn. En el
momento en el que se pulse o se deje de pulsar el botn del B,
el A debe enviar el mensaje correspondiente del evento que
acaba de ocurrir. (Solo ante un cambio de estado).
A B
54
www.full-ebook.com
7-Dos Arduinos: el Arduino A se comunica por el puerto serie
con el IDE y tiene conectado un potencimetro; por otro lado,
el Arduino B tiene conectado un botn. Cada vez que se pulse
el botn del Arduino B, el A debe enviar al IDE el valor actual
del potencimetro. Solo una vez por cada pulsacin.
B
A
55
www.full-ebook.com
8Traductor de caracteres. Enviar un carcter y que el Arduino
nos devuelva su posicin en la tabla ASCII y su codificacin en
binario.
56
www.full-ebook.com
Comunicacin serie entre Arduinos
A B
Imagen 88.
A B
Imagen 89.
57
www.full-ebook.com
A
Imagen 90.
Imagen 91.
A
B
Imagen 92.
58
www.full-ebook.com
Para esto, lo primero que tenemos que hacer es cargar el programa a
cada Arduino por separado y, luego, conectarlos. Hay que tener en
cuenta que el monitor serie utiliza el mismo canal y, si hay una
comunicacin por los pines RX y TX proveniente de otro Arduino, no
vamos a poder cargar el programa.
Imagen 93.
Imagen 94.
59
www.full-ebook.com
A B
Imagen 95.
Imagen 96.
60
www.full-ebook.com
B
Imagen 97.
En los dos ltimos casos, debido a que el Arduino UNO solo dispone
de un puerto serie, tenemos que cargar primero los programas y,
despus, conectar los circuitos. Si, por ejemplo, queremos establecer
un chat entre dos ordenadores a travs del IDE de Arduino, no
podramos hacerlo; en cambio, si dispusiramos de otro Arduino,
como el Arduino Mega 2560, que dispone de varios puertos, esto ya
sera posible.
Imagen 98.
61
www.full-ebook.com
Como el Arduino Mega 2560 dispone de hasta cuatro puertos serie,
podemos utilizar uno para comunicar el Arduino con el IDE de su PC
y, otro, para la comunicacin con el otro Arduino.
Imagen 99.
Imagen 100.
62
www.full-ebook.com
buscar una librera en concreto; si hemos encontrado algn caso
prctico en una web y vemos que necesitamos una librera, podemos
probar a buscarla en este apartado.
Imagen 101.
Imagen 102.
Por ltimo, nos aparece un listado con todas las libreras instaladas;
muchas de ellas ya vienen instaladas al descargar el IDE de Arduino,
son las que se conocen como libreras oficiales de Arduino.
63
www.full-ebook.com
Las libreras que instalemos por nuestra cuenta se incluirn en esta
lista de libreras, pero con un encabezado diferente. Ahora que
sabemos cmo instalar libreras, tenemos que saber utilizarlas para
tener acceso a sus funciones.
Para ello, debemos declarar qu librera o libreras vamos a utilizar;
una forma sencilla de hacerlo es seleccionarla de la lista. Para el caso
que nos ocupa, necesitamos la librera SoftwareSerial.
Imagen 103.
Imagen 104.
64
www.full-ebook.com
Cada librera implementa sus propias funciones o instrucciones, por lo
que cada librera es un mundo. Como al principio puede resultar
complejo entender cada librera, disponemos de ejemplos para
asimilar su funcionamiento.
Imagen 105.
Imagen 106.
65
www.full-ebook.com
de utilizar un puerto del Arduino UNO para la comunicacin con el IDE
y, otro, para la comunicacin con otro Arduino.
Imagen 107.
Con este paso, ya podemos trabajar con este puerto igual que hemos
hecho con el Serial; la diferencia es que el prefijo es mySerial:
mySerial.print();, mySerial.println();, mySerial.available();.
66
www.full-ebook.com
A
B
Imagen 108.
Imagen 109.
67
www.full-ebook.com
Cargamos el programa anterior a cada Arduino, conectamos entre s
los Arduinos y cada uno a un PC. Abrimos en cada PC el IDE de
Arduino y empezamos a enviar mensajes. Al enviar mensajes,
comprobamos que, los que nosotros enviamos, se visualizan en
nuestro monitor en el margen derecho y, los que nos enva el otro
PC, en el margen izquierdo; se ha programado cada Arduino para
simular el funcionamiento de un chat.
Funciones
Una funcin no es ms que un trozo de cdigo que se identifica con
un nombre y que, para que se ejecute, debe ser llamado. Por lo
tanto, podemos escribir lneas de cdigo fuera del void setup y void
loop, que deben estar identificadas por un nombre y que se
ejecutarn si se las llama desde otra parte del programa.
Imagen 110.
68
www.full-ebook.com
Imagen 111.
Imagen 112.
69
www.full-ebook.com
incluye el nombre de la funcin y, la de cierre, el nombre de retorno.
En cuanto al nombre de una funcin, debemos seguir las mismas
normas que en la declaracin de funciones.
Ejercicios propuestos:
70
www.full-ebook.com
7. Crear una funcin para que un led parpadee cada segundo.
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
71
www.full-ebook.com
8. Con una funcin, encender un led si se ha pulsado un botn.
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
72
www.full-ebook.com
Funciones con valor de retorno
La funcin tipo void loop ejecutaba el cdigo que haba entre sus
llaves y, al finalizar, volva a la lnea desde donde haba sido
llamada. Las funciones permiten devolver un valor (tipo string,
int...) en la lnea en la que son llamadas.
Para ello, las funciones no deben ser declaradas tipo void, sino que
deben ser declaradas como algn tipo de variable, es decir: tipo int,
string, etc.
Al declarar as una funcin, el valor que devuelve es del tipo que sea
la funcin, es decir: una funcin tipo int devuelve un valor tipo int. Es
obligacin de la persona que programa almacenar el valor que
devuelve la funcin.
Imagen 113.
73
www.full-ebook.com
Imagen 114.
Ejercicios propuestos:
74
www.full-ebook.com
9. Crear una funcin que, al recibir un mensaje por el
monitor serie, lo almacene y, al finalizar, devuelva ese
mensaje al programa principal para visualizarlo en el
monitor serie.
75
www.full-ebook.com
Pasar parmetros a una funcin
Una funcin no solo puede devolver datos, sino que, al ser llamada,
se le pueden pasar datos. Para ello, debe haber una concordancia
entre el valor que se enva y la variable en la que se almacena, es
decir, ambos deben ser del mismo tipo.
Imagen 115.
Imagen 116.
76
www.full-ebook.com
Podemos pasar a una funcin el nmero de parmetros que
necesitemos y todos los datos pueden ser, o no, del mismo tipo.
Mantenemos el mismo circuito y cargamos el siguiente programa.
Imagen 117.
Ejercicios propuestos:
77
www.full-ebook.com
10 Pasar como parmetros el valor de una entrada analgica
y de un pulsador, para que la funcin regule el led si el
pulsador est pulsado y lo apague si no est pulsado.
78
www.full-ebook.com
11. Crear funciones para establecer un chat mediante el puerto
serie con otro Arduino.
79
www.full-ebook.com
El IDE de Arduino dispone de una herramienta que permite escribir
funciones en otras ventanas y as dejar la hoja en la que
escribimos el programa principal para: declarar libreras, variables y
las partes bsicas del programa (loop y setup).
Imagen 118.
Imagen 119.
Imagen 120.
80
www.full-ebook.com
Imagen 121.
Interrupciones
Este tipo de mecanismo interrumpe la ejecucin normal de un
programa por la atencin de un evento. Los eventos que puede
atender un Arduino son:
attachInterrupt(Pin_interrupcin,nombre_funcin,tipo_evento);
81
www.full-ebook.com
No se pueden atender eventos en todos los pines: en el caso del
Arduino UNO, disponemos de dos eventos por interrupcin en los
pines 2 y 3, que se configuran como interrupcin 0 e interrupcin 1,
respectivamente.
Los eventos que puede atender una interrupcin son los que
presentamos a continuacin; vamos a suponer que el evento
suceder en el pin 2, es decir, la interrupcin 0 y la funcin que se
tiene que ejecutar tiene el nombre de funcion_evento:
82
www.full-ebook.com
Vamos a realizar un ejemplo para entender cmo funciona una de
ellas, ya que el resto funciona exactamente igual; la diferencia reside
en el evento que se atiende.
Imagen 122.
Imagen 123.
83
www.full-ebook.com
Imagen 124.
detachInterrupt ( interrupcin )
84
www.full-ebook.com
Interrupciones por tiempo
Imagen 125.
Imagen 126.
Imagen 127.
Ejercicios propuestos:
85
www.full-ebook.com
del botn; si se da este caso, se regular el tiempo de interrupcin
con el valor del potencimetro entre un valor de 0,2 y 2 segundos
proporcional a la medida del potencimetro.
86
www.full-ebook.com
Fritzing
Fritzing es una herramienta que nos permite graficar los circuitos que
realizamos mediante un entorno sencillo e intuitivo. Todas las
imgenes de circuitos que se muestran en esta serie de ejemplares
fueron creadas en esta herramienta.
Imagen 128.
87
www.full-ebook.com
Imagen 129.
Imagen 130.
88
www.full-ebook.com
Imagen 131.
Imagen 132.
89
www.full-ebook.com
Imagen 133.
Simuladores
Los simuladores son ideales para cuando no disponemos de un
Arduino, pero necesitamos realizar pruebas o, incluso, queremos
desarrollar un proyecto, pero, por seguridad y antes de cargarlo al
Arduino, queremos probarlo si peligro.
90
www.full-ebook.com
Imagen 134.
Imagen 135.
Imagen 136.
91
www.full-ebook.com
Imagen 137.
92
www.full-ebook.com