Array de LEDs e funcións

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:

  1. 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.
  2. 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.

Deixa un comentario