Programacion de Sistemas Embebidos PDF
Programacion de Sistemas Embebidos PDF
Programacion de Sistemas Embebidos PDF
Programación
de Sistemas
Embebidos.
SEMANA 13
• El microcontrolador desarrollado como sistema embebido.
• Utilización de las herramientas de simulación y programación
de Arduino.
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Introducción
1
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Introducción
• Actualmente las herramientas para simulación y
programación de microcontroladores y microprocesadores se
han desarrollado de manera tan práctica y desenvuelta que
para el usuario resultan muy amigables.
2
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Hardware.
• La tarjeta con la cual se trabajará
es la Arduino UNO R3.
• Basada en el microcontrolador
ATmega328.
• 14 pines de Entrada/Salida (E/S)
digitales (de los cuales 6 pueden
ser usados para salidas PWM).
• 6 entradas analógicas.
• Un cristal de 16 MHz .
• Una conexión USB.
• Puerto de programación ICSP (In
Circuit Serial Programming).
• Un botón de reset.
3
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Resumen
Microcontrolador ATmega328
Voltaje de Operación 5V
Voltaje de entrada 7-12V
(recomendado)
Voltaje de entrada 6-20V
(limites)
Pines Digitales E/S 14 (de los cuales 6 proveen salida PWM)
Pines de entrada 6
Analógicos
Corriente CD por pin 40 mA
E/S
Corriente CD por pin a 50 mA
3.3V
Memoria Flash 32 KB (ATmega328) de los cuales 0.5 KB son usados
por el bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Velocidad de Reloj 16 MHz
4
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Esquemático.
• El esquemático de la Revisión 3 de Arduino UNO se muestra en la
figura el cual se encuentra a disposición en la pagina oficial. Y no se
abordará en este curso.
5
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Alimentación
• Los pines de alimentación son como sigue:
6
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Memoria
• El ATmega328 tiene 32 KB (con 0,5 KB utilizado por el gestor de
arranque). También dispone de 2 KB de SRAM y 1 KB de EEPROM
(que puede ser leído y escrito con la librería EEPROM).
7
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Entrada y Salida
• Cada uno de los 14 pines digitales en la UNO se pueden utilizar
como entrada o salida, usando (funciones) pinMode (), digitalWrite
(), y digitalRead. Operan a 5 volts. Cada pin puede proporcionar o
recibir un máximo de 40 mA y tiene una resistencia de pull-up
(desconectado por defecto) de 20-50 kΩ. Además, algunos pines
tienen funciones especializadas:
o Serial: 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y transmisión (TX) datos TTL en serie.
Estos pines están conectados a los pines correspondientes del chip ATmega16U2 el
cual es el controlador USB.
o Interrupciones externas: 2 y 3. Estos pines pueden ser configurados para activar una
interrupción en un valor bajo, un flanco ascendente o descendente, o un cambio
en el valor. Véase la función attachInterrupt () para más detalles.
o SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan comunicación SPI
usando la librería SPI.
o LED: 13. Hay un LED built-in conectado al pin digital 13. Cuando el pin está en valor
ALTO, el LED está encendido, cuando el pin está en BAJO, está apagado.
8
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Entrada y Salida
• La tarjeta UNO tiene 6 entradas analógicas, etiquetados desde A0
hasta A5, cada una de las cuales proporcionan 10 bits de resolución
(es decir, 1024 valores diferentes). Por defecto se miden desde tierra
(0 V) a 5 V, aunque es posible cambiar el extremo superior de su
rango con el pin AREF y la función analogReference(). Además,
algunos pines tienen funciones especializadas:
9
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Entrada y Salida
• El mapeo completo de los pines entre ATmega168/328 y
Arduino se muestra en la siguiente figura
10
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Software
• El entorno de código abierto Arduino hace fácil escribir
código y cargarlo a la tarjeta E/S. Funciona en Windows, Mac
OS X y Linux. El entorno está escrito en Java y basado en
Processing, avr-gcc y otros programas también de código
abierto.
11
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
12
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
13
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
14
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
15
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
16
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
17
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
18
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
19
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
20
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
21
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Estructura
• La estructura básica del lenguaje de programación de
Arduino es bastante simple y se compone de al menos dos
partes o funciones necesarias que encierran bloques que
contienen declaraciones, estamentos o instrucciones.
void setup()
{
statements;
}
void loop()
{
statements;
}
22
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Setup()
• La función setup() se invoca una sola vez cuando el
programa empieza. Se utiliza para inicializar los modos de
trabajo de los pines, o el puerto serial. Debe ser incluido en un
programa aunque no haya declaración que ejecutar. Así
mismo se puede utilizar para establecer el estado inicial de las
salidas de la tarjeta.
void setup()
{
pinMode(pin, OUTPUT); // configura el 'pin' como
// salida
digitalWrite(pin, HIGH); // pone el ‘pin’ en estado
// HIGH
}
23
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Loop()
• Después de llamar a setup(), la función loop() hace
precisamente lo que sugiere su nombre, se ejecuta de forma
cíclica, lo que posibilita que el programa este respondiendo
continuamente ante los eventos que se produzcan en la
tarjeta.
void loop()
{
digitalWrite(pin, HIGH); // pone en uno (on, 5v) el pin
delay(1000); // espera un segundo (1000 ms)
digitalWrite(pin, LOW); // pone en cero (off, 0v) el delay(1000); //
pin
}
24
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Funciones
• Una función es un bloque de código que tiene un nombre y
un conjunto de instrucciones que son ejecutadas cuando se
llama a la función.
o Son funciones setup() y loop() de las que ya se ha hablado.
o Las funciones de usuario pueden ser escritas para realizar tareas repetitivas y para
reducir el tamaño de un programa.
o Las funciones se declaran asociadas a un tipo de valor.
o Este valor será el que devolverá la función, por ejemplo 'int' se utilizará cuando la
función devuelva un dato numérico de tipo entero. Si la función no devuelve ningún
valor entonces se colocará delante la palabra “void”, que significa “función vacía”.
o Después de declarar el tipo de dato que devuelve la función se debe escribir el
nombre de la función y entre paréntesis se escribirán, si es necesario, los parámetros
que se deben pasar a la función para que se ejecute.
type functionName(parameters)
{
statements;
} 25
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Funciones
• La función siguiente devuelve un número entero,
“delayVal()”, se utiliza para poner un valor de retraso en un
programa que lee una variable analógica de un
potenciómetro conectado a una entrada de Arduino.
o Al principio se declara como una variable local, ‘v’ recoge el valor leído del
potenciómetro que estará comprendido entre 0 y 1023, luego se divide el valor por
4 para ajustarlo a un margen comprendido entre 0 y 255, finalmente se devuelve el
valor ‘v’ y se retornaría al programa principal.
int delayVal()
{
int v; // crea una variable temporal 'v'
v=analogRead(pot); // lee el valor del potenciómetro
v /= 4; // convierte 0-1023 a 0-255
return v; // devuelve el valor final
}
26
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Entre llaves {}
• Las llaves sirven para definir el principio y el final de un bloque
de instrucciones. Se utilizan para los bloques de programación
setup(), loop(), if.., etc.
type function()
{
statements;
}
27
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Punto y coma ;
• El punto y coma “;” se utiliza para separar instrucciones en el
lenguaje de programación de Arduino. También se utiliza
para separar elementos en una instrucción de tipo “for”.
28
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
29
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Línea de comentarios //
• Una línea de comentario empieza con // y terminan con la
siguiente línea de código. Al igual que los comentarios de
bloque, los de línea son ignoradas por el programa y no
ocupan espacio en la memoria.
// esto es un comentario
30
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Variables
• Una variable es una manera de nombrar y almacenar un
valor numérico para su uso posterior por el programa.
o Las variables son números que se pueden variar continuamente en contra de lo que
ocurre con las constantes cuyo valor nunca cambia.
o Una variable debe ser declarada y, opcionalmente, asignarle un valor.
o El siguiente código de ejemplo declara una variable llamada ’variableEntrada’ y
luego le asigna el valor obtenido en la entrada analógica del PIN2:
31
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Variables
• Como ejemplo ilustrativo veamos tres operaciones útiles con
variables: el siguiente código prueba si la variable
“entradaVariable” es inferior a 100, si es cierto se asigna el
valor 100 a “entradaVariable” y, a continuación, establece un
retardo (delay) utilizando como valor “entradaVariable” que
ahora será como mínimo de valor 100:
32
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Variables
• Algo importante a considerar es que las variables deben
tomar nombres descriptivos, para hacer el código más
legible. Los nombres de variables pueden ser
“contactoSensor” o “pulsador”, para ayudar al programador
y a cualquier otra persona a leer el código y entender lo que
representa la variable. Nombres de variables como “var” o
“valor”, facilitan muy poco que el código pueda ser
entendido. Una variable puede ser cualquier nombre o
palabra que no sea una palabra reservada en el entorno de
Arduino.
33
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Declaración de variables
• Todas las variables tienen que declararse antes de que puedan ser
utilizadas. Para declarar una variable se comienza por definir su tipo
como int (entero), long (largo), float (coma flotante), etc.,
asignándoles siempre un nombre, y, opcionalmente, un valor inicial.
Esto sólo debe hacerse una vez en un programa, pero el valor se
puede cambiar en cualquier momento usando aritmética y
reasignaciones diversas.
int entradaVariable = 0;
o Una variable puede ser declarada en una serie de lugares del programa y en
función del lugar en donde se lleve a cabo la definición esto determinará en que
partes del programa se podrá hacer uso de ella.
34
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
o Una variable global es aquella que puede ser vista y utilizada por cualquier función
y estamento de un programa. Esta variable se declara al comienzo del programa,
antes de setup().
o Una variable local es aquella que se define dentro de una función o como parte de
un bucle. Sólo es visible y sólo puede utilizarse dentro de la función en la que se
declaró.
35
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
37
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
38
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
39
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
40
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
41
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
42
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
43
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
void setup()
{
pinMode(ledPin, OUTPUT); // configura la salida
}
void loop()
{
for(int i=0; i<7; i++)
{
analogWrite(ledPin, parpadeo[i]);
delay(200); // espera 200ms
}
}
44
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Aritmética
• Los operadores aritméticos que se incluyen en el entorno de
programación son suma, resta, multiplicación y división.
y = y + 3; x = x - 7; i = j * 6; r = r / 5;
45
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Aritmética
• Esto también significa que la operación puede sufrir un
desbordamiento si el resultado es más grande que lo que puede
ser almacenada en el tipo de datos.
46
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Aritmética
47
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Asignaciones compuestas
• Las asignaciones compuestas combinan una operación aritmética
con una variable asignada. Estas son comúnmente utilizadas en los
bucles tal como se describe más adelante. Estas asignaciones
compuestas pueden ser:
48
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Operadores de comparación
• Las comparaciones de una variable o constante con otra se utilizan
con frecuencia en las estructuras condicionales del tipo if.. para
testear si una condición es verdadera. En los ejemplos que siguen en
las próximas páginas se verá su utilización práctica usando los
siguientes tipo de condicionales:
x == y // x es igual a y
x != y // x no es igual a y
x < y // x es menor que y
x > y // x es mayor que y
x <= y // x es menor o igual que y
x >= y // x es mayor o igual que y
49
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Operadores lógicos
• Los operadores lógicos son usualmente una forma de comparar dos
expresiones y devolver un VERDADERO o FALSO dependiendo del
operador. Existen tres operadores lógicos, AND (&&), OR (||) y NOT
(!), que a menudo se utilizan en estamentos de tipo if:
o Lógica AND:
if (x > 0 && x < 5) // cierto sólo si las dos expresiones
// son ciertas
o Logica OR:
o Logica NOT:
if (!x > 0) // cierto solo si la expresión es
// falsa
50
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Constantes
51
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
if (b == TRUE);
{
ejecutar las instrucciones;
}
52
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Constantes - high/low
• Estas constantes definen los niveles de salida altos o bajos y se
utilizan para la lectura o la escritura digital. HIGH (alto) se
define como en la lógica de nivel 1, ON, ó 5 volts, mientras
que LOW (bajo) es lógica nivel 0, OFF, o 0 volts.
53
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Constantes - input/output
• Estas constantes son utilizadas para definir (al comienzo del
programa) el modo de funcionamiento de los pines mediante
la instrucción pinMode de tal manera que el pin puede ser
una entrada INPUT o una salida OUTPUT.
54
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
• En el ejemplo siguiente se compara una variable con un valor, el cual puede ser una
variable o constante. Si la comparación, o la condición entre paréntesis se cumple (es
cierta), las declaraciones dentro de los corchetes se ejecutan. Si no es así, el programa
salta sobre ellas y sigue.
if (unaVariable == valor)
{
ejecutaInstrucciones;
}
• Es necesario tener en cuenta el uso especial del símbolo '=', poner dentro de if (x = 10),
podría parecer que es válido pero sin embargo no lo es ya que esa expresión asigna el
valor 10 a la variable x, por eso dentro de la estructura if se utilizaría x==10 que en este
caso lo que hace el programa es comprobar si el valor de x es 10. Ambas cosas son
distintas por lo tanto dentro de las estructuras if, cuando se pregunte por un valor se
debe poner el signo doble de igual “==”.
55
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
if (inputPin == HIGH)
{
instruccionesA;
}
else
{
instruccionesB;
}
56
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
else
{
instruccionesC;
} 57
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
58
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
59
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
60
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
61
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
62
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
64
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
65
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
66
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
67
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
68
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
70
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
71
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
72
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
73
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
void loop()
{
valor = analogRead(analog); // lee el pin 0 y lo asocia a
// la variable valor
valor /= 4; // divide valor entre 4 y lo
// reasigna a valor
analogWrite(led, value); // escribe en el pin 10 valor
}
74
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
75
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
76
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Matemáticas - min(x, y)
• Calcula el mínimo de dos números para cualquier tipo de datos
devolviendo el número más pequeño.
77
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Matemáticas - max(x, y)
• Calcula el máximo de dos números para cualquier tipo de datos
devolviendo el número mayor de los dos.
78
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Aleatorio - randomSeed(seed)
• Establece un valor, o semilla, como punto de partida para la función
random().
79
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
80
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
void loop()
{
randomSeed(millis()); // genera una semilla para
// aleatorio a partir
// de la función millis()
randNumber = random(255); // genera número aleatorio entre 0-255
analogWrite(led, randNumber); // envía a la salida
// led de tipo PWM el
// valor
delay(500); // espera 0,5 seg.
}
81
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
void setup()
{
Serial.begin(9600); // abre el Puerto serie
} // configurando la velocidad en 9600 bps
82
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
83
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
void setup()
{
Serial.begin(9600); // configura el puerto serie a 9600bps
}
void loop()
{
Serial.println(analogRead(0)); // envía valor analógico delay(1000);
// espera 1 segundo
}
84
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
• Parámetros:
o data: el número o la cadena de caracteres a volcar o enviar.
85
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
86
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
87
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
88
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
void loop()
{
if (Serial.available() > 0) // envía datos sólo si los recibe
{
incomingByte = Serial.read(); // lee el byte de
// entrada y lo vuelca
Serial.print("I received: "); // a pantalla
Serial.println(incomingByte, DEC);
}
}
89
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Programación de
Sistemas Embebidos
Actividad T7
Aplicación de Programación de
puertos I/O’s en el Sistema Arduino.
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T7
• Esta Actividad consiste en el manejo de los pines de entrada y salida
de la tarjeta Arduino UNO Revisión 3.
91
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T7
• El material necesario para desarrollar esta actividad, se enlista a
continuación:
92
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T7
• El diagrama de conexión se muestra a continuación:
93
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T7
int leds[]={7,8,9,10,11,12,13}; // Arreglo de pines digitales a emplear
int n=0; // Declaración para determinar el numero de elemento
int tiempo=30; // Tiempo con un valor de 30 ms
void setup()
{ // Comienza la configuración, empleando un ciclo for
for (n=0;n<7;n++) // haciendo que los componentes que integran al arreglo
{
pinMode(leds[n],OUTPUT); // led[ ], los cuales son 7 elementos se establezcan
} // como salida uno a uno
}
void loop()
{ // En el primer ciclo FOR se escribe a la salida de
for (n=0;n<7;n++) // los pines del 7 al 13. Primero se establece n=0,
{ // evalúa si n<7, si es así, activa al elemento 0, de
digitalWrite (leds[n],HIGH); // la colección de datos del arreglo led [ ] el cual
delay(tiempo); // representa al pin 7 dentro del arreglo y lo
digitalWrite(leds[n+1],HIGH); // establece en alto, seguido de esto se determina
delay(tiempo); // tiempo de 30 ms. la siguiente línea establece el
digitalWrite (leds[n],LOW); // siguiente pin n+1, en este caso sería establecer el
delay(tiempo*2); // pin 8 en alto y de igual manera establecerle un
} // tiempo de retardo de 30 ms, por ultimo se establece
for (n=6;n>=0;n--) // el apagado del pin 7 despues del doble de tiempo
{ // equivalente a 60 ms
digitalWrite (leds[n],HIGH);
delay(tiempo);
digitalWrite(leds[n-1],HIGH); // El segundo ciclo for de el apartado loop(), hace
delay(tiempo); // los mismo que el primer ciclo pero en sentido
digitalWrite (leds[n],LOW); // inverso, es decir del pin 13 al 7.
delay(tiempo*2);
} 94
}
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Programación de
Sistemas Embebidos
Actividad T8
Implementación de una aplicación
utilizando el ADC de Arduino.
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T8
• Esta Actividad consiste en medir la posición de un potenciómetro y
utilizarlo para controlar la velocidad de parpadeo de un LED empleando
el ADC.
96
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T8
• El material necesario para desarrollar esta actividad, se enlista a
continuación:
97
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T8
• El diagrama de conexión se muestra a continuación:
98
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T8
int sensorPin = 0; // El potenciometro es conectado al pin analogico 0
int ledPin = 12; // El LED es conectado al pin digital 12
int val=0; // Declaracion de la variable temporal para los datos del potenciometro
void setup() // Esta funcion comienza una vez que el sketch se carga
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int sensorValue;r
sensorValue = analogRead(sensorPin);
99
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Programación de
Sistemas Embebidos
Actividad T9
Implementación de control de
motores mediante Arduino.
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T9
• Esta actividad consiste en manipular el movimiento de un
servomotor mediante el empleo de un potenciómetro, haciendo uso
la librería “Servo.h” y la tarjeta Arduino UNO Revisión 3.
101
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T9
• El material necesario para desarrollar esta actividad, se enlista a
continuación:
102
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T9
• El diagrama de conexión se muestra a continuación:
103
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
ACTIVIDAD T9
#include <Servo.h>
void setup()
{
servo1.attach(9); // fija el servo en pin 9 al objeto servo
}
void loop()
{
val = analogRead(potpin); // lee el valor del potenciometro (valor entre 0 y 1023)
val = map(val, 0, 1023, 0, 179); // escala el valor para se usado por el servo (entre 0 y 180)
servo1.write(val); // escribe la posicion del servo deacuerdo al valor de la escala
delay(15); // espera a que el servo llegue a ese punto
}
104
Universidad de Guadalajara – Centro Universitario de Ciencias Exactas e Ingenierías
División de Electrónica y Computación
Av. Revolución No. 1500. Módulo O, Planta Baja, C.P. 44430 Tel/Fax +52(33) 13785900. Guadalajara, Jalisco. México.
Gracias
• SEMANA 13
• El microcontrolador desarrollado como sistema embebido.
• Utilización de las herramientas de simulación y
programación de Arduino.
Elaboración:
Grupo de Investigación de Sistemas Embebidos
Dr. Juan José Raygoza Panduro
M.C. José Roberto Reyes Barón
Ing. Emmanuel Dávila Delgado
Ing. Oswaldo Ureña Ponce
105