Como criar e utilizar Funções para organizar seu código em Arduino

Declarando e usando Funções em Arduino

Objetivo

Vamos mostrar neste artigo o conceito de funções na programação com Arduino. A utilização de funções no Arduino é uma prática comum para modular e organizar o código. As funções permitem que você divida o código em partes menores e reutilizáveis, tornando-o mais legível e fácil de manter.

Sintaxe (declarando uma função):

tipo_retorno nome_da_funcao(parametros) {
  // Corpo da função
  // Código a ser executado
  return valor_retorno; // Opcional, apenas se a função tiver um tipo de retorno
}

Onde:

tipo_retorno: se a função tiver retorno, utilize o tipo de dado que será retornado, como: int, boolean, float, etc. (leia Tipos de dados usados pelo Arduino)

tipo_retorno: se afunção não tiver retorno, utilize a palavra chave void (que signinifca vazio). Ela indica que a função não retornará nenhum dado para a qual foi chamada. Apenas executa um bloco de códigos sem retornar nada.

parâmetros: servem para fornecer dados que a função precisa para executar suas operações. Esses parâmetros podem ser usados dentro do bloco de código de uma função, por meio de variáveis locais, permitindo que a função seja alterada a cada chamada.

retrun: A palavra-chave return em uma função do Arduino (assim como em outras linguagens de programação) é usada para retornar um valor específico para o ponto onde a função foi chamada. Quando a palavra-chave return é encontrada em uma função, ela interrompe a execução da função atual e retorna o valor especificado na declaração da função como resultado da função.

valor_retorno: é o valor que a função produz ou calcula e que deve ser retornado para onde a função foi chamada. Esse valor é opcional e deverá ser utilizado apenas em funções com retorno. Atenção: tipo de dado do valor_retorno será o mesmo que o tipo_retorno definido na sintaxe da função.

No Arduino, as funções podem ser definidas em qualquer lugar dentro do código de programação, mas é comum organizá-las de maneira lógica e estruturada para facilitar a leitura e manutenção do programa, ou seja, antes ou depois das funções principais setup() e loop(). Isso permite separar partes específicas do código em funções para tornar o programa mais legível e fácil de manter.

1. Utilizando funções SEM retorno

1.1. Em Arduino, uma função sem retorno é uma função que não retorna nenhum valor após executar suas instruções. Ela é definida utilizando o tipo void no lugar de um tipo de dado específico que indicaria o valor retornado pela função.

1.1.1. Em programação, void é um tipo de dado especial que indica ausência de valor. Quando usado em uma função, void indica que a função não retorna nenhum valor. Isso significa que a função executa certas instruções, mas não produz ou retorna nenhum dado específico para onde foi chamada.

1.2. Exemplo da utilização de uma função sem retorno e sem parâmetros:

// Função sem retorno e sem parâmetros para acender um LED por um segundo e apagá-lo por um segundo
void piscarLED() {
  digitalWrite(LED_BUILTIN, HIGH); // Liga o LED embutido
  delay(1000); // Aguarda 1 segundo
  digitalWrite(LED_BUILTIN, LOW); // Desliga o LED embutido
  delay(1000); // Aguarda 1 segundo
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // Configura o LED embutido como saída
}

void loop() {
  piscarLED(); // Chama a função piscarLED para acender e apagar o LED
}

1.2.1. Neste exemplo, a função piscarLED() não possui parâmetros entre os parênteses, indicando que ela não recebe nenhum dado específico quando é chamada. Além disso, ela é do tipo void, o que significa que não retorna nenhum valor.

1.2.2. No loop(), a função piscarLED() é chamada repetidamente para acender e apagar o LED embutido na placa Arduino a cada segundo. Esta função executa uma ação específica, mas não retorna nenhum valor após completar sua tarefa.

1.2.2.1. O LED embutido (ou LED interno) está configurado no pino 13 do Arduino Uno .

1.3. Exemplo da utilização de uma função sem retorno e com parâmetros:

// Função sem retorno, mas com parâmetros para piscar um LED
void piscarLed(int pinoLED, int intervalo) {
  digitalWrite(pinoLED, HIGH);   // Liga o LED
  delay(intervalo);              // Aguarda um tempo
  digitalWrite(pinoLED, LOW);    // Desliga o LED
  delay(intervalo);              // Aguarda outro tempo
}

void setup() {
  pinMode(13, OUTPUT); // Define o pino 13 como saída
}

void loop() {
  piscarLed(13, 1000); // Chama a função para piscar o LED no pino 13 a cada 1 segundo (1000ms)
}

