Blink
Durante la introducción a la programación vimos como hacer pequeños programas y animaciones usando Processing. Encendíamos y apagábamos los píxeles en la pantalla del ordenador. Como sabes, la placa controladora no tiene pantalla, pero tiene un LED - una pequeña lámpara que puede encenderse y apagarse fácilmente usando un programa. Se puede decir que la placa viene con una pantalla de un solo píxel. Ese LED está conectado al pin digital 13.
Veamos cómo controlar el LED de tu placa utilizando un comando sencillo. El primer ejemplo es el que llamamos Blink, que significa encender y apagar el LED repetidamente (hacer que el LED parpadee). Al igual que los programas de Processing que siempre necesitan tener una función setup() y una función draw(), en este caso se necesitan las funciones setup() y loop():
- setup(): Esta parte del programa sólo se ejecuta al principio. Aquí podrás configurar, entre otras cosas, las funcionalidades de los pines, ya sean entradas (inputs) o salidas (outputs).
- loop(): Esta parte funcionará infinitamente (o hasta que desconectes la fuente de alimentación). Los comandos en la función loop serán ejecutados en orden, uno tras otro. Cuando llegamos al último comando, comenzará de nuevo desde el principio.
Nota: Ahora vas a empezar a utilizar el IDE, así que si aún no lo has instalado, clica aquí
Ejemplo 2.1
En este ejemplo, harás parpadear el LED de la placa.
Materiales
- 1 x placa controladora
Instrucciones
- Abre el IDE y escribe el siguiente programa:
- Conecta la placa al ordenador utilizando el cable USB.
- Compila y descarga el programa en la placa empleando este icono
source: http://verkstad.cc/urler/ctc-g-b2-c-11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/* * _2.1_blink * * The on-board LED blinks with a 2 second interval, * being turned on for 1 second and then turned off for 1 second. * * (c) 2013-2016 Arduino LLC. */ void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
Resultado
El LED de la placa parpadea con un intervalo de 2 segundos, un segundo encendido y un segundo apagado.
Comandos
- pinMode(pinNumber, INPUT | OUTPUT | INPUT_PULLUP): Se utiliza para determinar si el pin digital de tu placa está escribiendo (OUTPUT) o leyendo (INPUT | INPUT_PULLUP) las señales hacia/desde el entorno.
- digitalWrite(pinNumber, HIGH | LOW): Se utiliza para hacer que un pin digital concreto, pinNumber, escriba (HIGH) o (LOW) a una salida.
- delay( time ): Detiene el programa durante una cierta cantidad de tiempo. El tiempo se expresa en milisegundos. Si quieres detener el programa durante 2 segundos, deberías escribir delay(2000).
Recordemos también lo que vimos durante el primer bloque de contenido:
- Cada línea termina con punto y coma ;.
- Los bloques de código están contenidos entre llaves { }.
- Las funciones comienzan con una definición como void.
- Las funciones tienen parámetros que figuran entre paréntesis ( ), y pueden tener tantos parámetros como necesites.
Cómo funciona
- En la función setup(), se configura el pin 13 como salida, en él esta conectado el LED de la placa.
- En la función loop(), se enciende el LED escribiendo HIGH en el pin 13. Esto significa que envía un nivel alto al pin 13.
- El programa espera durante 1000 milisegundos (que es lo mismo que 1 segundo).
- El LED se apaga escribiendo LOW en el pin 13. Esto significa que envía un nivel bajo al pin 13.
- El programa espera durante 1000 milisegundos.
- Repite la función loop().
Añade tus propios ledes
Puedes añadir tus propios ledes al circuito. Todos los circuitos necesitan alimentación y tierra para que la electricidad atraviese sus componentes. En la placa, la alimentación se puede tomar del pin IOREF o de los pines digitales (cuando se ponen a HIGH). El pin IOREF está conectado al voltaje de referencia de tu placa controladora (5 V o 3,3 V dependiendo de la placa). La tierra esta marcada en la placa como GND.
Cuando trabajas con un LED, es importante que recuerdes que tiene polaridad. El aspecto físico de un LED muestra su polaridad. El terminal largo se denomina ánodo y debe estar conectado al positivo, en este caso a un pin digital para poder controlarlo. El terminal corto, o cátodo, debe estar conectado a tierra (0 V o GND).
Si te fijas en la ilustración, el terminal corto, o cátodo, se marca también con un lado plano (flat edge) en la carcasa del LED.
Los ledes no se romperán si los conectas con la polaridad opuesta, simplemente no funcionarán. Sin embargo, por ellos no puede circular mucha corriente, para asegurarte de que no se quemen, debes poner una resistencia. El valor de la resistencia suele variar, en nuestro caso, utilizaremos 220 ohm. Aprende más sobre esto en la referencia de resistencias y ley de ohm.
Para hacer más fácil la construcción de circuitos, usaremos la Shield Educativa. Una vez montada en tu placa, la shield amplia sus capacidades, además de añadirle características extra. Para hacer el circuito con un LED, haremos uso de la breadboard. Lee más sobre la breadboard, y sobre la Shield Educativa si quires o lo necesitas.
Ejemplo 2.2
En este ejemplo conectarás un LED a la tu placa controladora y lo harás parpadear.
Materiales
- 1 x placa controladora
- 1 x Shield Educativa
- 1 x LED
- 1 x resistencia 220 ohm
- 2 x cable de prototipado
Instrucciones
- Conecta la shield en la parte superior de tu placa controladora.
- Conecta el LED a través del puente de la breadboard.
- Conecta la resistencia de 220 ohm al pin digital 5 con un cable de prototipado.
- Conecta el otro terminal de la resistencia al terminal positivo del LED (el terminal más largo).
- Conecta el terminal negativo (el terminal más corto) del LED a GND.
- Escribe el siguiente programa en el IDE:
- Compila y descarga el programa en la placa empleando este icono
source: http://verkstad.cc/urler/ctc-g-b2-c-21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/* * _2.2_blink * * An external LED blinks with a 2 second interval, * being turned on for 1 second and then turned off for 1 second. * * (c) 2013-2016 Arduino LLC. */ void setup() { pinMode(5, OUTPUT); } void loop() { digitalWrite(5, HIGH); delay(1000); digitalWrite(5, LOW); delay(1000); }
Resultado
Como en el ejemplo anterior, el LED parpadea con un intervalo de 2 segundos.
Cómo funciona
- En la función setup(), se configura el pin 5 como salida, este es el pin al que esta conectado el LED.
- En la función loop(), se enciende el LED escribiendo HIGH en el pin 5.
- El programa espera durante 1000 milisegundos.
- El LED se apaga escribiendo LOW en el pin 5.
- El programa espera durante 1000 milisegundos.
- Repite la función loop().
Ejemplo 2.3
En este ejemplo, modificarás el ejemplo 2.2 ligeramente. Vas a mantener el mismo circuito pero en el programa crearemos una variable para almacenar el número del pin digital al que hemos conectado el LED, en lugar de escribir simplemente un número. Revisa la sección de variables del primer bloque si quieres recordar lo que son.
Instrucciones
- Escribe el siguiente programa en el IDE:
- Compila y descarga el programa en la placa empleando este icono
source: http://verkstad.cc/urler/ctc-g-b2-c-31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26/* * _2.3_blink * * An external LED blinks with a 2 second interval, * being turned on for 1 second and then turned off for 1 second. * * The variable ledPin is declared to hold the value 5, the number * of the digital pin you are using. * * (c) 2013-2016 Arduino LLC. */ int ledPin = 5; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Resultado
Este ejemplo debe funcionar exactamente igual que el anterior.
Cómo funciona
- Se declara la variable ledPin para almacenar el valor 5, el número del pin digital que estás empleando.
- En la función setup(), se configura el pin 5 como salida, usando para ello la variable ledPin.
- En la función loop(), se enciende el LED escribiendo HIGH en el pin 5, usando para ello la variable ledPin.
- El programa espera durante 1000 milisegundos.
- El LED se apaga escribiendo LOW en el pin 5.
- El programa espera durante 1000 milisegundos.
- Repite la función loop().
Nota: Si decides conectar el LED a otro pin digital, gracias a la variable, solo tendrás que reemplazar el número en un sitio en el código y no en tres.
¡Sigue experimentando!
- Ahora puedes probar a ver qué sucede cuando cambias los tiempos dentro de la función delay. ¿Qué ocurre si haces los tiempos más pequeños? ¿La luz parpadea más rápido o más lento?
- También puedes utilizar la luz para simular los latidos del corazón. Comprueba tus latidos midiendo tu pulso, notarás que siempre obtienes dos pulsaciones, algo así como tock tock… pausa… tock tock… pausa… ¿Puedes simularlo con un LED? (SUGERENCIA: puedes copiar y pegar el código).
- Por último, ¿qué sucede cuando el tiempo es verdaderamente pequeño? Digamos que lo cambias a delay(10), ¿todavía puedes ver el parpadeo de la luz?
VU-Meter
Es posible conectar y controlar más de un LED a tu placa. En los proyectos de este bloque verás que al usar varios ledes obtenemos lo que llamamos VU-Meter en el programa CTC. Un VU-Meter es una línea de ledes agrupados. La librería EducationShield contiene un clase llamada vuMeter con varias funciones para que puedas controlar muchos ledes más fácilmente. Lee más sobre ello en la referencia VU-Meter.