Ejercicio 2: SOS

Un LED parpadea, emitiendo un SOS en código morse.

Novedades hardwareNovedades software
 Definición y actualización de variables
 Iteración con for para delimitar las secuencias

Requisitos:

  • Un diodo luminoso, LED, una resistencia de 220 ohmios.
  • Un zumbador piezoeléctrico para una variante del ejercicio.

Planteamiento: Estamos perdidos y vamos a pedir socorro mandando toda la noche un SOS luminoso para que nos vean los aviones de rescate.

Presentación de:

  • Declaración, definición y actualización de variables
  • Iteración con for para delimitar las secuencias.

Este ejercicio introduce el concepto de variables y su utilidad como elemento de abstracción en el código. Las variables permiten calibrar fácilmente la longitud de los dits y los dats (así como la de los silencios entre letras y entre repeticiones de la palabra).

Las variables se declaran al principio, antes del void setup() y hay que indicar el tipo de su argumento, en este caso números enteros.

 int corto=100;  
 int largo=300;   	
 int pausa=300;
 int espera=1000;

También podemos usar las variables para asignar un PIN digital, lo que resulta práctico si tenemos que modificar las conexiones y es más fácil de recordar.

int led=13;

Estas variables actúan como constantes, pues su valor no cambia durante la ejecución del programa.

En este programa hay una variable que sí varía, actualizando su valor durante la ejecución: es la que usamos como contador en la iteración.

Hay que declarar las variables que vamos a usar como contadores en las iteraciones con el comando for. En este caso, el valor con el que las inicialicemos no importa, pues se vuelven a inicializar al ejecutarse el comando for.

int n=0

La iteración con for describe un bucle que se ejecuta un nº de veces que se indica con el valor inicial, el valor final y cuánto cambia la variable en cada iteración. En este caso tenemos tres : empieza en 0, acaba en 2 y cambia añadiendo 1. Es decir:

 for(n=0;n<3;n++){                - Una primera vez en que n vale 0
 digitalWrite(led, HIGH);         - Una segunda vez en que n vale 1
 delay(corto);                    - Una tercera vez en que n vale 2
 digitalWrite(led,LOW);           
 delay(corto);
 }

Variantes:

  • Cambiar los valores de las variables y ver qué efectos producen.

  • Escribir el programa sin usar ni variables ni iteraciones con for. Es la forma más evidente de apreciar sus ventajas.

  • SMS

Tocar “SMS” (tres puntos, dos rayas, tres puntos”) con el zumbador. Es un ejercicio de repaso, pero también para que se entretengan recreando algo que tienen en sus teléfonos móviles (el aviso por defecto de llegada de un mensaje de texto). De hecho, el código que escriban será casi idéntico al que hayan escrito los programadores de sus teléfonos móviles.

El zumbador se conecta directamente con su terminal positivo a una salida digital y el negativo a una marcada con GND.

VIDEO DEL EJERCICIO 2

CÓDIGO FUENTE

 Copyright (C) 2006  Juan Carlos Alonso de Mena
 This program is free software; you can redistribute it and/or modify it under the terms
 of the GNU General Public License as published by the Free Software Foundation;
 See the GNU General Public License for more details?

 int corto=100;                //Declara la variable de argumento entero "corto" y la inicializa  
 int pausa=300;                //con el valor 100
 int largo=300;
 int espera=1000;
 int n=0;
 int zumb=10;                  //PIN digital al que conectamos el zumbador
 void setup(){
   pinMode(zumb,OUTPUT);
 }
 void loop(){
   for(n=0;n<3;n++){           //Iteración en la que la variable n comienza con el valor 0
     digitalWrite(zumb, HIGH); // y va aumentando en 1 en cada ciclo hasta que toma el valor 2,
     delay(corto);             //  con lo que las instrucciones comprendidas entre los corchetes
     digitalWrite(zumb,LOW);   //  se repiten 3 veces
     delay(corto);
   }
   delay(pausa);               //Tiempo entre letras
   for(n=0;n<2;n++){           //Aquí está la M
     digitalWrite(zumb, HIGH);
     delay(largo);
     digitalWrite(zumb,LOW);
     delay(largo);
   }
   delay(pausa);
   for(n=0;n<3;n++){
     digitalWrite(zumb, HIGH);
     delay(corto);
     digitalWrite(zumb,LOW);
     delay(corto);
   }
   delay(espera);              //Tiempo hasta repetir SMS
 }

Volver?

  Copyright (c) 2006  Juan Carlos Alonso de Mena

  Permission is granted to copy, distribute and/or modify this document under the terms of 
 the GNU Free Documentation License, Version 1.2 or any later version published by the
 Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
 Back-Cover Texts.  A copy of the license is included in the section entitled 
 GNU Free Documentation License?.