Funções

Este é um exercício de programação, onde vamos apresentar o conceito de funções.

!Explicação

Uma função nada mais é do que um bloco de código que realiza uma série de comandos pré-definidos. As funções são muito utilizadas porque com elas facilitam a leitura do código e evitam repetirmos muitas vezes um mesmo item do nosso código.

Um exemplo é beber água. Beber água é uma atividade rotineira e repetitiva, ao longo do dia bebemos água várias vezes. De certa forma todas as vezes que vamos fazer isso realizamos o mesmo procedimento: Pegamos um copo (qualquer tipo de copo, grande pequeno, médio, americano, de base quadrada, base redonda, etc.), levamos até o filtro (filtro de metal, plastico, velho, novo, etc.), abrimos a torneira, colocamos água no copo, fechamos a torneira e bebemos.

Se você nunca tivesse bebido água, seria necessário explicá-lo como fazer passo a passo, especificando cada parte do processo, dando todos os detalhes. Porém, depois da primeira vez, eu não precisaria falar: "pegue um copo, leve até o filtro, abra a torneira, coloque água no copo, feche a torneira e beba". Eu poderia simplesmente falar: beba água! E então, você já saberia fazer tudo isso sozinho. Chamamos essa mensagem "beba água!" de uma chamada de função.

!Parâmetros

Os parâmetros de uma função são as coisas que mudam em cada chamada de função. No exemplo acima, eu poderia dizer "beba água de um filtro novo em um copo pequeno". Nesse caso, "filtro novo" e "copo pequeno" são os parâmetros da chamada de função.

Abaixo vamos ver como usar uma função para acender a lâmpada com uma determinada intensidade (o parâmetro é a intensidade).

!Declarando uma função

Função: func( [parâmetros] ) { [consequência] };

Uma função tem a seguinte anatomia:

func([parâmetros])
{
  // Linhas de código pertencentes à função func
}

!Exemplo de declaração de uma função

Abaixo temos um exemplo de declaração de uma função:

void light(int intensidade)
{
  analogWrite(lamp, intensidade);
  delay(500);
}

!Exemplo de uso de uma função

Para entender melhor vamos reescrever o código do nosso último experimento usando função:

int lamp = 3;

// Declaração da Função
void light(int intensidade)
{
  analogWrite(lamp, intensidade);
  delay(500);
}

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

void loop() 
{
  // Chamadas das funções passando os valores  
  light(5);
  light(55);
  light(105);
  light(155);
  light(205);
  light(255);
}

!Exercício

Tente reescrever o código do projeto Controlando o Buzzer usando funções.

Resposta

// Pino ligado ao buzzer
int buzzer = 5;

void ring_buzzer(int buzzer_pin, int frequency, int time_on)
{
  tone(buzzer_pin, frequency);
  delay(time_on);
  noTone(buzzer_pin);
}

void setup() 
{
  // Define o pino do Buzzer como Saida 
  pinMode(buzzer,OUTPUT);    
}

void loop() 
{
  // Aciona o buzzer na frequencia relativa ao Dó em Hz
  ring_buzzer(buzzer, 261);    
  // Aciona o buzzer na frequencia relativa ao Ré em Hz   
  ring_buzzer(buzzer, 293);             
  // Aciona o buzzer na frequencia relativa ao Mi em Hz
  ring_buzzer(buzzer, 329);       
  // Aciona o buzzer na frequencia relativa ao Fá em Hz
  ring_buzzer(buzzer, 349);    
  // Aciona o buzzer na frequencia relativa ao Sol em Hz
  ring_buzzer(buzzer, 392);            
}