Saltar a contenido

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:

Intermitente Ardu Opción 2:

Intermitente2 Ardu

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
    }
}

Alarma Ardu


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);
}

Secuencia Ardu


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.
}

Pulsador Ardu

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);    

}

Pulsador2

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);
}

ldr


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();
}

vumetro