Programando Arduino UNO

3. Señales digitales

3.4. Propuesta 3

Programar un led que produzca todo el tiempo la señal de SOS en código Morse.

Vamos a avanzar un poco más en nuestros conocimientos de programación. En este programa aprenderemos a crear nuestras propias funciones (o subrutinas) para ser usadas varias veces en él sin tener que volver a escribirlas una y otra vez. Con ello se consigue un código más fácil de depurar o corregir y de entender.

En código Morse, la letra S son tres puntos, mientras que la O son tres líneas: SOS = …---...

Seguiremos los siguientes pasos:

1.- Conecta un led de tu kit al pin 11 de tu Arduino. Para el punto haremos que el led brille 0,3 segundos y para la raya, 0,9 segundos. Entre cada punto o raya dejaremos el led apagado durante 0,3 segundos también.

Si no dispones de kit, usa una protoboard y construye el siguiente circuito:

Obtenida de: Arduino - Home

2.- Abre el IDE de Arduino y comienza un programa nuevo. El IDE te abre la estructura básica de cualquier programa o sketch:

	void setup() {
	// put your setup code here, to run once:
	}
	void loop() {
	// put your main code here, to run repeatedly:
	}

3.- Define dentro de void setup() el pin 11 como pin de salida:
	void setup()
	{
		pinMode(11,OUTPUT);
	}

4.- Vamos a programar la subrutina que emitirá la letra S en Morse. Así, cada vez que la uses en tu programa, este la ejecutará. En nuestro ejemplo, el pin 11 se enciende y apaga tres veces cada 0,3 segundos. Para programar una subrutina se usa void nombre () Las subrutinas se incorporan delante de void setup():

	void S()
	{
		for (int i=0; i<3; i++)
		{	
			digitalWrite(11,HIGH);
			delay(300);
			digitalWrite(11,LOW);
			delay(300);
		}
	}


5.- Repite todo el proceso para crear el bloque O, que solo se diferencia en la duración del led encendido, que pasa a ser de 0,9 segundos.

	void O()
	{
		for (int i=0; i<3; i++)
		{
			digitalWrite(11,HIGH);
			delay(900);
			digitalWrite(11,LOW);
			delay(300);
		}
	}

6.- Una vez que disponemos de nuestros nuevos bloques, programamos el programa principal que se repetirá una y otra vez. Entre cada señal de SOS dejaremos un segundo de descanso:

	void S()
	{
		for (int i=0; i<3; i++)
		{
			digitalWrite(11,HIGH);
			delay(300);
			digitalWrite(11,LOW);
			delay(300);
		}
	}
	void O()
	{
		for (int i=0; i<3; i++)
		{
			digitalWrite(11,HIGH);
			delay(900);
			digitalWrite(11,LOW);
			delay(300);
		}
	}

	void setup()
	{
		pinMode(11,OUTPUT);
	}

	void loop()
	{
		S();
		O();
		S();
		delay(1000);
	}


INTEF (2021). SOS en placa [vídeo] YouTube

Observa cómo usando tus propias subrutinas, se simplifica la comprensión del código, ya que el programa principal es más sencillo. Además, puedes dividir tu problema en otros más sencillos de abordar y depurarlos en caso de que encuentres errores.