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 0 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 0
*/
#define led_saida 0 // cria um apelido "led_saida" para o valor 0 (pino 0)
void setup() { // função executada uma única vez quando pressionado o reset
pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}
void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
digitalWrite(led_saida, HIGH); // liga o led. Coloca nível de tensão alto no pino 0
delay(1000); // espera 1 segundo
digitalWrite(led_saida, LOW); // desliga o led. Coloca nível de tesão baixo no pino 0
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 substitui 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 led_saida 0 // cria um apelido "led_saida" para o valor 0 (pino 0)
void pisca_led (void){
digitalWrite(led_saida, HIGH); // liga o led. Coloca nível de tensão alto no pino 0
delay(1000); // espera 1 segundo
digitalWrite(led_saida, LOW); // desliga o led. Coloca nível de tesão baixo no pino 0
delay(1000); // espera 1 segundo
}
void setup() { // função executada uma única vez quando pressionado o reset
pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}
void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
pisca_led(); // executa os comandos que faão o led piscar
}
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âmtero
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
/*
Objetivo: entender o uso de funções
Passo 3 - Criar uma função que execute alguns comandos recebendo um parâmetro de tempo
*/
#define led_saida 0 // cria um apelido "led_saida" para o valor 0 (pino 0)
void pisca_led (int segundos){
digitalWrite(led_saida, HIGH); // liga o led. Coloca nível de tensão alto no pino 0
delay(1000 * segundos); // espera quantos segundos foram passados
digitalWrite(led_saida, LOW); // desliga o led. Coloca nível de tesão baixo no pino 0
delay(1000 * segundos); // espera quantos segundos foram passados
}
void setup() { // função executada uma única vez quando pressionado o reset
pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}
void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
pisca_led(2); // executa os comandos que farão o led piscar com 2 segundos de tempo on e off
}
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.
Abaixo o código para piscar um led com os comandos colocados dentro de uma função recebendo dois parâmetros de tempo para 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 led_saida 0 // cria um apelido "led_saida" para o valor 0 (pino 0)
void pisca_led (int segundos_on, int segundos_off){
digitalWrite(led_saida, HIGH); // liga o led. Coloca nível de tensão alto no pino 0
delay(1000 * segundos_on); // espera quantos segundos de on foram passados
digitalWrite(led_saida, LOW); // desliga o led. Coloca nível de tesão baixo no pino 0
delay(1000 * segundos_off); // espera quantos segundos de off foram passados
}
void setup() { // função executada uma única vez quando pressionado o reset
pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}
void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
pisca_led(3,2); // executa os comandos que farão o led piscar com 3 segundos de tempo on 2 segundos de tempo off
}
ATIVIDADE:
Utilizando a função delay (que gera um atraso de 1ms) construa um skech com:
• uma função que gere múltiplos de 1s
• pisque um led utilizando essa função, com tempos de ON=1s e OFF=2s