1.3.1. Em Arduino, uma função sem retorno e com parâmetros é uma função que não retorna nenhum valor após a execução, mas recebe dados ou informações específicas através de parâmetros. 

1.3.2. Nesse exemplo, a função piscarLed() não possui um tipo de retorno especificado (void indica que não retorna nenhum valor). No entanto, ela possui dois parâmetros: pinoLed e intervalo.

1.3.3. Quando a função é chamada no loop(), são passados os valores 13 e 1000 como argumentos para pinoLed e intervalo, respectivamente.

1.3.4. Dentro da função, esses parâmetros são utilizados para determinar qual LED será piscado (no pino 13) e qual será o intervalo de piscamento (1000ms).

2. Utilizando funções COM retorno

2.1. Em Arduino, uma função com retorno é uma função que executa determinadas instruções e retorna um valor específico após a conclusão de suas operações. Ela é definida com um tipo de dado específico para indicar o tipo de valor que será retornado quando a função for chamada.

2.2. Exemplo da utilização de uma função com retorno e sem parâmetros:

// Função com retorno, mas sem parâmetros para retornar um valor fixo
int obterNumero() {
  int numero = 42; // Valor fixo a ser retornado
  return numero;   // Retorna o número 42
}

void setup() {
  // Código de inicialização, se necessário
}

void loop() {
  int valorRetornado = obterNumero(); // Chama a função e armazena o valor retornado
  // Usar o valor retornado, por exemplo, imprimir no monitor serial
  Serial.begin(9600);
  Serial.print("O número retornado é: ");
  Serial.println(valorRetornado);
  
  // Aguarda um tempo antes de repetir o loop
  delay(1000);
}

2.2.1. Nesse exemplo, int é o tipo de retorno da função obterNumero(), indicando que a função retorna um número inteiro.

2.2.2. A função obterNumero() não possui parâmetros entre os parênteses, indicando que ela não requer nenhuma informação para ser executada. No entanto, ela retorna um número inteiro fixo, que neste caso é 42.

2.2.3. No loop principal loop(), a função obterNumero() é chamada e seu valor retornado é armazenado na variável valorRetornado. Em seguida, esse valor é impresso no monitor serial para demonstrar o número retornado pela função.

2.3. Exemplo da utilização de uma função com retorno e com parâmetros:

// Declara variável global  x
int x = 0;

// Função com retorno e com parâmetros para retornar um valor inteiro
int somar(int a, int b) {
  int resultado = a + b;
  return resultado;
}

void setup() {
  // Código de inicialização, se necessário
}

void loop() {  
  int valorRetornado = somar(x, x*3); // Chama a função somar e armazena o valor retornado
  // Usar o valor retornado, por exemplo, imprimir no monitor serial
  Serial.begin(9600);
  Serial.print("O número retornado é: ");
  Serial.println(valorRetornado);

   // Acrescenta +1 em x
   x++;
  
  // Aguarda um tempo antes de repetir o loop
  delay(1000);
}

2.3.1. Uma função com retorno e com parâmetros em Arduino é uma função que aceita informações específicas, conhecidas como parâmetros, e retorna um valor após realizar operações com base nesses parâmetros.

2.3.2. Neste exemplo, int é o tipo de dado de retorno da função somar(), indicando que a função retorna um valor inteiro. Ela aceita dois parâmetros (a e b) do tipo int.

2.3.3. Quando a função é chamada, os valores de a e b são passados como argumentos, cujo o resultado é a soma de a + b.

2.3.4. No loop principal loop(), a função somar() é chamada e seu valor retornado é armazenado na variável valorRetornado. Em seguida, esse valor é impresso no monitor serial para demonstrar o número retornado pela função.

2.3.5. Como definimos os valores de a e b em função da variável x, os valores retornados são variáveis:

3. Documentação oficial

Using Functions in a Sketch  - Usando funções em um Sketch

4. Conclusão

Funções são blocos de código reutilizáveis que permitem organizar e modular seu programa.

No Arduino, elas podem receber parâmetros, executar operações específicas e retornar valores, facilitando a escrita de código mais limpo, legível e eficiente.

Ao usar funções, você simplifica a lógica do programa, promove a reutilização de código e torna mais fácil o desenvolvimento de projetos complexos.

É uma boa prática colocar as definições de funções adicionais no início do código, antes das funções setup() e loop(), para que elas sejam reconhecidas quando o programa principal for executado. Isso ajuda a evitar problemas de referência ou declarações de função ausentes durante a execução do programa.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores