sexta-feira, 30 de dezembro de 2016

Funções, como criar, como usar

A estrutura um skecth de arduino deve seguir uma ordem, esta ordem tem por objetivo organizar e facilitar o entendimento:

  1. Declarar as variáveis, constantes ou "apelidos"
  2. Declarar / escrever funções próprias
  3. Escrever a função "setup" que define I/Os, inicializa periféricos, ou seja, ajusta as configurações inicias
  4. Escrever a função "loop" que cria a rotina de looping para execução do programa

O que são funções? 

Uma função é, em linhas gerais, uma sequência de comandos que pode ser reutilizada várias vezes ao longo de um programa. Para criar uma função e dizer o que ela faz, nós precisamos fazer uma declaração de função


Para entender o conceito de função vamos utilizar como exemplo um led ligado ao pino 2 de um Arduino UNO que pisca.






Código para piscar um led que usaremos como exemplo


  


*
  Objetivo: entender o uso de funções
  Passo 1 - Exemplo de uma atividade: piscar um led ligado ao pino 2
*/

#define ledSaida 2   // cria um apelido "ledSaida" para o valor 2 (pino 2)

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(ledSaida, OUTPUT); // inicializa o pino ledSaida como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  digitalWrite(ledSaida, HIGH);  // liga o led. Coloca nível de tensão alto no pino ledSaida
  delay(1000);                    // espera 1 segundo
  digitalWrite(ledSaida, LOW);   // desliga o led. Coloca nível de tesão baixo no pino ledSaida
  delay(1000);                    // espera 1 segundo
}

  



Criando uma função

Note que na função loop temos os comandos que fazem a ação, ou seja, o led piscar.
Poderíamos substituir esse conjuntos de comandos a associar a eles um "nome" que permitisse lembrar o que esses comandos fazem (piscar o led).
Abaixo o código para piscar um led com os comandos colocados dentro de uma função

  



/*
  Objetivo: entender o uso de funções
  Passo 2 - Criar uma função que execute alguns comandos
*/

#define ledSaida 2   // cria um apelido "ledSaida" para o valor 2 (pino 2)

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(ledSaida, OUTPUT); // inicializa o pino ledSaida como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  piscaLed();  // faz o led piscar 1 vez
}

void piscaLed (void){ // função que pisca o led 1 vez
  digitalWrite(ledSaida, HIGH);  // liga o led. Coloca nível de tensão alto no pino ledSaida
  delay(1000);                    // espera 1 segundo
  digitalWrite(ledSaida, LOW);   // desliga o led. Coloca nível de tesão baixo no pino ledSaida
  delay(1000);                               // espera 1 segundo
}

  


Colocando um parâmetro

Que tal se fosse possível controlar o tempo de on/off do led piscante?
para isso basta passar um dado que indique esse tempo. Aqui este dados é chamado de parâmetro
Abaixo o código para piscar um led com os comandos colocados dentro de uma função recebendo um parâmetro de tempo em segundos para os tempos de on e off

  


/*
  Objetivo: entender o uso de funções
  Passo 3 - Criar uma função que execute alguns comandos recebendo um parâmetro de tempo
*/

#define ledSaida 2   // cria um apelido "ledSaida" para o valor 2 (pino 2)

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(ledSaida, OUTPUT); // inicializa o pino ledSaida como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  piscaLed(2); // executa os comandos que farão o led piscar com 2 segundos de tempo on e off
}

void piscaLed (int segundos){ // função que pisca o led com tempo de on/off definido pela variável "segundos"
  digitalWrite(ledSaida, HIGH); // liga o led. Coloca nível de tensão alto no pino ledSaida
  delay(1000 * segundos); // espera s quantidade de tempo definida pela variável "segundos"
  digitalWrite(ledSaida, LOW); // desliga o led. Coloca nível de tesão baixo no pino ledSaida
  delay(1000 * segundos); // espera s quantidade de tempo definida pela variável "segundos"
}

  



Trabalhando com mais parâmetros

Poderíamos controlar os tempo de on e off?
Para isso basta "passar"  o tempo de on e o tempo de off (enviar os parâmetros).
Abaixo o código para piscar um led com os comandos colocados dentro de uma função recebendo dois parâmetros para os tempos de on e off em segundos

  


/*
  Objetivo: entender o uso de funções
  Passo 4 - Criar uma função que execute alguns comandos recebendo dois parâmetros de tempo on e off
*/

#define ledSaida 2   // cria um apelido "ledSaida" para o valor 2 (pino 2)

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(ledSaida, OUTPUT); // inicializa o pino ledSaida como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  piscaLed(2,3); // executa os comandos que farão o led piscar com 2 segundos de tempo on e 3 segundos de tempo off
}

void piscaLed (int segundosOn, int segundosOff ){ // função que pisca o led com tempo de on/off definido pelos parâmetros
  digitalWrite(ledSaida, HIGH); // liga o led. Coloca nível de tensão alto no pino ledSaida
  delay(1000 * segundosOn); // espera s quantidade de tempo definida pela variável "segundos"
  digitalWrite(ledSaida, LOW); // desliga o led. Coloca nível de tesão baixo no pino ledSaida
  delay(1000 * segundosOff); // espera s quantidade de tempo definida pela variável "segundos"
}

  





2 comentários: