Ejercicios
Intermitente
Se trata de realizar un ejercicio básico que consiste en encender y apagar un led (parpadear led).
int ledPin = 5; // Se declara la variable ledPin, que hará referencia al led nro 1. void setup() // Configuración { pinMode(ledPin, OUTPUT); // Setea el PIN 5 como salida digital } void loop() // Bucle de funcionamiento { digitalWrite(ledPin, HIGH); // Enciende el LED delay (1000); // Pausa de 1 segundo (tiempo de encendido) digitalWrite(ledPin, LOW); // Desactiva el LED delay (1000); // Pausa de 1 segundo (tiempo apagado) }
Nota
- Cuando declaramos la variable ledPin, hay que tener en cuenta que los leds 1, 2 y 3 están conectados a los pines 5, 6 y 7 respectivamente. Por ende podemos utilizar cualquiera de ellos, incluso mas de 1.
- También podemos jugar con la pausa para variar la velocidad con la que parpadea nuestro led. El parámetro que recibe delay() es un valor numérico que hace referencia a los milisegundos de pausa (1000 milisecs = 1 segundo).
Opción 1:
Opción 2:
La ventaja de la segunda opción es que podemos controlar la pausa y por ende la velocidad de parpadeo.
Alarma
Aquí utilizaremos tanto el buzzer, como el led 3 de manera intermitente (simulando una alarma), y lo activaremos mediante un pulsador.
// Declaramos las variables necesarias para utilizar el led, el buzzer y un pulsador. int ledRojo = 7; int buzzer = 8; int pulsador = 2; int val = 0; // Aquí guardaremos el valor leído por el pulsador void setup() { // Configuración pinMode(ledRojo, OUTPUT); // Se designan los pines 7 y 8 como salida digital. pinMode(buzzer, OUTPUT); pinMode(pulsador, INPUT); // Se designa el PIN 2 como entrada digital. } void loop() // Bucle de funcionamiento { val=digitalRead(pulsador); // Lee el valor de entrada if(val==HIGH){ // Chequea si el valor leído es "1" (botón presionado) digitalWrite(ledRojo, HIGH); digitalWrite(buzzer, HIGH); delay(500); digitalWrite(ledRojo, LOW); digitalWrite(buzzer, LOW); delay(500); } else{ digitalWrite(ledPin, LOW); // Apaga el led digitalWrite(buzzer, LOW); // Apaga el buzzer } }
Secuencia básica de 3 LEDs
Enciende y apaga 3 LEDs cada determinado tiempo.
// A continuacón se declaran las variables que harán referencia a los leds 1, 2 y 3 (pins 5, 6 y 7 respectivamente) int ledPin1 = 5; int ledPin2 = 6; int ledPin3 = 7; void setup() { // Se designan los pines 5, 6 y 7 como salidas digitales pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); // Se setean los LEDs en OFF digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); digitalWrite(ledPin3, LOW); } void loop() { //Se encienden y apagan los LEDs cada 200 milisegundos digitalWrite(ledPin1, HIGH); delay(200); digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, HIGH); delay(200); digitalWrite(ledPin2, LOW); digitalWrite(ledPin3, HIGH); delay(200); digitalWrite(ledPin3, LOW); }
Lectura de un pulsador
Detecta si un pulsador ha sido presionado o no, encendiendo algún LED en consecuencia.
//Declaración de variables para el LED, pulsador y valor del mismo. int ledPin = 7; int button = 2; int value = 0; void setup() { pinMode(ledPin, OUTPUT); // Se designa el PIN 9 como salida digital. pinMode(button, INPUT); // Se designa el PIN 10 como entrada digital. } void loop() { value = digitalRead(button); // Lee el valor de la entrada digital. digitalWrite(ledPin, value); // Enciende o apaga el LED de acuerdo al valor obtenido en value. }
Nota
Este es un ejemplo simple de uso de un pulsador para desencadenar un proceso, en este caso encender un led. Se podría complicar tanto como uno quiera, pues el proceso puede ser algo mas elaborado, veamos el ejemplo que sigue.
Lectura de un pulsador (avanzado)
En este caso, utilizaremos 2 botones, cada uno de ellos activará una secuencia diferente.
//Declaración de variables necesarias int led1 = 5; int led2 = 6; int led3 = 7; int button1 = 2; int button2 = 3; int value1 = 0; int value2 = 0; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(button1, INPUT); pinMode(button2, INPUT); } void loop() { value1 = digitalRead(button1); value2 = digitalRead(button2); //Secuencia 1: Se activa con el primer boton, siempre y cuando no se este presionando el boton 2 simultaneamente. if (value1==1 && value2==0) { digitalWrite(led1, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); delay(200); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); delay(200); digitalWrite(led3, LOW); digitalWrite(led2, HIGH); delay(200); digitalWrite(led2, LOW); } // Secuencia 2 if (value2==1 && value1==0) { digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led2, LOW); delay(500); digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led2, HIGH); delay(500); } digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); }
Nota
En la versión de Ardublock se utilizaron 2 subrutinas con el fin de facilitar la lectura del programa.
- Abajo a la izquierda, la subrutina mas corta (secuencia2) es la segunda secuencia en el código.
- En el lado derecho tenemos la subrutina mas larga (secuencia1) y corresponde a la primer secuencia del código.
Otro punto a tener en cuenta en esta versión, es la no discriminación del caso en el que se presionan los pulsadores 1 y 2 simultáneamente por cuestiones de espacio.
El coche fantástico
Este ejemplo hace uso de 6 LEDs conectados a los PINES 2, 3, 4, 7, 8 y 9 de la placa mediante resistencias de 220 Ohmios. El objetivo de este ejercicio es aprender programación secuencial y buenas técnicas para programar la placa E/S.
int pinArray[] = {2, 3, 4, 7, 8, 9}; // Define el array de pines int count = 0; // Contador int timer = 100; // Temporizador void setup() { for (count=0; count<6; count++) { //Configuramos todos los PINs pinMode(pinArray[count], OUTPUT); } } void loop() { // Enciende y apaga secuencialmente los LEDs utilizando la secuencia de control "for" for (count=0; count<6; count++) { digitalWrite(pinArray[count], HIGH); //recorrida de ida delay(timer); digitalWrite(pinArray[count], LOW); delay(timer); } for (count=5; count>=0; count--) { digitalWrite(pinArray[count], HIGH); //recorrida de vuelta delay(timer); digitalWrite(pinArray[count], LOW); delay(timer); } }
Utilizando el sensor LDR
Con este ejercicio, veremos como leer valores del sensor de luz LDR por puerto serial.
int LDRPin = A7; int val = 0; void setup() { Serial.begin(9600); } void loop() { val = analogRead(LDRPin); Serial.print("Valor captado: "); Serial.println(val); delay(500); }
Vúmetro con diodos LED
Construcción de un indicador de luz con un vúmetro LED.
//Declaración de variables int led1 = 5; int led2 = 6; int led3 = 7; int LDR = A7; // Entrada analógica void turn_off() { // Apaga los 3 LEDs digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); } void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); } void loop() { int val; val = analogRead(LDR); // Lee el valor de la señal analogica if (val >= 100) digitalWrite(led1, HIGH); if (val >= 512) digitalWrite(led2, HIGH); if (val >= 768) digitalWrite(led3, HIGH); turn_off(); }