Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino -...

15
(/) Programação para Arduino - Primeiros Passos Conceitos iniciais de programação para Arduino Autor: Luís Fernando Chavier Neste tutorial vamos apresentar rapidamente os conceitos básicos de programação necessários para começar a utilizar o Arduino, e também outros tipos de de sistemas embarcados semelhantes. Nós vamos explicar os conceitos desde o início, e você não precisa saber nada sobre Arduino ou programação de computadores para começar. Se você já tem experiência prévia com programação, este tutorial talvez não acrescente muito ao seu conhecimento. Nós vamos aprender como funciona um programa simples, fazendo nele algumas modificações ao longo do tutorial. Se você tiver acesso a um Arduino, você pode usá-lo ao longo do tutorial para praticar os conceitos aprendidos, tornando a experiência muito mais legal. Você só precisa de um Arduino, original ou compatível, e mais nada. Então vamos lá. Este tutorial é dividido nas seguintes partes: Introdução Computador Programa de Computador Linguagem de Programação Algoritmo (Programa) Variável Tipo de Dado Atribuição Operador Função Chamada de Função Valor de Retorno Parâmetros Comentários Estruturas de Controle While For If If-Else Bibliotecas Conclusão O objetivo deste tutorial é apresentar, de uma forma simples e rápida, o básico de programação para que você possa começar a utilizar o Arduino em seus projetos, sem ter que ler muitos livros ou artigos sobre programação. O tema "desenvolvimento de software" como um todo é muito abrangente, então vamos focar apenas nos conceitos que são importantes para Arduino e sistemas embarcados em geral. Introdução

Transcript of Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino -...

Page 1: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

(/)

Programação para Arduino - Primeiros PassosConceitos iniciais de programação para Arduino

Autor: Luís Fernando Chavier

Neste tutorial vamos apresentar rapidamente os conceitos básicos de programação necessários paracomeçar a utilizar o Arduino, e também outros tipos de de sistemas embarcados semelhantes. Nósvamos explicar os conceitos desde o início, e você não precisa saber nada sobre Arduino ouprogramação de computadores para começar. Se você já tem experiência prévia com programação, estetutorial talvez não acrescente muito ao seu conhecimento.

Nós vamos aprender como funciona um programa simples, fazendo nele algumas modificações ao longodo tutorial. Se você tiver acesso a um Arduino, você pode usá-lo ao longo do tutorial para praticar osconceitos aprendidos, tornando a experiência muito mais legal. Você só precisa de um Arduino, originalou compatível, e mais nada. Então vamos lá.

Este tutorial é dividido nas seguintes partes:

IntroduçãoComputadorPrograma de ComputadorLinguagem de ProgramaçãoAlgoritmo (Programa)Variável

Tipo de DadoAtribuição

OperadorFunção

Chamada de FunçãoValor de RetornoParâmetros

ComentáriosEstruturas de Controle

WhileForIfIf-Else

BibliotecasConclusão

O objetivo deste tutorial é apresentar, de uma forma simples e rápida, o básico de programação para quevocê possa começar a utilizar o Arduino em seus projetos, sem ter que ler muitos livros ou artigos sobreprogramação. O tema "desenvolvimento de software" como um todo é muito abrangente, então vamosfocar apenas nos conceitos que são importantes para Arduino e sistemas embarcados em geral.

Introdução

Page 2: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

Existem muitas outras coisas para se aprender na parte de software que não vamos abordar aqui. Nofinal do artigo nós colocamos links que você pode seguir para aprender conceitos mais avançados ouconceitos de software que não são muito utilizados na programação de sistemas embarcados.

Vamos começar explicando como funciona um computador (lembre-se que o Arduino é, no fundo, umcomputador).

Um computador é, de forma simplificada, uma máquina que processa instruções. Essas instruções sãoprocessadas no "cérebro" do computador, que se chama microprocessador. Todo computador possuipelo menos um microprocessador. O Arduino, por exemplo, nada mais é do que um computador muitopequeno, e ele utiliza um microprocessador do modelo ATmega. Alguns microprocessadores, como oATmega, também são chamados de microcontroladores.

