Académique Documents
Professionnel Documents
Culture Documents
Introduo
Computador
Programa de Computador
Linguagem de Programao
Algoritmo (Programa)
Varivel
o
Tipo de Dado
Atribuio
Operador
Funo
o
Chamada de Funo
Valor de Retorno
Parmetros
Comentrios
Estruturas de Controle
While
For
If
If-Else
Bibliotecas
Concluso
Introduo
O objetivo deste tutorial apresentar, de uma forma simples e rpida, o bsico de
programao para que voc possa comear a utilizar o Arduino em seus projetos,
sem ter que ler muitos livros ou artigos sobre programao. O tema
"desenvolvimento de software" como um todo muito abrangente, ento vamos
focar apenas nos conceitos que so importantes para Arduino e sistemas
embarcados em geral.
Existem muitas outras coisas para se aprender na parte de software que no
vamos abordar aqui. No final do artigo ns colocamos links que voc pode seguir
para aprender conceitos mais avanados ou conceitos de software que no so
muito utilizados na programao de sistemas embarcados.
Vamos comear explicando como funciona um computador (lembre-se que o
Arduino , no fundo, um computador).
Computador
Um computador , de forma simplificada, uma mquina que processa instrues.
Essas instrues so processadas no "crebro" do computador, que se
chama microprocessador. Todo computador possui pelo menos um
microprocessador. O Arduino, por exemplo, nada mais do que um computador
muito pequeno, e ele utiliza um microprocessador do modelo ATmega. Alguns
microprocessadores,
como
o
ATmega,
tambm
so
chamados
de microcontroladores.
Programa de Computador
Um programa de computador, ou software, uma sequncia de instrues que
so enviadas para o computador. Cada tipo de microprocessador (crebro)
entende um conjunto de instrues diferente, ou seja, o seu prprio "idioma".
Tambm chamamos esse idioma de linguagem de mquina.
As linguagens de mquina so, no fundo, as nicas linguagens que os
computadores conseguem entender, s que elas so muito difceis para os seres
humanos entenderem. por isso ns usamos uma coisa chamada linguagem de
programao.
Linguagem de Programao
Ns seres humanos precisamos converter as nossas idias para uma forma que
os computadores consigam processar, ou seja, a linguagem de mquina. Os
computadores de hoje (ainda) no conseguem entender a linguagem natural que
ns usamos no dia a dia, ento precisamos de um outro "idioma" especial para
instruir o computador a fazer as tarefas que desejamos. Esse "idioma" uma
linguagem de programao, e na verdade existem muitas delas.
Essas linguagens de programao tambm so chamadas de linguagens de
programao de alto nvel. A linguagem de programao utilizada no Arduino a
linguagem C++ (com pequenas modificaes), que uma linguagem muito
tradicional e conhecida. Essa a linguagem que utilizaremos ao longo deste
tutorial.
Para converter um programa escrito em uma linguagem de alto nvel para
linguagem de mquina, ns utilizamos uma coisa chamada compilador. A ao de
converter um programa para linguagem de mquina chamada compilar. Para
compilar
um
programa,
normalmente
se
utiliza
um ambiente
de
desenvolvimento (ou IDE, do ingls Integrated Development Environment), que
um aplicativo de computador que possui um compilador integrado, onde voc pode
escrever o seu programa e compil-lo. No caso do Arduino, esse ambiente de
desenvolvimento o Arduino IDE.
O texto contendo o programa em uma linguagem de programao de alto nvel
tambm conhecido como o cdigo fonte do programa.
Algoritmo (Programa)
Um algoritmo, ou simplesmente programa, uma forma de dizer para um
computador o que ele deve fazer, de uma forma que ns humanos conseguimos
entender facilmente. Os algoritmos normalmente so escritos em linguagens de
programao de alto nvel. Isso se aplica a praticamente qualquer computador,
inclusive o Arduino, onde um algoritmo tambm conhecido como sketch. Para
simplificar, a partir de agora ns vamos nos referir aos algoritmos, programas ou
sketches simplesmente como "programas".
Um programa composto de uma sequncia de comandos, normalmente escritos
em um arquivo de texto. Para este tutorial, vamos usar como base os comandos
do programa mais simples do Arduino, o Blink, que simplesmente acende e apaga
um LED, e vamos destrinch-lo ao longo do tutorial. Veja abaixo o cdigo fonte do
Blink:
int led = 13;
void setup() {
pinMode(led, OUTPUT);
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Varivel
Uma varivel um recurso utizado para armazenar dados em um programa de
computador. Todo computador possui algum tipo de memria, e uma varivel
representa uma regio da memria usada para armazenar uma determinada
informao. Essa informao pode ser, por exemplo, um nmero, um caractere ou
uma sequncia de texto. Para podermos usar uma varivel em um programa
Arduino, ns precisamos fazer uma declarao de varivel, como por exemplo:
int led;
Nesse caso estamos declarando uma varivel do tipo int chamada led. Em
seguida ns falaremos mais sobre o tipo de dado de uma varivel.
Tipo de Dado
O tipo de dado de uma varivel significa, como o prprio nome diz, o tipo de
informao que se pode armazenar naquela varivel. Em muitas linguagens de
programao, como C++, obrigatrio definir o tipo de dado no momento da
declarao da varivel, como vimos na declarao da varivel led acima. No caso
dos mdulos Arduino que usam processador ATmega, os tipos mais comuns de
dados que utilizamos so:
boolean:
char:
um caractere
byte:
int:
unsigned int:
long:
unsigned long:
float:
double:
string:
sequncia de caracteres
void:
Para conhecer todos os tipos de dado suportados pelo Arduino, veja a seo "Data
Types" nessa pgina.
Atribuio
Atribuir um valor a uma varivel significa armazenar o valor nela para usar
posteriormente. O comando de atribuio em C++ o =. Para atriburmos o
valor 13 varivel led que criamos acima, fazemos assim:
led = 13;
O objetivo dessa linha de cdigo dizer que o pino 13 do Arduino ser utilizado
para acender o LED, e armazenar essa informao para usar depois ao longo do
programa.
Os valores fixos usados no programa, como o valor 13 acima, so chamados
de constantes, pois, diferentemente das variveis, o seu valor no muda.
Operador
Um operador um conjunto de um ou mais caracteres que serve para operar
sobre uma ou mais variveis ou constantes. Um exemplo muito simples de
operador o operador de adio, o +. Digamos que queremos somar dois nmeros
e atribuir a uma varivel x. Para isso, fazemos o seguinte:
x = 2 + 3;
ir conter o valor 5.
Operadores aritmticos:
+:
adio ("mais")
-:
subtrao ("menos")
*:
multiplicao ("vezes")
/:
Operadores lgicos:
o
&&:
conjuno ("e")
||:
disjuno ("ou")
==:
!=:
!:
negao ("no")
>:
"maior que"
<:
"menor que"
>=:
<=:
Operadores de atribuio:
o
=:
Funo
Uma funo , em linhas gerais, uma sequncia de comandos que pode ser
reutilizada vrias vezes ao longo de um programa. Para criar uma funo e dizer o
que ela faz, ns precisamos fazer uma declarao de funo. Veja como uma
funo declarada no nosso programa de exemplo:
void setup() {
pinMode(led, OUTPUT);
}
Aqui estamos declarando uma funo com o nome setup(). O que ela faz
executar os comandos de uma outra funo pinMode(). A ao de executar os
comandos de funo previamente declarada denominada chamada de funo.
Ns no precisamos declarar a funo pinMode() porque ela j declarada
automaticamente no caso do Arduino.
Chamada de Funo
Chamar uma funo significa executar os comandos que foram definidos na sua
declarao. Uma vez declarada, uma funo pode ser chamada vrias vezes no
mesmo programa para que seus comandos sejam executados novamente. Para
chamarmos a nossa funo setup(), por exemplo, ns usaramos o seguinte
comando:
setup();
Valor de Retorno
A palavra chave que vem antes do nome da funo na declarao define o tipo
do valor de retorno da funo. Toda vez que uma funo chamada, ela
executada e devolve ou retorna um determinado valor - esse o valor de retorno,
ou simplesmente retorno da funo. O valor de retorno precisa ter um tipo, que
pode ser qualquer um dos tipos de dados citados anteriormente. No caso da nossa
funo setup(), o tipo de retorno void, o que significa que a funo no retorna
nada.
Para exemplificar, vamos criar uma funo que retorna alguma coisa, por exemplo
um nmero inteiro. Para retornar um valor, ns utilizamos o comando return:
int f() {
return 1;
}
Quando chamada, a funo f() acima retorna sempre o valor 1. Voc pode usar o
valor de retorno de uma funo para atribu-lo a uma varivel. Por exemplo:
x = f();
Parmetros
Aqui acabamos definir uma funo chamada soma(), que aceita dois nmeros
inteiros como parmetros. Ns precisamos dar um nome para esses parmetros, e
nesse caso escolhemos a e b. Esses parmetros funcionam como varivel que
voc pode usar dentro da funo. Sempre que chamarmos a funo soma(),
precisamos fornecer esses dois nmeros. O comando return a + b; simplesmente
retorna a funo com a soma dos dois nmeros. Vamos ento somar 2 + 3 e
atribuir o resultado para uma varivel x:
x = soma(2, 3);
ir conter o valor 5.
Comentrios
Um comentrio um trecho de texto no seu programa que serve apenas para
explicar (documentar) o cdigo, sem executar nenhum tipo de comando no
programa. Muitas vezes, os comentrios so usados tambm para desabilitar
comandos no cdigo. Nesse caso, dizemos que o cdigo foi comentado.
Na linguagem C++, um comentrio pode ser escrito de duas formas:
//,
*/
/*
Declarao da varivel "led"
Indica que o LED est conectado no pino digital 13 do Arduino (D13).
*/
int led = 13;
/*
Declarao da funo setup()
Esta funo chamada apenas uma vez, quando o Arduino ligado ou rei
niciado.
*/
void setup() {
// Chama a funo pinMode() que configura um pino como entrada ou
sada
pinMode(led, OUTPUT); // Configura o pino do LED como sada
}
/*
Declarao da funo loop()
Aps a funo setup() ser chamada, a funo loop() chamada repetidam
ente at
o Arduino ser desligado.
*/
void loop() {
// Todas as linhas a seguir so chamadas de funo com passagem de
parmetros
// As funes so executadas em sequncia para fazer o LED acender e
apagar
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do
LED, acendendo-o
delay(1000);
digitalWrite(led, LOW);
LED, apagando-o
delay(1000);
Estruturas de Controle
Estruturas de controle so blocos de instrues que alteram o fluxo de execuo
do cdigo de um programa. Com elas possvel fazer coisas como executar
comandos diferentes de acordo com uma condio ou repetir uma srie de
comandos vrias vezes, por exemplo.
A seguir ns veremos algumas das estruturas de controle mais comuns usadas
nas linguagens de programao em geral. Vamos tambm modificar o nosso
programa de teste para exemplificar melhor como essas estruturas funcionam.
While
O while uma estrutura que executa um conjunto de comandos repetidas vezes
enquanto uma determinada condio for verdadeira. While em ingls quer dizer
"enquanto", e pronuncia-se "ui-ou". Ele segue o seguinte formato:
while(condio) {
...
Vamos ento fazer uma modificao no nosso programa para exemplificar melhor
como o while funciona. O nosso objetivo agora fazer o LED piscar trs vezes,
depois esperar cinco segundos, piscar mais trs vezes e assim por diante. Ns
vamos mudar o contedo da funo loop() para o seguinte:
// Varivel para contar o nmero de vezes que o LED piscou
int i = 0;
delay(5000);
novo
Primeiro ns declaramos uma varivel i. Essa varivel vai contar quantas vezes o
LED j piscou desde o incio do programa ou desde a ltima pausa de cinco
segundos. Ns vamos inicializar essa varivel com zero porque no incio da
funo loop() o LED ainda no piscou nenhuma vez sob essas condies.
Em seguida ns inserimos o comando while, que deve ser seguido de
uma condio definida entre parnteses. Enquanto essa condio for verdadeira,
todo o bloco de comandos entre os caracteres { e } executado repetidamente.
No caso do nosso programa, enquanto o nmero de "piscadas" do LED
(representado pela varivel i) for menor do que trs, ns continuamos a executar
i <
2.
3.
2.
2.
6.
5.
4.
delay(5000).
Aps esses passos, chegamos ao final da funo loop(), e como j sabemos, ela
chamada novamente pelo sistema do Arduino. Isso reinicia o ciclo, executando
os passos acima indefinidamente.
Rode o programa modificado com as instrues acima no seu Arduino e tente
variar o nmero de "piscadas" e o nmero
For
Agora que ns j aprendemos o comando while, fica muito fcil aprender o
comando for, pois ele quase a mesma coisa. Vamos modificar o contedo da
funo loop() como fizemos acima, porm usando o for no lugar do while:
// Varivel para contar o nmero de vezes que o LED piscou
int i;
delay(5000);
novo
A primeira modificao que fizemos foi declarar a varivel i sem inicializ-la com o
valor 0. Ns podemos fazer isso porque o comando for far isso para a gente. Ele
segue o seguinte formato:
for(inicializao; condio; finalizao) {
...
}
Podemos ento verificar que o for nada mais do que um while acrescido de um
comando de inicializao e um comando de finalizao. Para o nosso programa de
teste, esses comandos so, respectivamente:
i = 0:
i++:
If
O if uma das estruturas mais bsicas de programao em geral. If significa "se"
em ingls, e exatamente isso que ele faz: ele verifica uma expresso e,
apenas se ela for verdadeira, executa um conjunto de comandos. Em linguagem
natural, ele executa uma lgica do tipo: "se isso for verdadeiro, ento faa aquilo"
Para ilustrar, vamos modificar o nosso programa de exemplo para que ele faa a
mesma coisa que fizemos com o while e o for acima, porm vamos fazer isso
usando um if, que segue o seguinte formato:
if(condio) {
...
}
void loop() {
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do
LED, acendendo-o
delay(1000);
digitalWrite(led, LOW);
LED, apagando-o
delay(1000);
i++;
if(i == 3) {
delay(5000);
novo
i = 0;
"piscadas"
}
}
If-Else
O if-else, tambm conhecido como if-then-else, pode ser visto como uma
extenso do comando if. Else em ingls significa "caso contrrio", e ele faz
exatamente o que o nome diz: "se isso for verdadeiro, ento faa aquilo, caso
contrrio, faa outra coisa". Ele segue o seguinte formato:
if(condio) {
...
} else {
...
}
Para exemplificar, vamos usar o programa do for que mostramos acima, mas
vamos dessa vez fazer o LED acender e apagar quatro vezes antes de dar uma
pausa de cinco segundos. Depois vamos fazer com que na terceira de cada uma
dessas quatro "piscadas", o LED acenda por um perodo mais curto. Dentro da
funo loop(), teremos o seguinte:
// Varivel para contar o nmero de vezes que o LED piscou
int i;
delay(200);
segundo)
digitalWrite(led, LOW);
do LED, apagando-o
delay(1800);
segundo)
} else {
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do
LED, acendendo-o
delay(1000);
segundo)
digitalWrite(led, LOW);
do LED, apagando-o
delay(1000);
segundo)
}
}
delay(5000);
novo
Aqui o que fazemos , toda vez que vamos acender o LED, verificar se a terceira
vez que isso acontece, por meio do comando if com a condio i == 2. Se essa
expresso for verdadeira, isso quer dizer que j acendemos o LED duas vezes e
estamos prestes a acend-lo pela terceira vez; nesse caso mudamos o tempo que
o LED fica acaso para um valor menor, de 0,2 segundo (uma reduo de 0,8
segundo) e o tempo que ele fica apagado para um valor maior, de 1,8 segundos
(aumento de 0,8 segundo).
Mas e se essa no for a terceira vez que o LED est sendo acionado? a que
entra o else: se a condio do iffor verdadeira, o bloco de comandos
entre { e } logo aps o if executado, caso contrrio, o bloco entre {e } aps
o else executado. Isso quer dizer que para a primeira, segunda e quarta
"piscadas" ser usado o tempo padro de um segundo.
Bibliotecas
Concluso
Neste tutorial ns vimos os conceitos bsicos de programao necessrios para
programar um Arduino ou mesmo outras plataformas de hardware embarcado.
Mas isso s o comeo, e ainda h muitas coisas a se aprender, tanto na parte de
hardware quanto na parte de software. Segue ento uma lista para outros artigos e
tutoriais interessantes para que voc possa aprender conceitos mais avanados e
expandir as suas possibilidades:
Programao em C
o