Arduino Ejemplos
Arduino Ejemplos
PROGRAMACIN C
CON ARDUINO
Electrnica avanzada
ESTRUCTURA DE UN PROGRAMA
La estructura bsica del lenguaje de programacin de Arduino es bastante simple y se
compone de al menos dos partes. Estas dos partes necesarias, o funciones, encierran
bloques que contienen declaraciones, estamentos o instrucciones.
void setup()
{
estamentos;
}
void loop()
{
estamentos;
}
En donde setup() es la parte encargada de recoger la configuracin.
Electrnica avanzada
Funcin setup()
Se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los
modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa
aunque no haya declaracin que ejecutar.
void setup()
{
pinMode(pin, OUTPUT); // configura el pin como salida
}
Despus de llamar a setup(), la funcin loop() se ejecuta de forma cclica, lo que
posibilita que el programa este respondiendo continuamente ante los eventos que se
produzcan en la tarjeta
void loop()
{
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}
Electrnica avanzada
FUNCIONES
Una funcin es un bloque de cdigo que tiene un nombre y un conjunto de
parametros que son ejecutados cuando se llama a la funcin.
Las funciones de usuario pueden ser escritas para realizar tareas repetitivas y para
reducir el tamao de un programa.
Las funciones se declaran asociadas a un tipo de valor type. Este valor ser el que
devolver la funcin, por ejemplo:
int se utilizar cuando la funcin devuelva un dato numrico de tipo entero. Si la
funcin no devuelve ningn valor entonces se colocar delante la palabra void, que
significa funcin vaca.
type nombreFuncin(parmetros)
{
estamentos;
}
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
Las llaves {}
sirven para definir el principio y el final de un bloque de instrucciones. Se utilizan para
los bloques de programacin setup(), loop(), if.., etc.
type funcion()
{
estamentos;
}
Una llave de apertura { siempre debe ir seguida de una llave de cierre }, si no es as
el programa dar errores.
El entorno de programacin de Arduino incluye una herramienta de gran utilidad para
comprobar el total de llaves. Slo tienes que hacer click en el punto de insercin de una
llave abierta e inmediatamente se marca el correspondiente cierre de ese bloque (llave
cerrada).
Electrnica avanzada
El punto y coma ;
se utiliza para separar instrucciones en el lenguaje de programacin de Arduino. Tambin
se utiliza para separar elementos en una instruccin de tipo bucle for.
int x = 13; // declara la variable 'x' como tipo entero de valor 13
Nota: Olvidarse de poner fin a una lnea con un punto y coma se traducir en un error de
compilacin
Electrnica avanzada
Lnea de comentario //
Empieza con // y terminan con la siguiente lnea de cdigo. Al igual que los comentarios
de bloque, los de lnea son ignoradas por el programa y no ocupan espacio en la
memoria.
// esto es un comentario
Una lnea de comentario se utiliza a menudo despus de una instruccin, para
proporcionar ms informacin acerca de lo que hace esta o para recordarla ms
adelante.
Variables
Una variable es una manera de nombrar y almacenar un valor numrico para su uso
posterior por el programa. Como su nombre indica, las variables son nmeros que se
pueden variar continuamente en contra de lo que ocurre con las constantes cuyo valor
nunca cambia. Una variable debe ser declarada y, opcionalmente, asignarle un valor.
El siguiente cdigo de ejemplo declara una variable llamada variableEntrada y luego le
asigna el valor obtenido en la entrada analgica del PIN2:
int variableEntrada = 0; // declara una variable y le asigna el valor 0
variableEntrada = analogRead(2); // la variable recoge el valor analgico del PIN2
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
Contina Variables
Una vez que una variable ha sido asignada, o re-asignada, se puede probar su valor para
ver si cumple ciertas condiciones (instrucciones if..), o puede utilizar directamente su
valor.
Ejemplo :
el siguiente cdigo prueba si la variable entradaVariable es inferior a 100, si es cierto se
asigna el valor 100 a entradaVariable y, a continuacin, establece un retardo (delay)
utilizando como valor entradaVariable que ahora ser como mnimo de valor 100:
Electrnica avanzada
Declaracion 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, asignndoles siempre un
nombre, y opcionalmente, un valor inicial.
Esto slo debe hacerse una vez en un programa, pero el valor se puede cambiar en
cualquier momento usando aritmtica y reasignaciones diversas.
El siguiente ejemplo declara la variable entradaVariable como una variable de tipo entero
int, y asignndole un valor inicial igual a cero.
int entradaVariable = 0;
Una variable puede ser declarada en una serie de lugares del programa y en funcin
del lugar en donde se lleve a cabo la definicin esto determinar en que partes del
programa se podr hacer uso de ella.
Electrnica avanzada
Una variable global es aquella que puede ser vista y utilizada por cualquier funcin y
estamento de un programa. Esta variable se declara al comienzo del programa, antes de
setup().
Una variable local es aquella que se define dentro de una funcin o como parte de un
bucle. Slo es visible y slo puede utilizarse dentro de la funcin en la que se declar.
Electrnica avanzada
Electrnica avanzada
Byte
Byte almacena un valor numrico de 8 bits sin decimales. Tienen un rango entre 0 y
255
byte unaVariable = 180; // declara 'unaVariable' como tipo byte
Int
Enteros son un tipo de datos primarios que almacenan valores numricos de 16 bits sin
decimales comprendidos en el rango 32,767 to -32,768.
int unaVariable = 1500; // declara 'unaVariable' como una variable de tipo entero
Nota:
Las variables de tipo entero int pueden sobrepasar su valor mximo o mnimo como consecuencia de una
operacin. Por ejemplo, si x = 32767 y una posterior declaracin agrega 1 a x, x = x + 1 entonces el valor se x pasar a
ser -32.768. (algo como que el valor da la vuelta)
Long
El formato de variable numrica de tipo extendido long se refiere a nmeros enteros
(tipo 32 bits) sin decimales que se encuentran dentro del rango -2147483648 a
2147483647.
long unaVariable = 90000; // declara 'unaVariable' como tipo long
Electrnica avanzada
float
El formato de dato del tipo punto flotante float se aplica a los nmeros con
decimales. Los nmeros de punto flotante tienen una mayor resolucin que los de 32 bits
con un rango comprendido 3.4028235E +38 a +38-3.4028235E.
float unaVariable = 3.14; // declara 'unaVariable' como tipo flotante
arrays
Un array es un conjunto de valores a los que se accede con un nmero ndice. Cualquier
valor puede ser recogido haciendo uso del nombre de la matriz y el nmero del ndice. El
primer valor de la matriz es el que est indicado con el ndice 0. Un array tiene que ser
declarado y opcionalmente asignados valores a cada posicin antes de ser utilizado.
Electrnica avanzada
Electrnica avanzada
Aritmtica
Los operadores aritmticos que se incluyen en el entorno de programacin son suma,
resta, multiplicacin y divisin. Estos devuelven la suma, diferencia, producto, o cociente
(respectivamente) de dos operandos.
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
La operaciones se efecta teniendo en cuanta el tipo de datos que hemos definido para
los operandos (int, dbl, float, etc..),
Electrnica avanzada
Asignaciones compuestas
Las asignaciones compuestas combinan una operacin aritmtica con una variable
asignada. Estas son comnmente utilizadas en los bucles tal como se describe ms
adelante. Estas asignaciones compuestas pueden ser:
x ++
x -x += y
x -= y
x *= y
x /= y
Nota: Por ejemplo, x * = 3 hace que x se convierta en el triple del antiguo valor x y por lo
tanto x es reasignada al nuevo valor .
Electrnica avanzada
Operadores de comparacion
Las comparaciones de una variable o constante con otra se utilizan con frecuencia en las
estructuras condicionales del tipo if.. para testear si una condicin es verdadera.
x == y
x != y
x<y
x>y
x <= y
x >= y
// x es igual a y
// x no es igual a y
// x es menor que y
// x es mayor que y
// x es menor o igual que y
// x es mayor o igual que y
Operadores logicos
Los operadores lgicos son usualmente una forma de comparar dos expresiones y
devolver un VERDADERO o FALSO dependiendo del operador. Existen tres operadores
lgicos, AND (&&), OR (||) y NOT (!), que a menudo se utilizan en estamentos de tipo if..:
Logical AND:
if (x > 0 && x < 5) // cierto slo si las dos expresiones son ciertas
Logical OR:
if (x > 0 || y > 0) // cierto si una cualquiera de las expresiones
es cierta
Logical NOT:
if (!x > 0) // cierto solo si la expresin es falsa
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
Constantes
El lenguaje de programacin de Arduino tiene unos valores predeterminados,
que son llamados constantes. Se utilizan para hacer los programas ms
fciles de leer. Las constantes se clasifican en grupos.
cierto/falso (true/false)
Estas son constantes booleanas que definen los niveles HIGH (alto) y LOW
(bajo) cuando estos se refieren al estado de las salidas digitales. FALSE se
asocia con 0 (cero), mientras que TRUE se asocia con 1, pero TRUE tambin
puede ser cualquier otra cosa excepto cero. Por lo tanto, en sentido
booleano, -1, 2 y -200 son todos tambin se define como TRUE. (esto es
importante tenerlo en cuanta)
if (b == TRUE);
{
ejecutar las instrucciones;
}
Electrnica avanzada
HIGH/LOW
Estas constantes definen los niveles de salida altos o bajos y se utilizan
para la lectura o la escritura digital para las patillas.
ALTO se define como en la lgica de nivel 1, ON, 5 voltios, mientras que
BAJO es lgica nivel 0, OFF, o 0 voltios.
digitalWrite(13, HIGH); // activa la salida 13 con un nivel alto (5v)
INPUT/OUTPUT
Estas constantes son utilizadas para definir, al comienzo del programa, el
modo de funcionamiento de los pines mediante la instruccin pinMode de tal
manera que el pin puede ser una entrada INPUT o una salida OUTPUT.
pinMode(13, OUTPUT); // designamos que el PIN 13 es una salida
Electrnica avanzada
IF
if es un parametro que se utiliza para probar si una determinada condicin
se ha alcanzado, y ejecutar una serie de declaraciones (operaciones) que
se escriben dentro de llaves, si es verdad.
Si es falso (la condicin no se cumple) el programa salta y no ejecuta las
operaciones que estn dentro de las llaves, El formato para if es el
siguiente:
if (unaVariable ?? valor)
{
ejecutaInstrucciones;
}
Se puede comparar una variable con un valor, el cual puede ser una
variable o constante.
Tener en cuenta el smbolo '=', poner dentro de if (x = 10), podra parecer valido. Sin
embargo, no lo es ya que esa expresin asigna el valor 10 a la variable x, por eso
dentro de la estructura if se utilizara X==10 que en este caso lo que hace el
programa es comprobar si el valor de x es 10..
Electrnica avanzada
if else
if else viene a ser un estructura que se ejecuta en respuesta a la idea si
esto no se cumple haz esto otro. Por ejemplo, si se desea probar una
entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si
la entrada es baja, usted escribira que de esta manera:
if (inputPin == HIGH) // si el valor de la entrada inputPin es alto
{
instruccionesA; //ejecuta si se cumple la condicin
}
else
{
instruccionesB; //ejecuta si no se cumple la condicin
}
Else puede ir precedido de otra condicin de manera que se pueden
establecer varias estructuras condicionales de tipo unas dentro de las otras
(anidamiento) de forma que sean mutuamente excluyentes pudindose
ejecutar a la vez. Es incluso posible tener un nmero ilimitado de estos
condicionales.
Electrnica avanzada
Ejemplo:
Electrnica avanzada
for
La declaracin for se usa para repetir un bloque de sentencias
encerradas entre llaves un nmero determinado de veces.
Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la
condicin.
La declaracin
sintaxis:
for
Electrnica avanzada
Continua for
Ejemplo:
El siguiente ejemplo inicia el entero i en el 0, y la condicin es probar que el
valor es inferior a 20 y si es cierto i se incrementa en 1 y se vuelven a
ejecutar las instrucciones que hay dentro de las llaves:
for (int i=0; i<20; i++) // declara i, prueba que es menor que
20, incrementa i en 1
{
digitalWrite(13, HIGH); // enva un 1 al pin 13
delay(250); // espera seg.
digitalWrite(13, LOW); // enva un 0 al pin 13
delay(250); // espera de seg.
}
Electrnica avanzada
While
Un bucle del tipo while es un bucle de ejecucin continua mientras se
cumpla la expresin colocada entre parntesis en la cabecera del bucle. La
variable de prueba tendr que cambiar para salir del bucle. La situacin
podr cambiar a expensas de una expresin dentro el cdigo del bucle o
tambin por el cambio de un valor en una entrada de un sensor
while (unaVariable ?? valor)
{
ejecutarSentencias;
}
El siguiente ejemplo testea si la variable "unaVariable es inferior a 200 y,
si es verdad, ejecuta las declaraciones dentro de los corchetes y
continuar ejecutando el bucle hasta que 'unaVariable' no sea inferior a
200.
While (unaVariable < 200) // verifica si es menor que 200
{
instrucciones; // ejecuta las instrucciones entre llaves
unaVariable++; // incrementa la variable en 1
}
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
Do while
El bucle do while funciona de la misma manera que el bucle while, con la
salvedad de que la condicin se prueba al final del bucle, por lo que el bucle
siempre se ejecutar al menos una vez.
do
{
Instrucciones;
} while (unaVariable ?? valor);
El siguiente ejemplo asigna el valor ledo leeSensor() a la variable 'x', espera
50 milisegundos, y luego continua mientras que el valor de la 'x' sea inferior a
100:
do
{
x = leeSensor();
delay(50);
} while (x < 100);
Electrnica avanzada
pinMode(pin, mode)
Esta instruccin es utilizada en la parte de configuracin setup () y sirve
para configurar el modo de trabajo de un PIN pudiendo ser INPUT (entrada) u
OUTPUT (salida).
Electrnica avanzada
Electrnica avanzada
digitalRead(pin)
Lee el valor de un pin (definido como digital) dando un resultado HIGH (alto)
o LOW (bajo). El pin se puede especificar ya sea como una variable o una
constante (0-13).
valor = digitalRead(Pin); // hace que 'valor sea igual al estado ledo en Pin
digitalWrite(pin, value)
Enva al pin definido previamente como OUTPUT el valor HIGH o LOW
(poniendo en 1 o 0 la salida). El pin se puede especificar ya sea como una
variable o como una constante (0-13).
digitalWrite(pin, HIGH); // deposita en el 'pin' un valor HIGH (alto o 1)
Electrnica avanzada
El siguiente ejemplo lee el estado de un pulsador conectado a una entrada
digital y lo escribe en el pin de salida LED:
Electrnica avanzada
analogRead(pin)
Lee el valor de un determinado pin definido como entrada analgica con una
resolucin de 10 bits. Esta instruccin slo funciona en los pines (0-5). El
rango de valor que podemos leer oscila de 0 a 1023.
valor = analogRead(pin); // asigna a valor lo que lee en la entrada pin
Nota: Los pins analgicos (0-5) a diferencia de los pines digitales, no
necesitan ser declarados como INPUT u OUPUT ya que son siempre INPUTs.
analogWrite(pin, value)
Esta instruccin sirve para escribir un pseudo-valor analgico utilizando el
procedimiento de modulacin por ancho de pulso (PWM) a uno de los pins
de Arduino marcados como pin PWM.
Electrnica avanzada
Electrnica avanzada
El siguiente ejemplo lee un valor analgico de un pin de entrada analgica,
convierte el valor dividindolo por 4, y enva el nuevo valor convertido a una
salida del tipo PWM o salida analgica:
delay(ms)
Detiene la ejecucin del programa la cantidad de tiempo en ms que se
indica en la propia instruccin. De tal manera que 1000 equivale a 1seg.
delay(1000); // espera 1 segundo
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
millis()
Devuelve el nmero de milisegundos transcurrido desde el inicio del programa
en Arduino hasta el momento actual. Normalmente ser un valor grande
(dependiendo del tiempo que este en marcha la aplicacin despus de cargada
o despus de la ltima vez que se puls el botn reset de la tarjeta)..
valor = millis(); // valor recoge el nmero de milisegundos
min(x,y)
Calcula el mnimo de dos nmeros para cualquier tipo de datos devolviendo el
nmero ms pequeo.
valor = min(valor, 100); // asigna a valor el ms pequeos de los dos nmeros
especificados.
Si 'valor' es menor que 100 valor recoger su propio valor si valor es mayor
que 100 valor pasara a valer 100.
Electrnica avanzada
max(x,y)
Calcula el mximo de dos nmeros para cualquier tipo de datos devolviendo
el nmero mayor de los dos.
valor = max(valor, 100); // asigna a valor el mayor de los dos nmeros 'valor' y
100.
Serial.begin(rate)
Abre el puerto serie y fija la velocidad en baudios para la transmisin de
datos en serie. El valor tpico de velocidad para comunicarse con el
ordenador es 9600, aunque otras velocidades pueden ser soportadas.
void setup()
{
Serial.begin(9600); // abre el Puerto serie
} // configurando la velocidad en 9600 bps
Electrnica avanzada
Serial.println(data)
Imprime los datos en el puerto serie, seguido por un retorno de carro
automtico y salto de lnea. Este comando toma la misma forma que
Serial.print (), pero es ms fcil para la lectura de los datos en el Monitor
Serie del software.
Serial.println(analogValue); // enva el valor 'analogValue' al puerto
El siguiente ejemplo toma de una lectura analgica pin0 y enva estos
datos al ordenador cada 1 segundo.
void setup()
{
Serial.begin(9600); // configura el puerto serie a 9600bps
}
void loop()
{
Serial.println(analogRead(0)); // enva valor analgico
delay(1000); // espera 1 segundo
}
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
Electrnica avanzada
Serial.println(b, OCT) vuelca o enva el valor de b como un nmero Octal en
caracteres ASCII seguido de "CR" y "LF".
Serial.println(b, BIN) vuelca o enva el valor de b como un nmero binario en
caracteres ASCII seguido de "CR" y "LF".
Serial.print(b, BYTE) vuelca o enva el valor de b como un byte seguido de
"CR" y"LF".
Serial.println(str) vuelca o enva la cadena de caracteres como una cadena
ASCII seguido de "CR" y "LF".
Serial.println() slo vuelca o enva "CR" y "LF". Equivaldra a printNewline().
Electrnica avanzada
Parmetros:
data: el nmero o la cadena de caracteres a volcar o enviar.
data type: determina el formato de salida de los valores numricos (decimal,
octal, binario, etc...) DEC, OCT, BIN, HEX, BYTE , si no se pe nada vuelva
ASCII
Ejemplos
Serial.print(b)
Vuelca o enva el valor de b como un nmero decimal en caracteres ASCII.
Equivaldraa printInteger().
int b = 79; Serial.print(b); // prints the string "79".
Serial.print(b, DEC)
Vuelca o enva el valor de b como un nmero decimal en caracteres ASCII.
Equivaldra a printInteger().
int b = 79;
Serial.print(b, DEC); // prints the string "79".
Electrnica avanzada
Serial.Read()
int Serial.Read() Lee o captura un byte (un carcter) desde el puerto serie.
Equivaldra a la funcin serialRead().
Devuelve :El siguiente byte (carcter) desde el puerto serie, o -1 si no hay ninguno.
Ejemplo:
int incomingByte = 0; // almacenar el dato serie
void setup() {
Serial.begin(9600); // abre el puerto serie,y le asigna la velocidad de 9600 bps
}
void loop() {
// enva datos slo si los recibe:
if (Serial.available() > 0) {
// lee el byte de entrada:
incomingByte = Serial.read();
//lo vuelca a pantalla
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
Electrnica avanzada
Tipo de datos
Electrnica avanzada
Juan ohm
ampere
_system XfXf
what?
Electrnica avanzada
Electrnica avanzada
Electrnica avanzada
Electrnica avanzada
La Funcin setup( )
void setup() {
// Inicializando el pin digital como salida.
pinMode(led, OUTPUT);
}
Electrnica avanzada
La Funcin Loop ( )
Despus que la funcin setup () completa su trabajo, los programas de C de
Arduino llaman automticamente a la funcin Loop ()
void loop() {
digitalWrite(led, HIGH); // Enciende LED
delay(1000);
// Retardo de 1 seg.
digitalWrite(led, LOW); // Apagar LED
delay(1000);
// Retardo de 1 seg.
}
Electrnica avanzada
// parpadea el LED
Electrnica avanzada
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
delay(200);
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
delay(200);
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
delay(200);
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
delay(200);
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
delay(200);
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin7, LOW);
delay(200);
digitalWrite(ledPin0, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, HIGH);
delay(200);
}
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
AREF
RP1
1
2
3
4
5
6
7
8
9
7
~6
~5
4
~3
2
TX > 1
RX < 0
10
9
8
7
6
5
4
3
2
1
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
DIGITAL (PWM~)
ANALOG IN
SIMULINO
POWER
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
RESPACK-8
SIMULINO UNO
U1
11
12
13
14
15
16
17
18
19
20
LED-BARGRAPH-RED
Electrnica avanzada
AREF
RP1
1
2
3
4
5
6
7
8
9
7
~6
~5
4
~3
2
TX > 1
RX < 0
10
9
8
7
6
5
4
3
2
1
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
DIGITAL (PWM~)
SIMULINO
ANALOG IN
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
POWER
RESPACK-8
SIMULINO UNO
U1
LED-BARGRAPH-RED
11
12
13
14
15
16
17
18
19
20
Electrnica avanzada
void setup() { // Configura las SALIDAS
DDRD=0B11111111;//Configuracin de puerto D como salida
PORTD=0B00000000;
}
void loop(){ //Bucle de Funcionamiento
PORTD=0B00000000;
while(1) {
PORTD=0B00000001;
delay(200);
PORTD=0B00000010;
delay(200);
PORTD=0B00000100;
delay(200);
PORTD=0B00001000;
delay(200);
PORTD=0B00010000;
delay (200);
PORTD=0B00100000;
delay (200);
PORTD=0B01000000;
delay (200);
PORTD=0B10000000;
delay (200);
PORTD=0B01000000;
delay (200);
PORTD=0B00100000;
delay (200);
PORTD=0B00010000;
delay (200);
PORTD=0B00001000;
delay(200);
PORTD=0B00000100;
delay(200);
PORTD=0B00000010;
delay(200);
}
}
Dr. JOS DE JESS MORENO VZQUEZ
Electrnica avanzada
AREF
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
R2
330R
DIGITAL (PWM~)
ANALOG IN
SIMULINO
POWER
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
7
~6
~5
4
~3
2
TX > 1
RX < 0
R1
330R
D1
LED-RED
Electrnica avanzada
AREF
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
R2
330R
DIGITAL (PWM~)
SIMULINO
ANALOG IN
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
POWER
void loop() {
// Lee el estado del valor del push button
if (digitalRead(PBpin)==1) {
digitalWrite(ledPin, HIGH); // ON LED
OFF: if (digitalRead(PBpin)==1) goto OFF; // ENCLAVA
on++;
}
if (on==2){
on=0;
digitalWrite(ledPin, LOW); //OFF LED
}
}
SIM1
ATMEL
void setup() {
// Inicializa pin de salida donde se conecta el LED:
pinMode(ledPin, OUTPUT);
// Inicializa pin de entrada donde se conecta el Push button:
pinMode(PBpin, INPUT);
}
7
~6
~5
4
~3
2
TX > 1
RX < 0
R1
330R
D1
LED-RED
Electrnica avanzada
R2
330R
RP1
1
2
3
4
5
6
7
8
9
7
~6
~5
4
~3
2
TX > 1
RX < 0
10
9
8
7
6
5
4
3
2
1
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
DIGITAL (PWM~)
SIMULINO
ANALOG IN
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
POWER
SIMULINO UNO
RESPACK-8
U1
LED-BARGRAPH-RED
11
12
13
14
15
16
17
18
19
20
void loop(){
if(digitalRead(PBpin)==1){ //sondea push button
PORTD=numero[cuenta];
cuenta++;
next: if(digitalRead(PBpin)==1) goto next;
}
if (cuenta==8){
cuenta=0;
}
}
Electrnica avanzada
Electrnica avanzada
2
3
4
5
6
7
8
9
SIM1
AREF
ATMEL
DIGITAL (PWM~)
ANALOG IN
SIMULINO
POWER
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
7
~6
~5
4
~3
2
TX > 1
RX < 0
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
Electrnica avanzada
2
3
4
5
6
7
8
9
1
AREF
RESET
ATMEL
DIGITAL (PWM~)
SIMULINO
ANALOG IN
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
SIM1
POWER
void loop(){
PORTD=numero[cuenta];
cuenta++;
delay(1000);
if (cuenta==10){
cuenta=0;
}
7
~6
~5
4
~3
2
TX > 1
RX < 0
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
Electrnica avanzada
LCD
#include <LiquidCrystal.h>// librera del LCD
Configuracin de librera
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0,0); //(columna,renglon)
lcd.write(" MAESTRIA EN ");
lcd.setCursor(0,1);
lcd.write(" ELECTRONICA ");
delay(1500);
lcd.setCursor(0,0); //(columna,renglon)
lcd.print(" ESTA FACIL ");
lcd.setCursor(0,1);
lcd.print(" ES PARA BEBES ");
delay(1500);
lcd.clear();
lcd.setCursor(4,0); //(columna,renglon)
lcd.print("PRACTICAR");
lcd.setCursor(3,1);
lcd.print("ES LA CLAVE");
delay(1500);
}
Electrnica avanzada
LCD
LCD1
LCD1
4
~3
2
TX > 1
RX < 0
ATMEGA328P
ATMEL
D0
D1
D2
D3
D4
D5
D6
D7
7
~6
~5
4
~3
2
TX > 1
RX < 0
www.arduino.cc
blogembarcado.blogspot.com
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
SIMULINO UNO
LCD1
4
5
6
1
2
3
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VDD
VEE
SIM1
RS
RW
E
LM016L
7
8
9
10
11
12
13
14
ATMEGA328P
DIGITAL (PWM~)
A0
A1
A2
A3
A4
A5
SIMULINO
7
~6
~5
ANALOG IN
ATMEL
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
POWER
DIGITAL (PWM~)
SIMULINO
ANALOG IN
A0
A1
A2
A3
A4
A5
POWER
GND
13
12
~11
~10
~9
8
ARDUINO
5V
7
8
9
10
11
12
13
14
AREF
AREF
RESET
4
5
6
VSS
VDD
VEE
7
8
9
10
11
12
13
14
4
5
6
1
2
3
1
2
3
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VDD
VEE
RS
RW
E
SIM1
SIM1
RS
RW
E
LM016L
LM016L
AREF
ATMEL
DIGITAL (PWM~)
ANALOG IN
SIMULINO
POWER
A0
A1
A2
A3
A4
A5
ATMEGA328P
5V
GND
13
12
~11
~10
~9
8
ARDUINO
RESET
7
~6
~5
4
~3
2
TX > 1
RX < 0
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
Electrnica avanzada
RESET
50%
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
ANALOG IN
RV1
A0
A1
A2
A3
A4
A5
AREF
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
int val = 0; // variable para almacenar el valor ledo por la entrada analgica
void setup() {
Serial.begin(9600);
}
void loop() {
val = analogRead(A5); // lee el valor del canal de ENTRADA analgica
Serial.print(val); // Enva al PC el valor analgico ledo y lo muestra en pantalla
Serial.write(10);
DUINO1
Serial.write(13);
delay(100);
}
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RXD
VT52, VT100, ANSI
TXD
1k
ARDUINO UNO R3
RTS
Xmodem, Ymodem, Zmodem
CTS
Electrnica avanzada
100%
ARDUINO UNO R3
DIGITAL (~PWM)
ANALOG IN
1k
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
TX
RX
LCD1
7
8
9
10
11
12
13
14
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
4
5
6
VSS
VDD
VEE
LM016L
1
2
3
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
val = analogRead(A5); // lee el valor del canal de ENTRADA analgica
Serial.print(val,HEX); // Enva al PC el valor analgico ledo y lo muestra en pantalla
Serial.write(10);
Serial.write(13);
DUINO1
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DECIMAL");
lcd.setCursor(9,0);
AREF
lcd.print(val);
PB5/SCK
PB4/MISO
RESET
lcd.setCursor(0,1);
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
lcd.print("HEX ");
PB0/ICP1/CLKO
lcd.setCursor(9,1);
PD7/AIN1
A0
~ PD6/AIN0
PC0/ADC0
PD5/T1
A1
~
lcd.print(val,HEX);
RV1
PC1/ADC1
PD4/T0/XCK
A2
PC2/ADC2
A3
~ PD3/INT1
delay(100);
PC3/ADC3
PD2/INT0
A4
PC4/ADC4/SDA
PD1/TXD
A5
PC5/ADC5/SCL
}
PD0/RXD
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RXD
VT52, VT100, ANSI
TXD
RTS
Xmodem, Ymodem, Zmodem
CTS
Electrnica avanzada
Electrnica avanzada
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
1k
A0
A1
A2
A3
A4
A5
ANALOG IN
9%
RV1
C
AREF
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
RESET
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ARDUINO UNO R3
Electrnica avanzada
SALIDA PWM
int ledPin = 9; // pin PWM para el LED
void setup(){} // no es necesario configurar nada
void loop()
{
for (int i=0; i<=255; i++) // el valor de i asciende
{
analogWrite(ledPin, i); // se escribe el valor de I en el PIN de salida del LED
delay(100); // pauses for 100ms
}
for (int i=255; i>=0; i--) // el valor de I desciendei
{
analogWrite(ledPin, i); // se escribe el valor de ii
delay(100); // pasusa durante 100ms
}
}
Electrnica avanzada
Electrnica avanzada
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
1k
A0
A1
A2
A3
A4
A5
ANALOG IN
97%
RV1
C
AREF
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
RESET
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ARDUINO UNO R3
Electrnica avanzada
Electrnica avanzada
LCD2
LM016L
RESET
150.0
LM35
U1(VOUT)
V=1.50465
A0
A1
A2
A3
A4
A5
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
1
2
3
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
ANALOG IN
VOUT
AREF
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
U1
VSS
VDD
VEE
DUINO1
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ARDUINO UNO R3
Electrnica avanzada
temp=41*vol1-55;
Serial.print(temp); // Enva al PC el valor analgico ledo y lo muestra en pantalla
Serial.write(10);
Serial.write(13);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("TEMP ");
lcd.setCursor(9,0);
lcd.print(temp);
lcd.setCursor(0,1);
lcd.print("VOLTAJE ");
lcd.setCursor(9,1);
lcd.print(vol1);
delay(100);
}
Electrnica avanzada
U1
R4
-34.0
VOUT
R1
R2
100k
10k
U2
U3
R3
100k
4300R
OPAMP
OPAMP
LM35
R5
R6
37.5k
100k
BAT2
5V
LCD2
LM016L
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
1
2
3
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
ANALOG IN
A0
A1
A2
A3
A4
A5
AREF
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
RESET
VSS
VDD
VEE
DUINO1
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ARDUINO UNO R3
Electrnica avanzada
U1
R4
40.0
VOUT
R1
R2
100k
10k
U2
U3
R3
100k
4300R
OPAMP
OPAMP
LM35
R5
R6
37.5k
100k
BAT2
5V
LCD2
LM016L
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
1
2
3
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
ANALOG IN
A0
A1
A2
A3
A4
A5
AREF
1121
ATMEGA328P-PU
microcontrolandos.blogspot.com
RESET
VSS
VDD
VEE
DUINO1
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ARDUINO UNO R3