Descrición:
Arrays
Para definir un conxunto de variables podemos utilizar un array:
tipo nome[nº de variables]={valor1, …, valor n}
Podemos utilizar un array para almacenar, por exemplo, os pins nos que están conectados os LEDs. Isto resulta interesante, por exemplo, se os pins nos que están conectados os LEDs non son consecutivos.
int leds[4]={7,9,11,13}; // Exemplo1: 4 Leds conectados nos pins 7, 9, 11 e 13
int notas[] = {NOTE_F3,NOTE_C4,NOTE_CS4,NOTE_E3,NOTE_C4,NOTE_C3}; // Exemplo2: 6 notas musicais
Funcións
As funcións ou subrrutinas son programas que definimos antes do loop() e que recollen unha serie de instrucións. Cando queremos que esas instrucións se executen só temos que invocar a función no lugar do programa que nos interese e poderemos facelo tantas veces como queiramos, sen necesidade de repetir o código.
- Para definir unha función sen parámetros escribimos, fóra do loop, void nomedafuncion(){ instrucións}
- Para invocar a función xa dentro do loop escribimos nomedafuncion();
- Tamén podemos definir unha función con certos parámetros, pero iso irémolo vendo máis adiante con exemplos concretos.
Programas:
1. Función luces
1. Función luces: Imos empregar unha función ou subrutina, que definiremos previamente. No noso caso chámase “luces”. Para definila usamos void luces() {…} Cando queiramos que se execute invocámola: luces ();
// Declaración de variables: int leds[5]={7,9,10,12,13}; // Creamos un array de 5 pins nos que van conectados os LEDs int pulsador=2; int tempo=100; // Configuración: void setup() { for(int n=0;n<5;n++) { // Configuramos os pins como saída pinMode(leds[n],OUTPUT); } } // Programa: void luces() { //Definimos a función "luces" for (int n=0;n<5;n++) { // os LEDs van acendéndose e apagándose consecutivamente digitalWrite (leds[n],HIGH); delay (tempo); digitalWrite (leds[n],LOW); delay (tempo); } } void loop() { if (digitalRead(pulsador)==HIGH) { // Se prememos no pulsador luces (); // execútase a función "luces" } }
2. Ruleta de leds
2. Ruleta de leds: 5 LEDs se irán acendendo e apagando consecutivamente e volta a empezar. A persoa que xoga deberá premer no pulsador cada vez que se acenda o LED do medio, de cor verde (pin 11 no noso caso). No caso de acerto móstrase “Acertaches!” na consola e soará unha melodía. No caso de fallo móstrase “Fallaches” e soará outra melodía. Para ver como facer para que soe unha melodía bótalle unha ollada á sección “Xogando co son“. Neste caso conectamos un zumbador entre o pin 4 e a masa.
// Declaración de variables: int boton = 2; // Pulsador int altofalante = 4; int valor; // Variable para ler o pin do pulsador // Configuración void setup() { Serial.begin(9600); // conectamos o porto serie while(!Serial); for (int i=9; i<=13;i++){ // Declaramos os pins do 9 ao 13 como saída pinMode(i, OUTPUT); } pinMode(altofalante, OUTPUT); } // Programa: void melodia1(){ // Melodía para o acerto tone(4,1000,200); // 1000 Hz durante 0.2s delay(400); tone(4,1500,300); // 1500 Hz durante 0.3s delay(400); tone(4,2000,500); // 2000 Hz durante 0.5s } void melodia2(){ // Melodía para o fallo tone(4,260,500); // 260 Hz durante 0.2s delay(400); } void loop() { for (int i=9; i<=13;i++) { // Imos acendendo os LEDs un a un digitalWrite(i, HIGH); valor=digitalRead(boton); // Miramos se o pulsador está premido if ((valor==HIGH) && (i==11)){ // Se acertaches Serial.println("ACERTACHES!"); // móstrase na consola melodia1(); // e soa a melodía 1 delay(1000); // Agarda 1 segundo antes de continuar } if ((valor==HIGH) && (i!=11)){ // Se non acertaches Serial.println("FALLACHES!"); // móstrase na consola melodia2(); // e soa a melodía 2 delay(1000); } delay(200); digitalWrite(i, LOW); // apaga o led para pasar ao seguinte delay(10); } }
Propostas:
- Xogo de luces con funcións: Fai un xogo de luces creando varias funcións (por exemplo, acender e apagar os leds consecutivamente, acender e apagar varias veces, etc.). Despois fai un programa que inclúa estas funcións. Por exemplo, con varios pulsadores, cando prememos un pulsador determinado execútase unha función concreta.
- Ruleta mellorada. Podes mellorar o programa da ruleta engadindo novas accións. A) Engade máis LEDs, polo menos 9. Utiliza un array para definilos. B) Introduce variables para establecer un número máximo de intentos e para facer un contador co número de acertos en cada partida. Ao finalizar o xogo (esgotáronse os intentos) soa outra melodía diferente C) Fai que a medida que acertas o intervalo de tempo entre o acendido dos diferentes LEDs sexa menor, facendo o xogo máis difícil.