Um programa de computador, ou software, é uma sequência de instruções que são enviadas para ocomputador. Cada tipo de microprocessador (cérebro) entende um conjunto de instruções diferente, ouseja, o seu próprio "idioma". Também chamamos esse idioma de linguagem de máquina.

As linguagens de máquina são, no fundo, as únicas linguagens que os computadores conseguementender, só que elas são muito difíceis para os seres humanos entenderem. É por isso nós usamos umacoisa chamada linguagem de programação.

No caso de sistemas como o Arduino (os chamados sistemas embarcados), o software que roda nomicroprocessador é também chamado de firmware.

Nós seres humanos precisamos converter as nossas idéias para uma forma que os computadoresconsigam processar, ou seja, a linguagem de máquina. Os computadores de hoje (ainda) não conseguementender a linguagem natural que nós usamos no dia a dia, então precisamos de um outro "idioma"especial para instruir o computador a fazer as tarefas que desejamos. Esse "idioma" é uma linguagem deprogramação, e na verdade existem muitas delas(http://en.wikipedia.org/wiki/List_of_programming_languages).

Essas linguagens de programação também são chamadas de linguagens de programação de alto nível. Alinguagem de programação utilizada no Arduino é a linguagem C++(http://en.wikipedia.org/wiki/C%2B%2B) (com pequenas modificações), que é uma linguagem muitotradicional e conhecida. Essa é a linguagem que utilizaremos ao longo deste tutorial.

Para converter um programa escrito em uma linguagem de alto nível para linguagem de máquina, nósutilizamos uma coisa chamada compilador. A ação de converter um programa para linguagem demáquina é chamada compilar. Para compilar um programa, normalmente se utiliza um ambiente dedesenvolvimento (ou IDE, do inglês Integrated Development Environment), que é um aplicativo decomputador 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 programação de alto nível também é conhecidocomo o código fonte do programa.

Computador

Programa de Computador

Linguagem de Programação

Algoritmo (Programa)

Page 3: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

Um algoritmo, ou simplesmente programa, é uma forma de dizer para um computador o que ele devefazer, de uma forma que nós humanos conseguimos entender facilmente. Os algoritmos normalmentesão escritos em linguagens de programação de alto nível. Isso se aplica a praticamente qualquercomputador, inclusive o Arduino, onde um algoritmo também é conhecido como sketch. Para simplificar,a partir de agora nós vamos nos referir aos algoritmos, programas ou sketches simplesmente como"programas".

Um programa é composto de uma sequência de comandos, normalmente escritos em um arquivo detexto. Para este tutorial, vamos usar como base os comandos do programa mais simples do Arduino, oBlink, que simplesmente acende e apaga um LED, e vamos destrinchá-lo ao longo do tutorial. Veja abaixoo código fonte do Blink:

int led = 13;

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

void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000);}

Uma variável é um recurso utizado para armazenar dados em um programa de computador. Todocomputador possui algum tipo de memória, e uma variável representa uma região da memória usadapara armazenar uma determinada informação. Essa informação pode ser, por exemplo, um número, umcaracter ou uma sequência de texto. Para podermos usar uma variável em um programa Arduino, nósprecisamos fazer uma declaração de variável, como por exemplo:

int led;

Nesse caso estamos declarando uma variável do tipo int chamada led. Em seguida nós falaremosmais sobre o tipo de dado de uma variável.

O tipo de dado de uma variável significa, como o próprio nome diz, o tipo de informação que se podearmazenar naquela variável. Em muitas linguagens de programação, como C++, é obrigatório definir otipo de dado no momento da declaração da variável, como vimos na declaração da variável led acima.No caso dos Arduino que usam processador ATmega, os tipos mais comuns de dados que utilizamossão:

boolean: valor verdadeiro ( true) ou falso ( false)char: um caracterbyte: um byte, ou sequência de 8 bitsint: número inteiro de 16 bits com sinal (-32768 a 32767)

Variável

Tipo de Dado

Page 4: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

unsigned int: número inteiro de 16 bits sem sinal (0 a 65535)long: número inteiro de 16 bits com sinal (-2147483648 a 2147483647)unsigned long: número inteiro de 16 bits sem sinal (0 a 4294967295)float: número real de precisão simples (ponto flutuante)double: número real de precisão dupla (ponto flutuante)string: sequência de caracteresvoid: tipo vazio (não tem tipo)

