Fundamentos de Programação para Arduino
Programação pode ser definida como o processo de projetar, escrever, verificar e manter um código ou programa que comande as ações de uma máquina, como computador, celular, microcontrolador, entre outras. Um código, programa ou sketch – como são denominados os códigos em Arduino, são compostos por um conjunto de instruções sequenciais definido pelo programador que descrevem as tarefas que a máquina deve realizar.
Os programas para microcontroladores compatíveis com o projeto Arduino são implementados tendo como referência a linguagem de programação C++, mantendo preservada sua sintaxe clássica de declaração de variáveis, nos operadores, nas estruturas e em muitas outras características.
Antes de aprendermos a linguagem de programação do Arduino devemos conhecer alguns elementos básicos que compõem um Sketch. Desta forma, a seguir apresentaremos a estrutura de um sketch, variáveis, funções e bibliotecas.
ESTRURURA DE UM SKETCH
Todos os Sketch Arduino devem ter a estrutura composta pelas funções setup() e loop(), conforme ilustra a Figura 1 a seguir.
A função setup() é executada apenas uma vez na inicialização do programa, e é nela que você deverá descrever as configurações e instruções gerais para preparar o programa antes que o loop principal seja executado. Em outras palavras, a função setup() é responsável pelas configurações iniciais da placa microcontroladora, tais como definições de pinos de entrada e saída, inicialização da comunicação serial, entre outras.
A função loop() é a função principal do programa e é executada continuamente enquanto a placa microcontroladora estiver ligada. É nesta função que todos os comandos e operações deverão ser escritos.
VARIÁVEIS
As variáveis são expressões que podemos utilizar em programas para nomear e armazenar um dado para uso posterior, como dados de um sensor ou um valor calculado. Antes de seres utilizadas, todas as variáveis devem ser declaradas, definindo seu tipo e, opcionalmente, definindo seu valor inicial. Alguns tipos de variáveis encontram-se listadas na Tabela 1:
Tipo | Descrição |
char | Utilizado para armazenar um valor de caractere. |
byte | Usado para armazenar um número entre 0 e 255. |
int | Utilizado para armazenar números inteiros. |
bool | Empregado para armazenar dois valores: true (verdadeiro) ou false (falso). |
float | Armazena números decimais que ocupam 32 bits (4 bytes). |
double | Armazena números decimais que ocupam 64 bits (8 bytes). |
void | Usada apenas em declarações de funções |
String | Utilizada para armazenar cadeias de texto. |
A declaração de uma variável pode ser melhor entendida com o exemplo a seguir. Neste caso, declaramos uma variável com nome a do tipo int recebendo o valor 10, uma variável com nome b do tipo float recebendo o valor 3,14, e uma variável de nome C do tipo char. Quando as variáveis são declaradas antes da função setup(), significa que elas são variáveis globais, que podem ser usada em todas ao longo de todo o programa. Por sua vez, as variáveis declaradas em funções específicas, como no loop(), são variáveis locais e só podem ser usadas dentro da sua função de origem.
FUNÇÕES
Funções são blocos de instruções que podem ser chamados em qualquer parte do seu Sketch. A principal motivação para o uso de funções em um programa é quando necessitamos executar a mesma ação várias vezes. Desta forma, a segmentação do código em funções permite a criação de trechos de código modulares que executam uma tarefa definida e retornam à área do código a partir da qual a função foi chamada.
O uso de funções possui várias vantagens, entre elas:
• As funções ajudam o programador a manter o sketch organizado;
• As funções codificam uma ação em um só lugar, de forma que o trecho do código precise ser pensado e escrito apenas uma vez;
• Reduz as chances de erros na modificação quando o código precisa ser alterado;
• Facilitam a reutilização de código em outros programas;
• Tornam o código mais legível.
As duas funções principais na criação de um sketch no Arduino são void setup() e void loop(), mas existem algumas outras funções predefinidas para controlar uma placa microcontroladora, que podem ser consultadas no seguinte link:
https://www.arduino.cc/reference/pt/#functions
BIBLIOTECAS
As bibliotecas são um conjunto de instruções desenvolvidas para executar tarefas específicas relacionadas a um determinado dispositivo. O uso de bibliotecas facilita a conexão a sensores, a uma tela, a um módulo, etc., além de poupar tempo do programador.
Algumas bibliotecas já vêm instaladas com o Arduino IDE, outras podem ser incluídas a partir de download e você também pode criar a sua própria. Muitas vezes o fabricante de um sensor, módulos, atuador, etc. fornece uma biblioteca para facilitar a programação.
OPERADORES
Operadores aritméticos: Os operadores aritméticos são as representações que utilizamos para realizar as operações aritméticas básicas, como somar, subtrair, dividir, multiplicar, entre outras.
Operadores de comparação: Os operadores de comparação, como o próprio nome diz, compara dois valores retornando verdadeiro (true) ou falso (false). Observe na Tabela 5 a seguir os operadores de comparação.
Operadores booleanos: Os operadores booleanos são utilizados para testes lógicos entre elementos em um teste condicional. Assim como os operadores de comparação, os operadores booleanos também retornam verdadeiro (true) e falso (false) conforme o resultado dos testes.
Operadores de incremento e decremento: Os operadores de incremento e decremento são operadores unitários utilizados com a finalidade de adicionar ou subtrair em uma unidade ao valor de uma variável. O operador de incremento é representado por ++ e o de decremento por –. Os operadores de incremento e decremento podem ser pré-fixos ou pós-fixos dependendo de serem posicionados antes ou depois do nome da variável a ser implementada ou decrementada.
Para saber mais sobre operadores e suas sintaxes acesse:
https://www.arduino.cc/reference/pt/#structure
ESTRUTURA DE CONTROLE DE FLUXO
As estruturas de controle são blocos de programação que analisam variáveis e decidem como o programa deve se comportar com base em parâmetros pré-definidos. Em outras palavras, a estrutura de controle de fluxo determina como o programa responderá diante de certas condições ou parâmetros.
A Figura 3 ilustra um exemplo de estrutura de controle, em que dependendo do resultado obtido na condicional (verdadeiro ou falso) o programa executará diferentes instruções.
Neste caso, o resultado da condicional for verdadeiro o programa executará a Instrução 1 e, em sequência, a instrução 2. No entanto, se o resultado da condicional for falso apenas a Instrução 2 será executada pelo programa.
IF
O comando if (se) é uma estrutura de controle de fluxo de seleção. Usamos esse comando para checar uma condição. Se a condição for satisfeita (verdadeiro) uma lista de instrução delimitada por {} (chaves) serão executadas. No entanto, se a condição não for satisfeita (falso) esta lista de instruções não será executada e o programa seguirá a sequência de comandos escritos depois do if. A sintaxe do comando if na programação Arduino é:
IF…ELSE
A combinação dos comandos if…else permite maior controle sobre o fluxo de código que o comando if, por possibilitar que múltiplos testes sejam agrupados. O comando else (senão) será executado se a condição do comando if (se) resultar em falso. A sintaxe dos comandos if…else na programação Arduino é:
FOR
O comando for (para) é uma estrutura de controle de fluxo de repetição. Este comando permite que certo trecho do código seja executado um determinado número de vezes. O comando for é útil para qualquer operação repetitiva e é usado frequentemente com vetores para operar em coleções de dados. A sintaxe do comando for é a seguinte:
SWITCH…CASE
Da mesma forma que o comando if, o comando switch…case (selecione…caso) é uma estrutura de controle de fluxo de seleção. Este comando permite especificar códigos diferentes para serem executados em várias condições, funcionando da seguinte maneira: um comando switch compara o valor de uma variável aos valores especificados nos comandos case. Quando um comando case é encontrado, cujo valor é igual ao da variável, o código para esse comando case é executado. A sintaxe do comando switch…case é a seguinte:
WHILE
O while (enquanto) é uma estrutura de controle de fluxo de repetição. As instruções contidas em um while serão repetidas continuamente, e infinitamente, até que a sua condicional se torne falsa. Em outras palavras, as instruções contidas no código while serão executadas enquanto a condição for satisfeita (verdadeiro). A forma geral do while é:
DO…WHILE
A estrutura do…while (faça…enquanto) funciona de forma semelhante às estruturas while e for, com exceção de a condição ser testada ao final do loop, de tal modo que as instruções contidas no do…while serão executadas pelo menos uma vez. A sintaxe do comando do…while é a seguinte:
Espero que tenham gostado deste tutorial. Em caso de dúvidas deixe seu comentário abaixo.
Att.,
Carol Correia Viana
Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.