Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

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

Mais conteúdos dessa disciplina