Você está na página 1de 5

Kurtso/Curso:

Ikasgaia/Tema:

Bachillerato 2
Microcontroladores

Ikasgaia/Asignatura:
Dokumentua/Documento:

DAO
Ficha 03 Contando

Ficha 03 - Contando
Introduccin
En esta ficha se va a seguir trabajando con pulsadores y LEDs. Para empezar, aplicaremos el siguiente esquema de un
pulsador y un LED:

Enviando datos al ordenador


Arduino nos permite comunicar nuestro circuito con el ordenador (siempre que est conectado al puerto USB), para conocer
datos. Para ello, en la funcin "setup", junto a la inicializacin de los pines (en el circuito propuesto, el pin 2 ser la entrada
del pulsador, y el pin 3 la salida del LED) hay que aadir el siguiente cdigo:
Serial.begin(9600);

En cualquier parte del cdigo es posible aadir una de estas funciones:


Serial.print(dato);
Serial.println(dato);

La funcionalidad es similar: ambas envan el dato al ordenador, y es posible visualizarlo en la interfaz del programa Arduino
mediante el botn "Monitor Serial". La nica diferencia entre una y otra es la siguiente:

Serial.println aade un salto de lnea despus de escribir el dato (pasa a la lnea siguiente).
Serial.print no aade un salto de lnea despus de escribir el dato (no pasa a la lnea siguiente).

El dato podr ser una variable, un nmero, una constante, o un texto (en caso de ser un texto, se escribir entrecomillado,
con comillas dobles "").

Orrialde/pgina: 1/5

C/Iturribide, 78 C.P. 48006 - Bilbao - Tlfn. 94.432.91.00


www.maristasbilbao.com | elsalvador@maristasbilbao.com

Kurtso/Curso:
Ikasgaia/Tema:

Bachillerato 2
Microcontroladores

Ikasgaia/Asignatura:
Dokumentua/Documento:

DAO
Ficha 03 Contando

Vamos a probarlo con un programa muy sencillo, que slo har dos cosas:

Inicializar el pin del pulsador y la comunicacin con el ordenador


Leer el estado del pulsador, y enviarlo al ordenador
// Pin del pulsador
const int pinPulsador = 2;
void setup()
{
// Inicializar la comunicacin con el ordenador
Serial.begin(9600);
// El pulsador es una entrada
pinMode(pinPulsador, INPUT);
}
void loop()
{
// Leer el estado del pulsador
int pulsado = digitalRead(pinPulsador);
// Enviar al ordenador el texto: Valor de pulsado: <si est o no pulsado>
Serial.print("Valor de pulsado: ");
Serial.println(pulsado);
}

Ejercicio: copia el cdigo, programa con l la placa y ejectalo. Abre el monitor serial, y comprueba qu ocurre cuando
pulsas y sueltas el pulsador. Prueba a cambiar el "println" de la ltima lnea por un "print". Qu ocurre?

Contando pulsaciones
Vamos a crear un nuevo programa que cuente cuntas veces hemos pulsado (es decir, soltado) el pulsador, y muestre el
nmero a travs del monitor serial del ordenador. Para ello, necesitaremos un programa que haga lo siguiente:

Inicialice el pin 2 como entrada (pulsador) y la comunicacin el ordenador.


En su funcin loop, compruebe si se ha soltado el pulsador, y en ese caso, incremente en uno el contador de
pulsaciones.

Orrialde/pgina: 2/5

C/Iturribide, 78 C.P. 48006 - Bilbao - Tlfn. 94.432.91.00


www.maristasbilbao.com | elsalvador@maristasbilbao.com

Kurtso/Curso:
Ikasgaia/Tema:

Bachillerato 2
Microcontroladores

Ikasgaia/Asignatura:
Dokumentua/Documento:

DAO
Ficha 03 Contando

Para ello vamos a necesitar que nuestro programa de una vuelta a otra de la funcin "loop" recuerde:

El anterior estado del pulsador


El nmero de veces que se ha pulsado

Para recordar estos dos datos, se necesitarn dos variables enteras.


Aclaracin: en ejemplos anteriores, el estado anterior del pulsador se guardaba como una variable booleana (true / false),
pero resulta mucho ms sencillo guardarlo como una variable entera, y asignar directamente el valor que se ha ledo, que
ser HIGH o LOW.
Adems, vamos a organizar un poco ms el cdigo, creando una funcin que gestione la deteccin de si se ha soltado el
pulsador o no, y se encargue de actualizar el estado anterior, para la siguiente ejecucin de "loop". Esta funcin devolver
"true" si el pulsador se ha pulsado, y "false" si no se ha pulsado. Finalmente, la propia funcin "loop" slo har uso de de esa
funcin para detectar si se ha pulsado, y en ese caso, incrementar el contador, y enviar al ordenador el valor del contador.
Ejercicio: completa el cdigo del programa para que realice la funcionalidad descrita.
// Pin del pulsador
const int pinPulsador = 2;
// CAMBIO: Variable para el contador. Inicialmente su valor ser 0.
// CAMBIO: Variable para el anterior estado del pulsador. Inicialmente su valor ser LOW.
void setup()
{
// CAMBIO: inicializar la comunicacin con el ordenador
// CAMBIO: El pulsador es una entrada
}
// Funcin para detectar la pulsacin
boolean pulsacion()
{
// En esta variable se guardar el resultado de la funcin
boolean resultado;
// CAMBIO: leer el actual estado del pulsador
// CAMBIO: esperar 20 milisegundos
// CAMBIO: detectar la pulsacin. Si ahora est LOW, pero antes estaba HIGH...
if ()
{
// CAMBIO: el resultado ser true
}
// En caso contrario...
else
{
// CAMBIO: el resultado ser false
}
// CAMBIO: de cara a la siguiente vuelta, guardar el actual estado del pulsador en la
variable del estado anterior
// Devolver el resultado de la funcin
return resultado;
}
void loop()
{
// Si el resultado de la funcin pulsacion es verdadero...
if (pulsacion() == true)
{
// Incrementar el contador en una unidad
contador++;
// Enviar el valor al ordenador
Serial.print("Contador: ");
Serial.println(contador);
}
}

