segunda-feira, 30 de abril de 2018

Arduino – #03: Introdução à programação (Funções)

No seguimento do que temos vindo a falar nos últimos tutoriais, iremos agora dar a conhecer as já referidas funções, estas são estruturas mais ou menos complexas que permitem realizar determinadas ações e são reutilizáveis ao longo dos programas.


Função
Uma função é em linhas gerais, uma sequência de comandos que pode ser reutilizada várias vezes ao longo de um programa ou seja são pedaços do código que podem ser chamados sempre que forem necessários. Para criar uma função temos em primeiro lugar que a declarar e definir as suas ações. Em seguida podemos ver o exemplo da função setup do programa Blinck.


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


No exemplo estamos a declarar uma função com o nome setup() que tem como função executar outra função pinMode(), função esta interna do sistema Arduino. A ação de executar os comandos da função previamente declarada é denominada chamada da função. Não teremos de declarar a função pinMode() pois tal como referido esta é uma função interna e já está declarada internamente no caso do Arduino.

Chamada da Função

Chamar uma função significa executar os comandos que foram definidos na sua declaração. Uma vez declarada, uma função pode ser chamada várias vezes no mesmo programa para que os seus comandos sejam executados sempre que necessários. Para chamarmos a função setup(), do exemplo, teremos de utilizar o seguinte comando:
setup();

No entanto, no caso do Arduino, a função setup()  não tem de ser chamada, pois esta faz parte da estrutura base do nosso programa e é chamada automaticamente. Quando compilamos um programa na IDE do Arduino, a função setup() é chamada uma vez e depois é chama a função loop() repetidamente até que o Arduino seja desligado ou reiniciado.

Valor de Retorno

A palavra-chave que vem antes do nome da função na declaração define o tipo do valor de retorno da função. Sempre que uma função é chamada, esta é executada e devolve ou retorna um determinado valor, resultado, esse é o valor de retorno. Tendo de ser definido o tipo de dados que a função vai retornar, este pode ser qualquer um dos tipos de dados citados anteriormente. No caso da nossa função setup(), o tipo de retorno é void, o que significa que a função não retorna nada.

Para exemplificar, vamos criar uma função que retorna o resultado de uma operação matemática, por exemplo um número inteiro. Para retornar um valor, nós utilizamos o comando return:


    int soma( )
    {
                 x=1+2;
                 return  x;
    }


Quando chamada, a função soma() acima definida esta retorna sempre o valor de x e este pode ser atribuído a uma variável. Por exemplo:


    y = soma( );


Após ser declarada a função soma() e executada "chamar", o comando de atribuição acima, vai atribuir à variável  y o resultado da soma logo y irá ficar como o valor 3.

Parâmetros

Um outro recurso importante de uma função são os parâmetros. Eles servem para enviar algum dado para a função quando esta é chamada. Vamos criar um exemplo de uma função que recebe dois parâmetros e que tem como função somar esses mesmos parâmetros e retornar o resultado da sua soma.


    int soma(int a, int b)
    {
                  return a + b;
    }


Acabamos de definir uma função chamada soma(), que aceita dois números inteiros como parâmetros. Sendo que cada um deste é uma variável, e neste caso escolhemos a e b como nome para estas variáveis. Como se pode facilmente entender estes parâmetros funcionam como variável que podemos utilizar dentro da função. Sempre que chamarmos a função soma(), teremos de fornecer estes dois parâmetros, variáveis. O comando return vai simplesmnet devolver a soma "a + b". Vamos então somar 1 + 2 e atribuir o resultado a uma variável x.


    x = soma(1, 2);


Após realizarmos a chamada da função soma() acima referida com os parâmetros 1 e 2, a variável x irá conter o resultado da sua soma o valor 3.

Comentários

Um comentário é um pedaço de texto dentro do programa que serve apenas para explicar (documentar) o código, este não é executado nem tem qualquer peso sobre o programa. Sendo muito frequente verem-se pedaços de código, comandos comentados para que estes não sejam executados por algum motivo, sendo que nestes casos, dizemos que o código foi comentado.

Na linguagem C/C++, um comentário pode ser escrito de duas formas:
  1. Comentário de linha: inicia-se com os caracteres //, tornando todo o resto da linha atual num comentário.
  2. Comentário de bloco: inicia-se com os carateres /* e termina com os carateres */. Todo o texto entre o início e o término se torna um comentário, podendo ser composto de várias linhas.
Para facilitar a visualização, os ambientes de desenvolvimento geralmente mostram as linhas comentadas a cores diferente das não comentadas. No caso do Arduino IDE, por exemplo, os comentários são exibidos na cor cinza. No exemplo seguinte vamos ver o código Blink com inúmeros comentários que explicam cada um dos comandos.

 /* 
 Programação para Arduino - #3 (Funções)
 Programa de exemplo: Blink
*/


 //Aqui as duas linhas anteriores de texto estão comentadas logo, não são executadas.

 /* 
 Declaração da variável "led"
 Indica que o LED está conectado no pino digital 13 do Arduino (D13).
 */

 int led = 13;

/* Já aqui temos as duas primeiras linhas de texto comentadas o que faz com que não sejam  executadas e uma terceira linha não comentada que é a definição da variável led do tipo int  com o valor 13.*/

 /*
 Declaração da função setup()
 Esta função é chamada apenas uma vez, quando o Arduino é ligado ou reiniciado.
 */
 void setup()
 {
  // Chama a função pinMode() que configura um pino como entrada ou saída
  pinMode(led, OUTPUT); // Configura do LED como saída
 }

 /*
 Declaração da função loop()
 Após a função setup() ser chamada, a função loop() é chamada repetidamente até
 o Arduino ser desligado.
 */

 void loop()
 {
   // Todas as linhas a seguir são chamadas de função com passagem de parâmetros
   // As funções são executadas em sequência para fazer o LED acender e apagar
   digitalWrite(led, HIGH); // Atribui nível lógico alto ao pino do LED, acendendo-o
   delay(1000);             // Espera 1000 milissegundos (um segundo)
   digitalWrite(led, LOW);  // Atribui nível lógico baixo ao pino do LED, apagando-o.
   delay(1000);             // Espera 1000 milissegundos (um segundo)
   // Após terminar a função loop(), ela é executada novamente repetidas vezes,
   // e assim o LED continua piscando.

 }




Considerações Finais

As funções são das estruturas mais importantes na construção de um programa não só para o Arduino mas na programação em geral, pois estas permitem realizar certas ações de uma forma controlada e sempre que necessária permitindo desta forma reaproveitar código, evitando assim a repetição de código e tornando os nossa programas mais organizados e eficientes. 



Esperamos que este artigo tenha sido útil e se gostaram comentem e partilhem. Alguma dúvida ou questão deixem em comentário ou utilizem o formulário de contatos.


Um bom dia em nome da TecnoDomos.


Conteúdo redigido ao abrigo do novo Acordo Ortográfico

Sem comentários:

Enviar um comentário