programação para arduino

19
(/) Programação para Arduino - Primeiros Passos Conceitos iniciais de programação para Arduino Autor: Luís Fernando Chavier Neste tutorial vamos apresentar 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. Para conhecer o que é possível construir com esses sistemas, veja a nossa seção de projetos (/projetos) . Se quiser aprender mais sobre Arduino e sistemas embarcados, explore a nossa seção de tutoriais (/tutoriais) . Se você está usando o Arduino pela primeira vez, não deixe de ver nossos tutoriais de como configurar o Arduino para Windows (/tutoriais/configurando-o-arduino-no-windows/) ou Mac (/tutoriais/configurando- o-arduino-no-mac/) . Aqui nós vamos explicar os conceitos de programação 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

Upload: juliano-strassburg

Post on 18-Sep-2015

81 views

Category:

Documents


2 download

DESCRIPTION

Neste tutorial vamos apresentar os conceitos básicos de programação necessários para começar autilizar o Arduino, e também outros tipos de de sistemas embarcados semelhantes. Para conhecer o queé possível construir com esses sistemas, veja a nossa seção de projetos (/projetos).

TRANSCRIPT

  • (/)

    Programao para Arduino - Primeiros PassosConceitos iniciais de programao para Arduino

    Autor: Lus Fernando Chavier

    Neste tutorial vamos apresentar os conceitos bsicos de programao necessrios para comear autilizar o Arduino, e tambm outros tipos de de sistemas embarcados semelhantes. Para conhecer o que possvel construir com esses sistemas, veja a nossa seo de projetos (/projetos). Se quiser aprendermais sobre Arduino e sistemas embarcados, explore a nossa seo de tutoriais (/tutoriais).

    Se voc est usando o Arduino pela primeira vez, no deixe de ver nossos tutoriais de como configurar oArduino para Windows (/tutoriais/configurando-o-arduino-no-windows/) ou Mac (/tutoriais/configurando-o-arduino-no-mac/).

    Aqui ns vamos explicar os conceitos de programao desde o incio, e voc no precisa saber nadasobre Arduino ou programao de computadores para comear. Se voc j tem experincia prvia comprogramao, este tutorial talvez no acrescente muito ao seu conhecimento.

    Ns vamos aprender como funciona um programa simples, fazendo nele algumas modificaes ao longodo tutorial. Se voc tiver acesso a um Arduino, voc pode us-lo ao longo do tutorial para praticar osconceitos aprendidos, tornando a experincia muito mais legal. Voc s precisa de um Arduino, originalou compatvel, e mais nada. Ento vamos l.

    Este tutorial dividido nas seguintes partes:

    IntroduoComputadorPrograma de ComputadorLinguagem de ProgramaoAlgoritmo (Programa)Varivel

    Tipo de DadoAtribuio

    Operador

  • FunoChamada de FunoValor de RetornoParmetros

    ComentriosEstruturas de Controle

    WhileForIfIf-Else

    BibliotecasConcluso

    O objetivo deste tutorial apresentar, de uma forma simples e rpida, o bsico de programao paraque voc possa comear a utilizar o Arduino em seus projetos, sem ter que ler muitos livros ou artigossobre programao. O tema "desenvolvimento de software" como um todo muito abrangente, entovamos 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. Nofinal do artigo ns colocamos links que voc pode seguir para aprender conceitos mais avanados ouconceitos 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, umcomputador).

    Um computador , de forma simplificada, uma mquina que processa instrues. Essas instrues soprocessadas no "crebro" 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, tambm so chamados de microcontroladores.

    Um programa de computador, ou software, uma sequncia de instrues que so enviadas para ocomputador. Cada tipo de microprocessador (crebro) entende um conjunto de instrues diferente, ouseja, 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 conseguementender, s que elas so muito difceis para os seres humanos entenderem. por isso ns usamos umacoisa chamada linguagem de programao.

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

    Ns seres humanos precisamos converter as nossas idias para uma forma que os computadoresconsigam processar, ou seja, a linguagem de mquina. Os computadores de hoje (ainda) no conseguementender 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 deprogramao, e na verdade existem muitas delas(http://en.wikipedia.org/wiki/List_of_programming_languages).

    Introduo

    Computador

    Programa de Computador

    Linguagem de Programao

  • Essas linguagens de programao tambm so chamadas de linguagens de programao de alto nvel.A linguagem de programao utilizada no Arduino a linguagem C++(http://en.wikipedia.org/wiki/C%2B%2B) (com pequenas modificaes), 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 nvel para linguagem de mquina, nsutilizamos uma coisa chamada compilador. A ao de converter um programa para linguagem demquina chamada compilar. Para compilar um programa, normalmente se utiliza um ambiente dedesenvolvimento (ou IDE, do ingls 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 programao de alto nvel tambm conhecidocomo o cdigo fonte do programa.

    Um algoritmo, ou simplesmente programa, uma forma de dizer para um computador o que ele devefazer, de uma forma que ns humanos conseguimos entender facilmente. Os algoritmos normalmenteso escritos em linguagens de programao de alto nvel. Isso se aplica a praticamente qualquercomputador, 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 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 cdigo fonte do Blink:

    int led = 13;

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

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

    Uma varivel um recurso utizado para armazenar dados em um programa de computador. Todocomputador possui algum tipo de memria, e uma varivel representa uma regio da memria usadapara armazenar uma determinada informao. Essa informao pode ser, por exemplo, um nmero, umcaractere ou uma sequncia de texto. Para podermos usar uma varivel em um programa Arduino, nsprecisamos fazer uma declarao de varivel, como por exemplo:

    int led;

    Algoritmo (Programa)

    Varivel

  • Nesse caso estamos declarando uma varivel do tipo int chamada led . Em seguida ns falaremos maissobre o tipo de dado de uma varivel.

    O tipo de dado de uma varivel significa, como o prprio nome diz, o tipo de informao que se podearmazenar naquela varivel. Em muitas linguagens de programao, como C++, obrigatrio definir otipo 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 queutilizamos so:

    boolean : valor verdadeiro ( true ) ou falso ( false )char : um caracterebyte : um byte, ou sequncia de 8 bitsint : nmero inteiro de 16 bits com sinal (-32768 a 32767)unsigned int : nmero inteiro de 16 bits sem sinal (0 a 65535)long : nmero inteiro de 16 bits com sinal (-2147483648 a 2147483647)unsigned long : nmero inteiro de 16 bits sem sinal (0 a 4294967295)float : nmero real de preciso simples (ponto flutuante)double : nmero real de preciso dupla (ponto flutuante)string : sequncia de caracteresvoid : tipo vazio (no tem tipo)

    Para conhecer todos os tipos de dado suportados pelo Arduino, veja a seo "Data Types" nessa pgina(http://arduino.cc/en/Reference/HomePage).

    Atribuir um valor a uma varivel significa armazenar o valor nela para usar posteriormente. O comandode atribuio em C++ o = . Para atriburmos o valor 13 varivel led que criamos acima, fazemosassim:

    led = 13;

    Quando se armazena um valor em uma varivel logo na sua inicializao, chamamos isso de inicializaode varivel. Assim, no nosso programa de exemplo temos:

    int led = 13;

    O objetivo dessa linha de cdigo dizer que o pino 13 do Arduino ser utilizado para acender o LED, earmazenar 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.

    Um operador um conjunto de um ou mais caracteres que serve para operar sobre uma ou maisvariveis ou constantes. Um exemplo muito simples de operador o operador de adio, o + . Digamosque queremos somar dois nmeros e atribuir a uma varivel x . Para isso, fazemos o seguinte:

    Tipo de Dado

    Atribuio

    Operador

  • x = 2 + 3;

    Aps executar o comando acima, a varivel x ir conter o valor 5 .

    Cada linguagem de programao possui um conjunto de operadores diferente. Alguns dos operadoresmais comuns na linguagem C++ so:

    Operadores aritmticos:+ : adio ("mais")- : subtrao ("menos")* : multiplicao ("vezes")/ : diviso ("dividido por")

    Operadores lgicos:&& : conjuno ("e")|| : disjuno ("ou")== : igualdade ("igual a")!= : desigualdade ("diferente de")! : negao ("no")> : "maior que"< : "menor que">= : "maior ou igual a"

  • setup();

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

    A palavra chave que vem antes do nome da funo na declarao define o tipo do valor de retorno dafuno. Toda vez que uma funo chamada, ela executada e devolve ou retorna um determinadovalor - esse o valor de retorno, ou simplesmente retorno da funo. O valor de retorno precisa ter umtipo, que pode ser qualquer um dos tipos de dados citados anteriormente. No caso da nossa funosetup() , 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 deuma funo para atribu-lo a uma varivel. Por exemplo:

    x = f();

    Aps declarar a funo f() e chamar o comando de atribuio acima, a varivel x ir conter o valor 1 .

    Um outro recurso importante de uma funo so os parmetros. Eles servem para enviar algum dadopara a funo quando ela chamada. Vamos criar por exemplo uma funo que soma dois nmeros:

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

    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 . Essesparmetros funcionam como varivel que voc pode usar dentro da funo. Sempre que chamarmos afuno soma() , precisamos fornecer esses dois nmeros. O comando return a + b; simplesmenteretorna a funo com a soma dos dois nmeros. Vamos ento somar 2 + 3 e atribuir o resultado parauma varivel x :

    x = soma(2, 3);

    Aps a chamada acima, a varivel x ir conter o valor 5 .

    Valor de Retorno

    Parmetros

  • Um comentrio um trecho de texto no seu programa que serve apenas para explicar (documentar) ocdigo, sem executar nenhum tipo de comando no programa. Muitas vezes, os comentrios so usadostambm para desabilitar comandos no cdigo. Nesse caso, dizemos que o cdigo foi comentado.

    Na linguagem C++, um comentrio pode ser escrito de duas formas:

    Comentrio de linha: inicia-se com os caracteres // , tornando todo o resto da linha atual umcomentrio.Comentrio de bloco: inicia-se com os caracteres /* e termina com os caracteres */ . Todo o textoentre o incio e o trmino se torna um comentrio, podendo ser composto de vrias linhas.

    Para facilitar a visualizao, os ambientes de desenvolvimento geralmente mostram os comentrios emuma cor diferente. No caso do Arduino IDE, por exemplo, os comentrios so exibidos na cor cinza.Vamos ento explicar o que o programa de exemplo faz, inserindo nele vrios comentrios explicativos:

    Comentrios

  • /*Programao para Arduino - Primeiros PassosPrograma de exemplo: Blink*/

    /* 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 reiniciado.*/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 repetidamente ato 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); // Espera 1000 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagando-o delay(1000); // Espera 1000 milissegundos (um segundo) // Aps terminar a funo loop(), ela executada novamente repetidas vezes, // e assim o LED continua piscando.}

    Estruturas de controle so blocos de instrues que alteram o fluxo de execuo do cdigo de umprograma. Com elas possvel fazer coisas como executar comandos diferentes de acordo com umacondio ou repetir uma srie de comandos vrias vezes, por exemplo.

    A seguir ns veremos algumas das estruturas de controle mais comuns usadas nas linguagens deprogramao em geral. Vamos tambm 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 condio for verdadeira. While em ingls quer dizer "enquanto", e pronuncia-se "ui-ou". Elesegue o seguinte formato:

    Estruturas de Controle

    While

  • while(condio) {

    ...

    }

    Vamos ento fazer uma modificao no nosso programa para exemplificar melhor como o whilefunciona. O nosso objetivo agora fazer o LED piscar trs vezes, depois esperar cinco segundos, piscarmais 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; // Pisca o LED trs vezes while(i < 3) { digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o delay(1000); // Espera 1000 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagando-o delay(1000); // Espera 1000 milissegundos (um segundo) i = i + 1; // Aumenta o nmero de vezes que o LED piscou } delay(5000); // Espera 5 segundos para piscar o LED de novo

    Primeiro ns declaramos uma varivel i . Essa varivel vai contar quantas vezes o LED j piscou desde oincio do programa ou desde a ltima pausa de cinco segundos. Ns vamos inicializar essa varivel comzero 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 entreparnteses. 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 os comandos quefazem o LED piscar. Isso representado pela expresso i < 3 dentro dos parnteses.

    Entre os caracteres { e } ns colocamos o cdigo que faz o LED piscar, como anteriormente, mas nopodemos nos esquecer de somar 1 varivel que conta o nmero de "piscadas". Isso feito na seguintelinha de cdigo:

    i = i + 1; // Aumenta o nmero de vezes que o LED piscou

    Veja que aps executar todos os comandos entre { e } , sempre teremos na varivel i o nmero devezes que o LED piscou desde o incio da funo loop() . Vamos percorrer a sequncia de passosexecutada cada vez que a funo loop() chamada:

    1. Atribumos 0 varivel i : o LED ainda no 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 varivel i , tornando-a 1 : sabemos que o LED piscou uma vez.

    3. Voltamos ao incio 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 varivel i , tornando-a 2 : sabemos que o LED piscou duas vezes.

    4. Voltamos ao incio 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 varivel i , tornando-a 3 : sabemos que o LED piscou trs vezes.

    5. Voltamos ao incio do while e comparamos se i < 3 : como 3 no menor do que 3 , noexecutamos mais os comandos entre { e } e prosseguimos prxima instruo.

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

    Aps esses passos, chegamos ao final da funo 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 instrues acima no seu Arduino e tente variar o nmero de"piscadas" e o nmero

    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, pormusando o for no lugar do while :

    // Varivel para contar o nmero de vezes que o LED piscou int i; // Pisca o LED trs vezes for(i = 0; i < 3; i++) { digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o delay(1000); // Espera 1000 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nvel lgico 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 modificao que fizemos foi declarar a varivel i sem inicializ-la com o valor 0 . Nspodemos fazer isso porque o comando for far isso para a gente. Ele segue o seguinte formato:

    for(inicializao; condio; finalizao) {

    ...

    }

    Vamos descrever cada item separadamente:

    Condio: uma expresso verificada repetidamente, de forma idntica condio entre parntesesdo while . Enquanto ela for verdadeira, os comandos entre { e } continuam sendo executados.Inicializao: um comando executado apenas uma vez no incio do comando for .Finalizao: um comando executado repetidas vezes ao final de cada execuo dos comandosentre { e } .

    For

  • Podemos ento verificar que o for nada mais do que um while acrescido de um comando deinicializao e um comando de finalizao. Para o nosso programa de teste, esses comandos so,respectivamente:

    i = 0 : inicializa a contagem do nmero de "piscadas".i++ : soma 1 varivel i ao final da execuo 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 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 umconjunto 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 quefizemos com o while e o for acima, porm vamos fazer isso usando um if , que segue o seguinteformato:

    if(condio) {

    ...

    }

    A lgica muito simples: sempre que a condio vor verdadeira, os comandos entre { e } soexecutados, caso contrrio o programa prossegue sem execut-los. Vamos ver ento como fica a funoloop() :

    // Varivel para contar o nmero de vezes que o LED piscouint i = 0;

    void loop() { digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o delay(1000); // Espera 1000 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagando-o delay(1000); // Espera 1000 milissegundos (um segundo) i++; // Incrementa o nmero de "piscadas" if(i == 3) { delay(5000); // Espera 5 segundos para piscar o LED de novo i = 0; // Reinicia o contador de nmero de "piscadas" }}

    Aqui a lgica um pouco diferente: ns vamos manter a funo loop() piscando o LED como noprograma original, porm vamos inserir uma espera adicional de 5 segundos aps cada 3 piscadas. Paraisso, criamos uma varivel i fora da funo loop() ; ela precisa ser declarada de fora da funo para

    If

  • poder reter o seu valor entre cada execuo da funo loop() . Chamamos isso de varivel global.Quando a varivel declarada dentro do corpo da funo, ela no retm o valor etnre cada execuo,sendo reiniciada a cada vez que a funo re-executada. Chamamos isso de varivel local.

    Ns usaremos ento essa varivel global i para contar, novamente, o nmero de vezes que o LEDacendeu e apagou. Na declarao da varivel, ns a inicializamos com o valor 0 para indicar que o LEDno acendeu nenhuma vez ainda. A funo loop() ento comea a ser executada, acendendo eapagando o LED. Para contar o nmero de vezes que o LED piscou, ns adicionamos a seguinte linha decdigo:

    i++; // Incrementa o nmero de "piscadas"

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

    i = 0; // Reinicia o contador de nmero de "piscadas"

    A partir da a funo loop() continua sendo chamada e o ciclo se inicia novamente.

    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 oLED acender e apagar quatro vezes antes de dar uma pausa de cinco segundos. Depois vamos fazer comque na terceira de cada uma dessas quatro "piscadas", o LED acenda por um perodo mais curto. Dentroda funo loop() , teremos o seguinte:

    If-Else

  • // Varivel para contar o nmero de vezes que o LED piscou int i; // Pisca o LED trs vezes for(i = 0; i < 3; i++) { if(i == 2) { digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o delay(200); // Espera 200 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagando-o delay(1800); // Espera 1800 milissegundos (um segundo) } else { digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o delay(1000); // Espera 1000 milissegundos (um segundo) digitalWrite(led, LOW); // Atribui nvel lgico 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 condio i == 2 . Se essa expresso for verdadeira, isso quer dizer quej acendemos o LED duas vezes e estamos prestes a acend-lo pela terceira vez; nesse caso mudamos otempo que o LED fica acaso para um valor menor, de 0,2 segundo (uma reduo de 0,8 segundo) e otempo 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 acondio do if for verdadeira, o bloco de comandos entre { e } logo aps o if executado, casocontrrio, o bloco entre { e } aps o else executado. Isso quer dizer que para a primeira, segundae quarta "piscadas" ser usado o tempo padro de um segundo.

    As coisas que aprendemos nas sees anteriores so importantes para implementar a lgica do seuprograma no Arduino, mas normalmente voc vai querer fazer mais coisas alm de apenas acender umLED. Quando se faz tarefas mais complexas ou se utiliza algum outro circuito conectado ao seu Arduino,um recurso muito importante so as bibliotecas.

    Uma biblioteca basicamente composta de cdigo 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

    Uma biblioteca do Arduino se apresenta normalmente como uma ou mais classes que possuem funes,os mtodos, para acionar dispositivos, configur-los ou executar alguma outra tarefa. Continuando como exemplo do display de cristal lquido, 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:

    Bibliotecas

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

    Quando fazemos isso, lcd se torna um objeto da classe LiquidCrystal . Isso o equivalente a criar umavarivel do tipo LiquidCrystal . Os parmetros que so passados entre parnteses servem para inicializara configurao desse objeto, e nesse caso correspondem aos nmeros dos pinos que foram utilizadospara conectar o LCD ao Arduino.

    Quase sempre as bibliotecas de Arduino possuem um mtodo begin() , que serve para fazer aconfigurao inicial do dispositivo que est sendo controlado. Para chamar a funo begin() do objetolcd que criamos, fazemos o seguinte:

    lcd.begin(16, 2);

    Normalmente esse mtodo begin() chamado de dentro da funo setup() , ou seja, durante ainicializao do programa. Os parmetros do mtodo begin() , nesse caso, correspondem ao nmero decolunas e o nmero de linhas do LCD, respectivamente.

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

    lcd.print("Oi!");

    O mtodo print() apenas um dos vrios mtodos disponveis na blblioteca LiquidCrystal . Para sabertodos os mtodos fornecidos por uma determinada biblioteca, preciso consultar a documentaofornecida com ela.

    Este o processo bsico de utilizao de bibliotecas no Arduino. Para mais informaes, leia adocumentao fornecida com a biblioteca que voc est usando.

    Classes, objetos e mtodos so conceitos de programao orientada a objetos. No vamos explicartudo em detalhes aqui, mas se voc quiser aprender mais sobre isso, siga os links relacionados no finalda pgina.

    Neste tutorial ns vimos os conceitos bsicos de programao necessrios para programar um Arduinoou mesmo outras plataformas de hardware embarcado. Mas isso s o comeo, e ainda h muitascoisas a se aprender, tanto na parte de hardware quanto na parte de software. Segue ento uma listapara outros artigos e tutoriais interessantes para que voc possa aprender conceitos mais avanados eexpandir as suas possibilidades:

    Programao em CInstalando o ambiente de desenvolvimento (http://www.inf.pucrs.br/flash/cbp/instala_devc/) (PUC-RS)Introduo programao C (http://www.inf.pucrs.br/~pinho/LaproI/IntroC/IntroC.htm) (PUC-RS)Curso de Programao 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 ingls)

    Programao orientada a objetos em C++C++ como uma linguagem de programao orientada a objetos(http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html) (Unicamp)

    Concluso

  • Entendendo C++ (http://www.arnaut.eti.br/op/cppai00.htm) - verso original em ingls aqui(http://web.ift.uib.no/~ladi/KURS/OTHER/CPL/cplus0.html)

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

    ADC v1.0(/nanoshields/modulos/adc10/)

    Alevino(/nanoshields/modulos/alevino/)

    Base Board(/nanoshields/modulos/base-board/)

  • Ethernet(/nanoshields/modulos/ethernet/)

    LCD v1.0(/nanoshields/modulos/lcd10/)

    MicroSD(/nanoshields/modulos/microsd/)

  • Mosfet(/nanoshields/modulos/mosfet/)

    Relay(/nanoshields/modulos/relay/)

    RTCMem(/nanoshields/modulos/rtcmem/)

  • Thermocouple(/nanoshields/modulos/thermocouple/)

    Triac(/nanoshields/modulos/triac/)

    USB(/nanoshields/modulos/usb/)

  • Zero Cross(/nanoshields/modulos/zero-cross/)

    Assine a nossa lista de e-mails (/listas/novidades/) e que 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 EletrnicosCircuitar Eletrnicos, Importao e Exportao LTDA

    CNPJ: 13.597.601/0001-75ATENDIMENTO

    [email protected](16) 3415 4651

    ENDEREOR. Conde do Pinhal, 2267 - Sala 404So Carlos - SP - Brasil - 13560-648