Orrialde/pgina: 3/5

C/Iturribide, 78 C.P. 48006 - Bilbao - Tlfn. 94.432.91.00


www.maristasbilbao.com | elsalvador@maristasbilbao.com

Kurtso/Curso:
Ikasgaia/Tema:

Bachillerato 2
Microcontroladores

Ikasgaia/Asignatura:
Dokumentua/Documento:

DAO
Ficha 03 Contando

Sumando y restando pulsaciones


Vamos a realizar un cambio sobre el ejercicio anterior. Vamos a hacer que Arduino cuente hasta 10, y una vez llegado a ese
nmero, vuelva hasta 0 una vez llegado a 0, vuelva a contar hasta 10, etc.
Para realizar este cambio, slo vamos a necesitar un par de cambios

Por un lado, Arduino tendr que saber si est contando hacia delante o hacia atrs. Para que lo sepa, podramos
tener una variable booleana (por ejemplo, "incrementar"), que sea "true" si estamos contando hacia delante, y false
si estamos contando hacia atrs. Piensa si su valor inicial tiene que ser "true" o "false".
Por otro lado, la funcin "loop" tendr que ser algo ms complicada. En el ejemplo anterior, lo nico que se haca
era, en caso de haberse producido una pulsacin, incrementar el contador y enviar el dato al ordenador. El nuevo
esquema de la funcin tendr que ser el siguiente:
o Si se ha producido una pulsacin:
1. Si se est incrementando:
Incrementar el contador
Si el contador ha llegado a diez
o Ya no se est incrementando (de cara a la siguiente pulsacin habr que contar
hacia atrs)
2. Si no
Decrementar el contador
Si el contador ha llegado a cero
o Hay que volver a incrementar (de cara a la siguiente pulsacin habr que contar
hacia delante)
3. Enviar el dato al ordenador

Ejercicio: aade al ejercicio anterior la variable necesaria, y cambia la funcin "loop" para que haga lo que indica el
esquema anterior.
Mejora: seras capaz incluir el cdigo de los puntos 1 y 2 en una funcin, y en caso de producirse una pulsacin, utilizarla?

LED de 11 intensidades
Vamos a terminar con un ltimo ejercicio usando el LED del esquema, con un sencillo cambio:

En la funcin "setup" indica que vas a usar el pin del LED como salida.
En la funcin "loop" justo despus de enviar el contador al ordenador, usa la funcin "analogWrite" para hacer que
el LED se encienda con una intensidad proporcional al valor del contador: 0, apagado; 10, totalmente encendido.
Ten en cuenta que:
o Para que el LED est apagado, el valor que se enve a analogWrite tiene que ser 0.
o Para que est totalmente encendido, el valor que se enva a analogWrite tiene que ser 255.
o Los valores intermedios producirn intensidades intermedias, por ejemplo, un valor de 4 en el contador
equivaldra a un valor 102 en el LED.
Para lograr esta funcionalidad, slo tienes que multiplicar el contador por el valor adecuado, usando la funcin
"analogWrite" de un modo similar a:
analogWrite(pinLED, contador * );

Sustituyendo los puntos suspensivos por el valor que permita la conversin indicada arriba
Ejercicio: realiza el programa que se propone.

Orrialde/pgina: 4/5

C/Iturribide, 78 C.P. 48006 - Bilbao - Tlfn. 94.432.91.00


www.maristasbilbao.com | elsalvador@maristasbilbao.com

Kurtso/Curso:
Ikasgaia/Tema:

Bachillerato 2
Microcontroladores

Ikasgaia/Asignatura:
Dokumentua/Documento:

DAO
Ficha 03 Contando

Ms LEDs con intensidades


Aade a tu circuito otro LED y otro pulsador, de modo que el segundo LED responda a las pulsaciones del segundo pulsador,
pero en lugar de 10 intensidades tenga 20.
Ejercicio 1: utiliza el programa Fritzing para hacer el esquema electrnico del montaje.
Ejercicio 2: monta el circuito y cambia el programa anterior para que realice la funcionalidad indicada.

Orrialde/pgina: 5/5

C/Iturribide, 78 C.P. 48006 - Bilbao - Tlfn. 94.432.91.00


www.maristasbilbao.com | elsalvador@maristasbilbao.com

Você também pode gostar