Prévia do material em texto
ROBÓTICA
Flávio Luiz Puhl Junior
Estrutura do Arduino
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Reconhecer os comandos em linguagem C para programar o Arduino.
� Aplicar a estrutura do código em C utilizando sketches.
� Analisar o uso das bibliotecas no auxílio da programação do Arduino.
Introdução
Quando falamos de Arduino, geralmente a primeira imagem que vem
à nossa cabeça é a famosa placa azul do Arduino Uno, talvez devido à
facilidade em fazer propaganda com elementos físicos e visuais. Mas não
devemos esquecer que o hardware é apenas metade do nosso recurso.
A outra metade, e não menos importante, é o software. Por meio do sof-
tware daremos inteligência e utilidade para as placas de desenvolvimento,
programando-as com comandos específicos.
Neste capítulo, você vai aprender a utilizar a IDE (Integrated Develop-
ment Environment) do Arduino e suas sketches. Também irá aprender a
utilizar os comandos mais usuais e a estruturar o código da programação,
além de ver como as bibliotecas podem contribuir para o seu código.
Ambiente de programação e comandos
O ambiente de desenvolvimento integrado (IDE, Integrated Development
Environment) do Arduino é um aplicativo disponível para Windows, MacOS
e Linux, desenvolvido em linguagem de programação Java. Ele é usado para
escrever e carregar programas em placas compatíveis com Arduino e outras
placas de desenvolvimento.
O Arduino IDE é um ambiente simples e funcional para desenvolvimento
do código a ser carregado no Arduino. Existem outros ambientes disponíveis
para utilização, como a programação visual utilizando XOD ou a ferramenta
da Microsoft Visual Studio, mas focaremos no uso do Arduino IDE.
Arduino IDE
Conforme você pode ver na Figura 1, a IDE tem uma interface simples e
funcional com os recursos necessários para programar o Arduino.
Figura 1. Arduino IDE versão 1.8.5
Menu
Veri�ca
o código
Veri�ca o código,
compila e faz
upload para
o hardware
Mensagem
para o
usuário
Hardware
conectado e
porta serial
Escreva aqui
seu código
Gerenciamento
de abas
Monitor
serial
Novo código Abre Salva
Entre as mais diversas características da IDE, as que se destacam por sua
utilidade são as seguintes.
� Monitor serial: permite enviar dados da execução do código pela
porta serial e acompanhar a execução do código, servindo, inclusive,
para depuração de rotinas, verificação de funcionamento, entrada de
dados pelo usuário, etc. No menu é possível encontrar outra ferramenta
semelhante, que foi adicionada nas últimas versões do programa: Plotter
Serial. Nela é possível colocar os dados numéricos em forma de gráfico
temporal e acompanhar as variações de modo mais visual.
� Gerenciamento de abas: um recurso pouco difundido, mas muito útil
conforme o código vai aumentando em complexidade, é a utilização de
abas. Com elas é possível segmentar o código, colocando uma porção
Estrutura do Arduino2
em cada aba e assim manter uma melhor organização. Você pode, por
exemplo, manter o código principal em uma aba, cálculos em outra,
atualização do display em outra etc.
� Exemplos: uma das grandes vantagens da utilização deste ambiente
é que ele acompanha uma série de exemplos de utilização dos mais
diferentes recursos. Então, se houver alguma dúvida, basta abrir o
exemplo e fazer o upload no seu Arduino para verificar o funcionamento.
As outras funções disponíveis são semelhantes às nativas de sistemas
baseados em Windows, e, portanto, de uso intuitivo, não sendo detalhadas
neste material.
Linguagem de programação do Arduino
A linguagem de programação utilizada no Arduino é baseada na linguagem C,
desenvolvida nos anos 1970 pela Bell Laboratories e que é muito tradicional
e conhecida, porém com alguns facilitadores para interpretação humana.
A facilidade de programação do Arduino é que o código que você irá
escrever, incluindo as sintaxes, estruturas, operadores, etc., são, fundamen-
talmente, idênticas às utilizadas em C, mas o Arduino possui, nativamente,
algumas funções que descomplicam a criação do código, como pinMode(),
digitalWrite() e delay() (EVANS, 2011). Observe a Figura 2.
Figura 2. (a) Código-fonte em C; (b) código-fonte utilizando a sintaxe do
Arduino.
Fonte: (Evans, 2011).
(a) (b)
3Estrutura do Arduino
Os dois códigos apresentados possuem exatamente a mesma funcionalidade,
que é piscar o LED conectado ao pino 13 da placa Arduino, e os dois podem
ser compilados e gravados em um Arduino utilizando a IDE. A diferença
é que o código escrito em linguagem C é razoavelmente mais complexo de
interpretar do que o outro código.
A lista completa de funções disponíveis para programação do Arduino encontra-se
no link a seguir.
https://qrgo.page.link/KBjk
O código é composto por uma sequência de comandos. Alguns desses
comandos são os seguintes (MONK, 2017).
Variáveis: representam uma região da memória usada para armazenar deter-
minada informação. Essa informação pode ser, por exemplo, um número, um
caractere ou uma sequência de texto. Para podermos usar uma variável em
um programa Arduino, precisamos fazer uma declaração de variável, como
int led;. Neste caso está sendo declarada uma variável tipo int chamada led.
� Tipo de dados: o tipo de dado de uma variável significa a natureza
da informação que se pode armazenar naquela variável. Em C, assim
como em muitas linguagens de programação, é obrigatório definir o
tipo de dado no momento da declaração da variável, como o exemplo
anterior. Veja a seguir alguns tipos de dados.
■ boolean: valor verdadeiro ou falso.
■ char: um caractere.
■ int: número inteiro de 16 bits com sinal (−32768 a 32767).
■ long: número inteiro de 32 bits com sinal (−2147483648 a 2147483647).
■ float: número real de precisão simples (ponto flutuante).
■ double: número real de precisão dupla (ponto flutuante).
■ string: sequência de caracteres.
Estrutura do Arduino4
Atribuição: atribuir um valor a uma variável significa armazenar o valor
nela para posterior uso. O comando de atribuição em C é =. Para atribuirmos
o valor 13 à variável led, devemos fazer assim: led = 13;. Os valores fixos
usados no programa, como o valor 13, são chamados de constantes, pois o
seu valor não muda.
Operadores: é um conjunto de um ou mais caracteres que serve para operar
sobre uma ou mais variáveis ou constantes. Alguns dos operadores mais
utilizados, mas não somente, são os seguintes.
� Aritméticos
■ + : adição
■ − : subtração
■ * : multiplicação
■ / : divisão
� Lógicos
■ && : operador e
■ || : operador ou
■ == : igualdade
■ != : diferente
■ > ou >= : maior ou maior e igual
■ < ou <= : menor ou menor e igual
Funções: também conhecidas como sub-rotina, é 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, é necessário fazer uma declaração de função.
Uma função é declarada conforme a Figura 3.
Figura 3. Declaração de função.
5Estrutura do Arduino
Neste caso está sendo declarada a função void setup(), cujo conteúdo está
compreendido entre as chaves {}. Para executar esta função, ou sub-rotina,
basta colocar o comando setup(); em seu código. Como vimos, o Arduino
possui uma série de funções disponíveis para facilitar a programação.
Comentários: são trechos de texto no código que servem apenas para docu-
mentar, sem executar qualquer tipo de comando no programa. Os comentários
podem ser utilizados também para desabilitar comandos no código. Nesse
caso, dizemos que o código foi comentado.
Os comentários pode ser de duas formas:
� comentário de linha — inicia com os caracteres //, tornando todo o resto
da linha atual em um comentário;
� comentário de bloco — inicia com os caracteres /* e termina com os
caracteres */. Todo o texto entre esses caracteres se torna um comentário.
Escolha nomes que facilmente identifiquem as variáveis. Veja a seguir algumas regras
e dicas que devem ser seguidas.
�Evitar iniciar o nome da variável com letra maiúscula e nunca iniciar com dígitos
numéricos.
� Não utilizar caracteres especiais (*,%,$, etc.).
� Não utilizar palavras usadas como parâmetro (HIGH, LOW, PULLUP etc.).
� Evitar o uso de nomenclaturas como a, b, v1, h7 etc., pois não ajudam a entender
facilmente o código.
� Se a variável tiver mais de uma palavra, utilizar maiúscula na primeira letra das pala-
vras ou underline entre as palavras — lembrando que não é possível utilizar espaço.
� Não utilizar pontuação nos nomes das variáveis.
Estruturação do código
Para criarmos um código no Arduino, precisamos seguir uma sequência lógica
inicial. O código pode ser identificado em quatro distintas partes, conforme
a Figura 4.
Estrutura do Arduino6
Figura 4. Código estruturado para Arduino.
A primeira parte, 1, é onde devemos incluir as bibliotecas auxiliares do
código. Dependendo das funções e do hardware envolvido no projeto, pode
ser necessário incluir bibliotecas especializadas. A sintaxe de declaração das
bibliotecas deve ser #include<nome da biblioteca>.
A segunda parte, 2, é onde geralmente se declara as variáveis do código.
Na verdade, as variáveis podem ser declaradas em qualquer ponto do código,
inclusive dentro da rotina principal, mas a boa prática recomenda declará-las
neste trecho, inclusive incluindo comentários pertinentes à funcionalidade de
cada variável em caráter de documentação.
A terceira parte do código, 3, refere-se à configuração preliminar. Essa
função é executada somente uma vez na inicialização do código. Aqui é
recomendado declarar a funcionalidade dos pinos, configurações iniciais etc.
7Estrutura do Arduino
A quarta parte, 4, é onde consta a rotina principal, que será executada
infinitamente enquanto o sistema estiver energizado. É aqui que seu código
deve ser inserido por meio do uso de comandos e estruturas.
Somente utilizando comandos de controle é impossível criar um código
completamente funcional — precisamos também de rotinas e decisões, pois, a
partir delas, o código poderá tomar decisões baseadas em informações obtidas
durante a execução do programa. Para a implementação de rotinas e decisões,
utilizamos as estruturas de controle.
Estruturas de controle são blocos de instruções que alteram o fluxo de
execução do código de um programa. Com elas é possível executar comandos
diferentes de acordo com uma condição ou repetir uma série de comandos
várias vezes, por exemplo (EVANS, 2011).
As estruturas de controle mais utilizadas são as seguintes.
while: é um controle que executa um conjunto de comandos repetidas vezes
enquanto determinada condição for verdadeira; while em inglês significa
“enquanto”. Ele segue o formato da Figura 5.
Figura 5. Estrutura de controle while.
if: é uma das estruturas mais básicas de programação em geral. If significa
“se” em inglês. Ele verifica uma expressão e, apenas se ela for verdadeira,
executa um conjunto de comandos. Seu formato é apresentado na Figura 6.
Figura 6. Estrutura de controle if.
Estrutura do Arduino8
if-else: o if-else pode ser visto como uma extensão do comando if. Else em
inglês significa “caso contrário”, e o comando faz isto: “se isso for verdadeiro,
então faça aquilo; caso contrário, faça outra coisa”. Veja a Figura 7.
Figura 7. Estrutura de controle if-else.
for: o comando for nada mais é do que um while acrescido de parâmetros de
inicialização e finalização. É necessário definir o seguinte.
� Condição: é uma expressão verificada repetidamente; enquanto ela for
verdadeira, os comandos entre {} continuam sendo executados.
� Inicialização: executado apenas uma vez no início, este comando
define a condição inicial.
� Finalização: é um comando executado repetidas vezes ao final de cada
repetição dos comandos entre {}.
Na Figura 8, o comando inicia a vaiável i em 0 (i=0), executa o código entre
{} enquanto i for menor ou igual a 5 (i<=5) e incrementa i em uma unidade
a cada iteração (i++).
Figura 8. Estrutura de controle for.
9Estrutura do Arduino
Outras funções de estrutura de controle podem ser localizadas nas literaturas ou no
link a seguir, porém são estruturas derivadas das expostas aqui.
https://qrgo.page.link/KBjk
Bibliotecas
As bibliotecas são um recurso adicional e essencial em qualquer nível de
programação. Geralmente, elas são desenvolvidas com objetivos bem espe-
cíficos, como para a utilização de determinado sensor ou display, ou para
fazer cálculos específicos.
Uma biblioteca é uma coletânea de funções com o objetivo de realizar tarefas
específicas. O Arduino possui algumas bibliotecas padrão, como digitalWrite()
ou delay() (EVANS, 2011). Vejamos um exemplo do comando digitalWrite():
o código por trás desse comando é demonstrado na Figura 9 (POSH, 2019).
Figura 9. Código-base do comando digitalWrite().
Estrutura do Arduino10
Imagine que, a cada necessidade de definir o estado do pino de saída digital,
tivéssemos que digitar todo o código anterior. Seria uma total perda de tempo,
além de muito desgastante. O uso dessa biblioteca ajuda muito — basta utilizar
a linha de código digitalWrite(pino, valor), que ela executa a tarefa por nós.
Para utilizar uma biblioteca em um sketch do Arduino, você precisará infor-
mar ao compilador qual biblioteca quer utilizar. Para isto, no início do código
no sketch, você deve adicionar a seguinte linha: #include<NomedaBiblioteca.
h>. Isto irá fazer com que o compilador acrescente esta biblioteca nos dados
enviados para o Arduino.
Pode parecer que essas funções são simples comandos para acionar uma
saída digital, por exemplo, mas, na verdade, são várias linhas de código que,
quando executadas, acionam a saída digital, porém tudo isso está condensado
em uma única função.
As bibliotecas padrão do Arduino, que não precisam ser declaradas desse
modo porque são automaticamente incluídas, são as seguintes (ARDUINO,
2019):
� EEPROM: usada para ler e gravar dados em uma memória EEPROM
no Arduino. No Uno, a EEPROM tem o tamanho de 1024 bytes e, no
Mega, de 4096 bytes.
� Ethernet: permite conectar o Arduino à internet ou à rede local usando
um Ethernet Shield.
� Firmata: permite a comunicação entre o Arduino e aplicações em um
computador via protocolo de comunicação serial.
� GSM: conecta a uma rede GSM/GPRS usando um shield GSM.
� LiquidCrystal: com esta biblioteca podemos controlar displays de
cristal líquido (LCD).
� SD: biblioteca muito importante, usada para que seja possível escrever
e ler dados em cartões de memória SD/SDHC.
� Servo: controla motores servo.
� SPI: comunicação com dispositivos usando o barramento SPI (Serial
Peripheral Interface).
� SoftwareSerial: permite a comunicação serial usando os pinos digitais
da placa.
� Stepper: controla motores de passo.
� TFT: permite desenhar imagens e formas e escrever texto em uma
tela TFT.
� WiFi: permite conexão à rede local e à internet por meio de um shield
WiFi.
11Estrutura do Arduino
� Wire: permite enviar e receber dados por meio de uma interface TWI/
I2C (interface a dois fios) em uma rede de dispositivos ou sensores.
Embora faça parte do grupo de bibliotecas que é instalada com o Arduino
IDE, a biblioteca LiquidCrystal não está adicionada ao compilador, então
é necessário incluí-la no código com a linha #include<LiquidCrystal.h>.
Com isso podemos utilizar a série de comandos que esta biblioteca disponi-
biliza para configurar e utilizar os displays no nosso projeto. Veja a Figura 10.
Figura 10. Comandos de configuração de um display LCD.
Outras bibliotecas que não são distribuídas por padrão com o Arduino
IDE podem ser adicionadas conforme explicado anteriormente. Elas oferecem
funções adicionais a bibliotecas existentes ou novas funcionalidades não
presentes em bibliotecas padrão, permitindo estender o uso do Arduino de
forma praticamente ilimitada.
O Arduino tem muitas ferramentas de simulação, tanto on-line como off-line. Essas
ferramentas são muito úteis, poispossibilitam testar seu código sem a necessidade de
ter fisicamente o hardware (placa Arduino, displays, servomotores etc.) e assim avaliar
com muita precisão o resultado antes de investir financeiramente no projeto, além
de auxiliar com a documentação.
Estrutura do Arduino12
Uma ferramenta online de simulação que está sendo muito utilizada atualmente
é a Tinkercad, fornecida gratuitamente pela Autodesk. Essa ferramenta tem muitos
recursos de simulação de hardware, além de compilar e mostrar em tempo real a
execução do código.
Ela tem um recurso muito útil na depuração de códigos (e que não existe na Arduino
IDE), que são os breakpoints. Os breakpoints permitem interromper a execução do
código em determinada linha de código para você poder observar as condições e
variáveis e assim corrigir falhas na programação.
ARDUINO. Libraries. [S. l.], 2019. Disponível em: https://www.arduino.cc/en/reference/
libraries. Acesso em: 19 maio 2019.
EVANS, B. Beginning Arduino Programming. EUA: Apress, 2011.
MONK, S. Programação com Arduino: começando com sketches. Porto Alegre: Bookman,
2017. (Série Tekne).
POSH, M. Hands-on embedded programming with C++17. Birmingham: Packt Publishing,
2019.
Leitura recomendada
SEBESTA, R. W. Conceitos de linguagens de programação. Porto Alegre: Bookman, 2018.
13Estrutura do Arduino