Para conhecer todos os tipos de dado suportados pelo Arduino, veja a seção "Data Types" nessa página(http://arduino.cc/en/Reference/HomePage).

Atribuir um valor a uma variável significa armazenar o valor nela para usar posteriormente. O comandode atribuição em C++ é o =. Para atribuírmos o valor 13 à variável led que criamos acima, fazemosassim:

led = 13;

Quando se armazena um valor em uma variável logo na sua inicialização, chamamos isso de inicializaçãode variável. Assim, no nosso programa de exemplo temos:

int led = 13;

O objetivo dessa linha de código é dizer que o pino 13 do Arduino será utilizado para acender o LED, earmazenar essa informação para usar depois ao longo do programa.

Os valores fixos usados no programa, como o valor 13 acima, são chamados de constantes, pois,diferentemente das variáveis, o seu valor não muda.

Um operador é um conjunto de um ou mais caracteres que serve para operar sobre uma ou maisvariáveis ou constantes. Um exemplo muito simples de operador é o operador de adição, o +. Digamosque queremos somar dois números e atribuir a uma variável x. Para isso, fazemos o seguinte:

x = 2 + 3;

Após executar o comando acima, a variável x irá conter o valor 5.

Cada linguagem de programação possui um conjunto de operadores diferente. Alguns dos operadoresmais comuns na linguagem C++ são:

Operadores aritméticos:+: adição ("mais")-: subtração ("menos")*: multiplicação ("vezes")/: divisão ("dividido por")

Operadores lógicos:

Atribuição

Operador

Page 5: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

&&: conjunção ("e")||: disjunção ("ou")==: igualdade ("igual a")!=: desigualdade ("diferente de")!: negação ("não")>: "maior que"<: "menor que">=: "maior ou igual a"<=: "menor ou igual a"

Operadores de atribuição:=: atribui um valor a uma variável, como vimos acima.

Ao longo do desenvolvimento dos seus projetos, aos poucos você se familiarizará com todos essesoperadores. Para uma lista completa, veja essa página(http://pt.wikipedia.org/wiki/Operadores_em_C_e_C%2B%2B) da Wikipedia.

Uma função é, em linhas gerais, uma sequência de comandos que pode ser reutilizada várias vezes aolongo de um programa. Para criar uma função e dizer o que ela faz, nós precisamos fazer umadeclaração de função. Veja como uma função é declarada no nosso programa de exemplo:

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

Aqui estamos declarando uma função com o nome setup(). O que ela faz é executar os comandos deuma outra função pinMode(). A ação de executar os comandos de função previamente declarada édenominada chamada de função. Nós não precisamos declarar a função pinMode() porque ela já édeclarada automaticamente no caso do Arduino.

Chamar uma função significa executar os comandos que foram definidos na sua declaração. Uma vezdeclarada, uma função pode ser chamada várias vezes no mesmo programa para que seus comandossejam executados novamente. Para chamarmos a nossa função setup(), por exemplo, nós usaríamos oseguinte comando:

setup();

No entanto, no caso do Arduino, nós não precisamos chamar a função setup(), porque ela é chamadaautomaticamente. Quando compilamos um programa no Arduino IDE, ele chama a função setup() umavez e depois chama a função loop() repetidamente até que o Arduino seja desligado ou reiniciado.

A palavra chave que vem antes do nome da função na declaração define o tipo do valor de retorno dafunção. Toda vez que uma função é chamada, ela é executada e devolve ou retorna um determinadovalor - esse é o valor de retorno, ou simplesmente retorno da função. O valor de retorno precisa ter um

Função

Chamada de Função

Valor de Retorno

Page 6: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

tipo, que pode ser qualquer um dos tipos de dados citados anteriormente. No caso da nossa funçãosetup(), 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 alguma coisa, por exemplo um número inteiro.Para retornar um valor, nós utilizamos o comando return:

int f() { return 1;}

Quando chamada, a função f() acima retorna sempre o valor 1. Você pode usar o valor de retorno deuma função para atribuí-lo a uma variável. Por exemplo:

x = f();

Após declarar a função f() e chamar o comando de atribuição acima, a variável x irá conter o valor 1.

Um outro recurso importante de uma função são os parâmetros. Eles servem para enviar algum dadopara a função quando ela é chamada. Vamos criar por exemplo uma função que soma dois números:

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

Aqui acabamos definir uma função chamada soma(), que aceita dois números inteiros comoparâmetros. Nós precisamos dar um nome para esses parâmetros, e nesse caso escolhemos a e b.Esses parâmetros funcionam como variável que você pode usar dentro da função. Sempre quechamarmos a função soma(), precisamos fornecer esses dois números. O comando return a + b;simplesmente retorna a função com a soma dos dois números. Vamos então somar 2 + 3 e atribuir oresultado para uma variável x:

x = soma(2, 3);

Após a chamada acima, a variável x irá conter o valor 5.

Um comentário é um trecho de texto no seu programa que serve apenas para explicar (documentar) ocódigo, sem executar nenhum tipo de comando no programa. Muitas vezes, os comentários são usadostambém para desabilitar comandos no código. Nesse caso, dizemos que o código foi comentado.

Na linguagem C++, um comentário pode ser escrito de duas formas:

Comentário de linha: inicia-se com os caracteres //, tornando todo o resto da linha atual umcomentário.Comentário de bloco: inicia-se com os caracteres /* e termina com os caracteres */. Todo o texto

Parâmetros

Comentários

Page 7: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

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 os comentários emuma cor diferente. No caso do Arduino IDE, por exemplo, os comentários são exibidos na cor cinza.Vamos então explicar o que o programa de exemplo faz, inserindo nele vários comentários explicativos:

/*Programação para Arduino - Primeiros PassosPrograma de exemplo: Blink*/

/* Declaração da variável "led"Indica que o LED está conectado no pino digital 13 do Arduino (D13).*/int led = 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 o pino 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.}

Estruturas de controle são blocos de instruções que alteram o fluxo de execução do código de umprograma. Com elas é possível fazer coisas como executar comandos diferentes de acordo com umacondição ou repetir uma série de comandos várias vezes, por exemplo.

Estruturas de Controle

Page 8: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

A seguir nós veremos algumas das estruturas de controle mais comuns usadas nas linguagens deprogramação em geral. Vamos também modificar o nosso programa de teste para exemplificar melhorcomo essas estruturas funcionam.

O while é uma estrutura que executa um conjunto de comandos repetidas vezes enquanto umadeterminada condição for verdadeira. While em inglês quer dizer "enquanto", e pronuncia-se "uái-ou". Elesegue o seguinte formato:

while(condição) { ...}

Vamos então fazer uma modificação no nosso programa para exemplificar melhor como o whilefunciona. O nosso objetivo agora é fazer o LED piscar três vezes, depois esperar cinco segundos, piscarmais três vezes e assim por diante. Nós vamos mudar o conteúdo da função loop() para o seguinte:

// Variável para contar o número de vezes que o LED piscou int i = 0; // Pisca o LED três vezes while(i < 3) { 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) i = i + 1; // Aumenta o número de vezes que o LED piscou } delay(5000); // Espera 5 segundos para piscar o LED de novo

Primeiro nós declaramos uma variável i. Essa variável vai contar quantas vezes o LED já piscou desde oinício do programa ou desde a última pausa de cinco segundos. Nós vamos inicializar essa variável comzero porque no início da função loop() o LED ainda não piscou nenhuma vez sob essas condições.

Em seguida nós inserimos o comando while, que deve ser seguido de uma condição definida entreparênteses. Enquanto essa condição for verdadeira, todo o bloco de comandos entre os caracteres { e} é executado repetidamente. No caso do nosso programa, enquanto o número de "piscadas" do LED

(representado pela variável i) for menor do que três, nós continuamos a executar os comandos quefazem o LED piscar. Isso é representado pela expressão i < 3 dentro dos parênteses.

Entre os caracteres { e } nós colocamos o código que faz o LED piscar, como anteriormente, mas nãopodemos nos esquecer de somar 1 à variável que conta o número de "piscadas". Isso é feito naseguinte linha de código:

i = i + 1; // Aumenta o número de vezes que o LED piscou

While

Page 9: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

Veja que após executar todos os comandos entre { e }, sempre teremos na variável i o número devezes que o LED piscou desde o início da função loop(). Vamos percorrer a sequência de passosexecutada cada vez que a função loop() é chamada:

1. Atribuímos 0 à variável i: o LED ainda não piscou nenhuma vez.2. Comparamos se i < 3: como 0 é menor do que 3, executamos os comandos entre { e }:

1. Executamos os comandos para acender e apagar o LED.2. Somamos 1 à variável i, tornando-a 1: sabemos que o LED piscou uma vez.

3. Voltamos ao início do while e comparamos se i < 3: como 1 é menor do que 3, executamos oscomandos entre { e } novamente:1. Executamos os comandos para acender e apagar o LED.2. Somamos 1 à variável i, tornando-a 2: sabemos que o LED piscou duas vezes.

4. Voltamos ao início do while e comparamos se i < 3: como 2 é menor do que 3, executamos oscomandos entre { e } novamente:1. Executamos os comandos para acender e apagar o LED.2. Somamos 1 à variável i, tornando-a 3: sabemos que o LED piscou três vezes.

5. Voltamos ao início do while e comparamos se i < 3: como 3 não é menor do que 3, nãoexecutamos mais os comandos entre { e } e prosseguimos à próxima instrução.

6. Esperamos cinco segundos por meio da chamada delay(5000).

Após esses passos, chegamos ao final da função loop(), e como já sabemos, ela é chamada novamentepelo sistema do Arduino. Isso reinicia o ciclo, executando os passos acima indefinidamente.

Rode o programa modificado com as instruções acima no seu Arduino e tente variar o número de"piscadas" e o número

Agora que nós já aprendemos o comando while, fica muito fácil aprender o comando for, pois ele équase a mesma coisa. Vamos modificar o conteúdo da função loop() como fizemos acima, porémusando o for no lugar do while:

// Variável para contar o número de vezes que o LED piscou int i; // Pisca o LED três vezes for(i = 0; i < 3; i++) { 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) } delay(5000); // Espera 5 segundos para piscar o LED de novo

A primeira modificação que fizemos foi declarar a variável i sem inicializá-la com o valor 0. Nóspodemos fazer isso porque o comando for fará isso para a gente. Ele segue o seguinte formato:

For

Page 10: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

for(inicialização; condição; finalização) { ...}

Vamos descrever cada item separadamente:

Condição: é uma expressão verificada repetidamente, de forma idêntica à condição entre parêntesesdo while. Enquanto ela for verdadeira, os comandos entre { e } continuam sendo executados.Inicialização: é um comando executado apenas uma vez no início do comando for.Finalização: é um comando executado repetidas vezes ao final de cada execução dos comandosentre { e }.

Podemos então verificar que o for nada mais é do que um while acrescido de um comando deinicialização e um comando de finalização. Para o nosso programa de teste, esses comandos são,respectivamente:

i = 0: inicializa a contagem do número de "piscadas".i++: soma 1 à variável i ao final da execução dos comandos entre { e }; nesse caso ele é

equivalente ao comando i = i + 1. O operador ++ é chamado de operador de incremento, e émuito usado na linguagem C++.

Se executarmos o programa acima no Arduino, veremos que o resultado é o mesmo que obtivemos como programa que fizamos anteriormente utilizando o while.

O if é uma das estruturas mais básicas de programação em geral. If significa "se" em inglês, e éexatamente isso que ele faz: ele verifica uma expressão e, apenas se ela for verdadeira, executa umconjunto de comandos. Em linguagem natural, ele executa uma lógica do tipo: "se isso for verdadeiro,então faça aquilo"

Para ilustrar, vamos modificar o nosso programa de exemplo para que ele faça a mesma coisa quefizemos com o while e o for acima, porém vamos fazer isso usando um if, que segue o seguinteformato:

if(condição) { ...}

A lógica é muito simples: sempre que a condição vor verdadeira, os comandos entre { e } sãoexecutados, caso contrário o programa prossegue sem executá-los. Vamos ver então como fica a funçãoloop():

If

Page 11: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

// Variável para contar o número de vezes que o LED piscouint i = 0;

void loop() { 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) i++; // Incrementa o número de "piscadas" if(i == 3) { delay(5000); // Espera 5 segundos para piscar o LED de novo i = 0; // Reinicia o contador de número de "piscadas" }}

Aqui a lógica é um pouco diferente: nós vamos manter a função loop() piscando o LED como noprograma original, porém vamos inserir uma espera adicional de 5 segundos após cada 3 piscadas. Paraisso, criamos uma variável i fora da função loop(); ela precisa ser declarada de fora da função parapoder reter o seu valor entre cada execução da função loop(). Chamamos isso de variável global.Quando a variável é declarada dentro do corpo da função, ela não retém o valor etnre cada execução,sendo reiniciada a cada vez que a função é re-executada. Chamamos isso de variável local.

Nós usaremos então essa variável global i para contar, novamente, o número de vezes que o LEDacendeu e apagou. Na declaração da variável, nós a inicializamos com o valor 0 para indicar que o LEDnão acendeu nenhuma vez ainda. A função loop() então começa a ser executada, acendendo eapagando o LED. Para contar o número de vezes que o LED piscou, nós adicionamos a seguinte linha decódigo:

i++; // Incrementa o número de "piscadas"

Em seguida utilizamos o if para verificar se acabamos de acender o LED pela terceira vez. Para isso,usamos a expressão i == 3 na condição do ìf. Se essa expressão for verdadeira, isso que dizer que oLED já acendeu 3 vezes, então inserimos uma pausa adicional de 5 segundos com a chamadadelay(5000) e reiniciamos a contagem do número de "piscadas" novamente com o seguinte comando:

i = 0; // Reinicia o contador de número de "piscadas"

A partir daí a função loop() continua sendo chamada e o ciclo se inicia novamente.

O if-else, também conhecido como if-then-else, pode ser visto como uma extensão do comando if. Elseem inglês significa "caso contrário", e ele faz exatamente o que o nome diz: "se isso for verdadeiro, entãofaça aquilo, caso contrário, faça outra coisa". Ele segue o seguinte formato:

If-Else

Page 12: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

if(condição) { ...} else { ...}

Para exemplificar, vamos usar o programa do for que mostramos acima, mas vamos dessa vez fazer oLED acender e apagar quatro vezes antes de dar uma pausa de cinco segundos. Depois vamos fazercom que na terceira de cada uma dessas quatro "piscadas", o LED acenda por um período mais curto.Dentro da função loop(), teremos o seguinte:

// Variável para contar o número de vezes que o LED piscou int i; // Pisca o LED três vezes for(i = 0; i < 3; i++) { if(i == 2) { digitalWrite(led, HIGH); // Atribui nível lógico alto ao pino do LED, acendendo-o delay(200); // Espera 200 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nível lógico baixo ao pino do LED, apagando-o delay(1800); // Espera 1800 milissegundos (um segundo) } else { 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) } } delay(5000); // Espera 5 segundos para piscar o LED de 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 condição i == 2. Se essa expressão for verdadeira, isso quer dizerque já acendemos o LED duas vezes e estamos prestes a acendê-lo pela terceira vez; nesse casomudamos o tempo que o LED fica acaso para um valor menor, de 0,2 segundo (uma redução de 0,8segundo) e o tempo que ele fica apagado para um valor maior, de 1,8 segundos (aumento de 0,8segundo).

Mas e se essa não for a terceira vez que o LED está sendo acionado? É aí que entra o else: se acondição do if for verdadeira, o bloco de comandos entre { e } logo após o if é executado, casocontrário, o bloco entre { e } após o else é executado. Isso quer dizer que para a primeira, segundae quarta "piscadas" será usado o tempo padrão de um segundo.

Bibliotecas

Page 13: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

As coisas que aprendemos nas seções anteriores são importantes para implementar a lógica do seuprograma no Arduino, mas normalmente você vai querer fazer mais coisas além de apenas acender umLED. Quando se faz tarefas mais complexas ou se utiliza algum outro circuito conectado ao seu Arduino,um recurso muito importante são as bibliotecas.

Uma biblioteca é basicamente composta de código fonte adicional que você adiciona ao seu projeto pormeio do comando include. Vejamos como adicionar, por exemplo, uma biblioteca para controle de umdisplay de cristal liquido (LCD):

#include <LiquidCrystal.h>

Uma biblioteca do Arduino se apresenta normalmente como uma ou mais classes que possuem funções,os métodos, para acionar dispositivos, configurá-los ou executar alguma outra tarefa. Continuando como exemplo do display de cristal líquido, para usá-lo no seu programa, primeiro é preciso inicializá-lo. Oque fazemos nesse caso é criar um objeto para acessar o LCD (tecnicamente isso se chama instanciarum objeto). Vejamos como isso é feito:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Quando fazemos isso, lcd se torna um objeto da classe LiquidCrystal. Isso é o equivalente a criar umavariável do tipo LiquidCrystal. Os parâmetros que são passados entre parênteses servem parainicializar a configuração esse objeto, e nesse caso correspondem aos números dos pinos que foramutilizados para conectar o LCD ao Arduino.

Quase sempre as bibliotecas de Arduino possuem um método begin(), que serve para fazer aconfiguração inicial do dispositivo que está sendo controlado. Para chamar a função begin() do objetolcd que criamos, fazemos o seguinte:

lcd.begin(16, 2);

Normalmente esse método begin() é chamado de dentro da função setup(), ou seja, durante ainicialização do programa. Os parâmetros do método begin(), nesse caso, correspondem ao número decolunas e o número de linhas do LCD, respectivamente.

Feitos esses passos, já podemos escrever texto no LCD. Fazemos isso usando o método print() doobjeto lcd, sempre que precisarmos ao longo do programa:

lcd.print("Oi!");

O método print() é apenas um dos vários métodos disponíveis na blblioteca LiquidCrystal. Parasaber todos os métodos fornecidos por uma determinada biblioteca, é preciso consultar adocumentação fornecida com ela.

Este é o processo básico de utilização de bibliotecas no Arduino. Para mais informações, leia adocumentação fornecida com a biblioteca que você está usando.

Classes, objetos e métodos são conceitos de programação orientada a objetos. Não vamos explicar tudoem detalhes aqui, mas se você quiser aprender mais sobre isso, siga os links relacionados no final dapágina.

Page 14: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

Neste tutorial nós vimos os conceitos básicos de programação necessários para programar um Arduinoou mesmo outras plataformas de hardware embarcado. Mas isso é só o começo, e ainda há muitascoisas a se aprender, tanto na parte de hardware quanto na parte de software. Segue então uma listapara outros artigos e tutoriais interessantes para que você possa aprender conceitos mais avançados eexpandir as suas possibilidades:

Programação em CInstalando o ambiente de desenvolvimento (http://www.inf.pucrs.br/flash/cbp/instala_devc/) (PUC-RS)Introdução à programação C (http://www.inf.pucrs.br/~pinho/LaproI/IntroC/IntroC.htm) (PUC-RS)Curso de Programação em C(http://www2.dcc.ufmg.br/disciplinas/pc/source/introducao_c_renatocm_deeufmg.pdf) (Unicamp)C Programming (http://www2.its.strath.ac.uk/courses/c/) (em inglês)

Programação orientada a objetos em C++C++ como uma linguagem de programação orientada a objetos(http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html) (Unicamp)Entendendo C++ (http://www.arnaut.eti.br/op/cppai00.htm) - versão original em inglês aqui(http://web.ift.uib.no/~ladi/KURS/OTHER/CPL/cplus0.html)

Escrevendo bibliotecas para o Arduino (http://arduino.cc/en/Hacking/LibraryTutorial) (em inglês)

Assine a nossa lista de e-mails (/listas/novidades/) e fique por dentro das novidades daCircuitar.

(https://www.facebook.com/circuitar.com.br)

(https://twitter.com/circuitar)

(https://plus.google.com/+CircuitarBr)

(https://github.com/circuitar)

Copyright © 2013 Circuitar EletrônicosCircuitar Eletrônicos, Importação e Exportação LTDA

CNPJ: 13.597.601/0001-75ATENDIMENTO

[email protected]

Conclusão

Page 15: Programação para Arduino - Primeiros Passos - Conceitos iniciais de programação para Arduino - Projeto de eletrônica modular com Arduino - Circuitar.pdf

(16) 3415 4651ENDEREÇO

R. Conde do Pinhal, 2267 - Sala 404São Carlos - SP - Brasil - 13560-648