apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

Embed Size (px)

Citation preview

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    1/70

    1

    1

    www.facebook.com/fbseletronica

    .

    APOSTILA ARDUINO

    Com aplicaes baseada na placa:

    ARDUINO UNOwww.fbseletronica.com.br

    V0RV1

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    2/70

    2

    2

    www.facebook.com/fbseletronica

    Sumrio

    1 Sobre a FBS Eletrnica ........................................................................................ 52 Termos de uso .................................................................................................... 53 Objetivos ........................................................................................................... 64 Introduo ......................................................................................................... 65 O que ARDUINO? ............................................................................................. 76 Plataforma de desenvolvimento ARDUINO .............................................................. 8

    6.1 Hardware do ARDUINO ................................................................................... 86.2 Software do ARDUINO .................................................................................... 9

    6.2.1 IDE do ARDUINO ..................................................................................... 107 Programao ..................................................................................................... 13

    7.1 Estrutura de um programa ARDUINO .............................................................. 137.2 Funes ....................................................................................................... 137.3 Constantes ................................................................................................... 15

    7.3.1 Definindo estados lgicos, true(verdadeiro) e false(falso) ............................. 157.3.2 Definindo Nvel lgico alto e baixo nos pinos ............................................... 157.3.3 Definindo direo de um pino digital e Pull-up ............................................. 15

    7.4 Variveis ..................................................................................................... 167.5 Escopo de variveis ....................................................................................... 167.6 Qualificadores de variveis ............................................................................. 17

    7.6.1 static ..................................................................................................... 177.6.2 volatile................................................................................................... 177.6.3 const ..................................................................................................... 18

    7.7 Tipos de dados ............................................................................................. 187.7.1 void ....................................................................................................... 197.7.2 Boolean ................................................................................................. 197.7.3 char ...................................................................................................... 207.7.4 unsigned char ......................................................................................... 20

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    3/70

    3

    3

    www.facebook.com/fbseletronica

    7.7.5 byte ...................................................................................................... 207.7.6 int ......................................................................................................... 207.7.7 unsigned int ........................................................................................... 217.7.8 word ...................................................................................................... 217.7.9 long ....................................................................................................... 217.7.10 unsigned long ...................................................................................... 217.7.11 short ................................................................................................... 227.7.12 float .................................................................................................... 227.7.13 double ................................................................................................ 22

    7.8 Vetores ....................................................................................................... 227.8.1 Criando e declarando um vetor ................................................................. 23

    7.9 string (vetor do tipo char) .............................................................................. 237.10 Vetores de string ....................................................................................... 247.11 Operadores ............................................................................................... 24

    7.11.1 Atribuio ............................................................................................ 257.11.2 Aritmticos .......................................................................................... 257.11.3 Operadores Relacionais ......................................................................... 267.11.4 Operadores Lgicos .............................................................................. 267.11.5 Operadores Lgicos Bit a Bit .................................................................. 27

    7.12 Associao de operadores ........................................................................... 297.13 if .............................................................................................................. 307.14 switch....................................................................................................... 317.15 for ........................................................................................................... 327.16 while ........................................................................................................ 337.17 do - while ................................................................................................. 347.18 Diretivas do compilador .............................................................................. 34

    7.18.1 #define ............................................................................................... 347.18.2 #include .............................................................................................. 35

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    4/70

    4

    4

    www.facebook.com/fbseletronica

    7.19 Funes do ARDUINO ................................................................................. 367.19.1 Funes de Entrada/Sada Digital ........................................................... 367.19.2 Funes de Entrada Analgica ................................................................ 387.19.3 Funes de temporizao ...................................................................... 397.19.4 Funes de bit e byte ............................................................................ 427.19.5 Funes matemticas............................................................................ 447.19.6 Funes de Converso .......................................................................... 47

    8 Projetos ............................................................................................................ 508.1 Sada digital - Piscar LED ............................................................................... 508.2 Entrada Digital Lendo tecla .......................................................................... 538.3 Entrada analgica Lendo o valor em um potencimetro ................................... 598.4 Comunicao Serial ....................................................................................... 628.5 6.5. Sada PWM ............................................................................................ 68

    9 REFERNCIAS ................................................................................................... 70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    5/70

    5

    5

    www.facebook.com/fbseletronica

    1SOBRE A FBSELETRNICAA FBS Eletrnica uma empresa que tem o objetivo de dar suporte para quem estcomeando na rea de eletrnica.

    Acesse nossos contatos na Internet:

    Blog:www.fbseletronica.wordpress.com

    Loja:www.fbseletronica.com.br

    Facebook:www.facebook.com/fbseletronica

    2TERMOS DE USOEste material de domnio pblico podendo ser livremente distribudo.

    proibida a venda deste material.

    Pode ser usado livremente, s pedimos que seja citadas na referncias quando usada paracompor outros artigos.

    E-mail do desenvolvedor:[email protected]

    http://www.fbseletronica.wordpress.com/http://www.fbseletronica.wordpress.com/http://www.fbseletronica.wordpress.com/http://www.fbseletronica.com.br/http://www.fbseletronica.com.br/http://www.fbseletronica.com.br/http://www.facebook.com/fbseletronicahttp://www.facebook.com/fbseletronicahttp://www.facebook.com/fbseletronicamailto:[email protected]:[email protected]:[email protected]:[email protected]://www.facebook.com/fbseletronicahttp://www.fbseletronica.com.br/http://www.fbseletronica.wordpress.com/
  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    6/70

    6

    6

    www.facebook.com/fbseletronica

    3OBJETIVOS

    O objetivo desta apostila apresentar a plataforma ARDUINO. Ser baseada na

    plataforma ARDUINO UNO onde sero abordados os conceitos bsicos de hardware e

    software com exemplos prticos.

    4 INTRODUOA plataforma Arduino est presente em muitos artigos na internet, porm para quem est

    iniciando na programao dessa plataforma geralmente sente dificuldade de um ter um

    ponto de partida. A fonte de principal de pesquisa deve ser o site do prprio Arduino, l

    esto as informaes bsicas para iniciar. Um fator que bloqueia os iniciantes o fato desse

    site ser em ingls. Essa apostila usa como referncia principal o site do Arduino, e o

    objetivo apresentar para os iniciantes um ponto de partida para essa plataforma.

    abordado a teoria bsica da plataforma, assim como a linguagem de programao e so

    apresentados no captulo final alguns exemplos para colocar em prtica.

    Esperamos que essa apostila colabore com a comunidade que a cada dia que passa cresce

    mais.

    Bons estudos!!

    Caso encontrem erros (tero muitos), por gentileza nos enviem um e-mail para correo.

    e-mail:[email protected]

    mailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    7/70

    7

    7

    www.facebook.com/fbseletronica

    5OQUE ARDUINO?

    ARDUINO uma plataforma flexvel open-source de hardware e software paraprototipagem eletrnica. destinada a designers, hobbistas, tcnicos, engenheiros epessoas interessadas em criar projetos ou ambientes interativos.

    ARDUINO pode receber entradas de uma variedade de sensores e pode atuar oambiente ao seu redor por controladores de iluminao, motores e uma infinidade deatuadores. O microcontrolador presente na placa programado usando a linguagem deprogramao do ARDUINO (baseada em wiring) e o ambiente de desenvolvimentoARDUINO (baseada em processing). Os projetos com ARDUINO podem ser STAND-ALONE ou comunicar com um software rodando no PC. Os kits de desenvolvimentopodem ser montados pelo prprio projetista ou podem ser compradas e o software pode

    ser baixado gratuitamente no site do ARDUINO. Os projetos de hardware parareferncias esto disponveis em www.arduino.cc, sob licena open-source, onde estlivre para adaptao as suas necessidades.

    O ARDUINO diferente das outras plataformas presentes no mercado devido aosseguintes fatores:

    um ambiente multiplataforma, podendo ser executado em Windows, Macintoshe Linux;

    Tem por base um ambiente de fcil utilizao baseado em processing; Pode ser programado utilizando um cabo de comunicao USB onde geralmente

    no necessria uma fonte de alimentao;

    Possui hardware e software open-source, facilitando a montagem do seu prpriohardware sem precisar pagar nada aos criadores originais;

    Hardware de baixo custo;

    Grande comunidade ativa de usurios;

    Ambiente educacional, ideal para iniciantes que desejam resultados rpidos.

    http://www.arduino.cc/http://www.arduino.cc/http://www.arduino.cc/
  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    8/70

    8

    8

    www.facebook.com/fbseletronica

    6PLATAFORMA DE DESENVOLVIMENTO ARDUINO

    O ARDUINO como foi visto anteriormente e formado por dois componentes principais:Hardware e software. O hardware composto por uma placa de prototipagem na qual soconstrudos os projetos. O software uma IDE, que executado em um computador onde feita a programao, conhecida como sketch, na qual ser feita upload para a placa deprototipagem ARDUINO, atravs de uma comunicao serial. O sketch feito pelo projetistadir placa o que deve ser executado durante o seu funcionamento.

    6.1Hardware do ARDUINO

    A placa do ARDUINO um pequeno circuito microcontrolado, onde colocado todos oscomponentes necessrios para que este funcione e se comunique com o computador.Existem diversas verses de placas que so mantidas sob licena open-source. Nestaapostila ser utilizada a placa ARDUINO UNO, porm as instrues aprendidas aqui podemser aplicadas a outras placas. Em seguida apresentada a placa ARDUINO UNO:

    Conforme visto na imagem acima a placa Arduino UNO possui diversos conectores queservem para interface com o mundo externo. A seguir e dada uma explicao de como cadapino da placa pode ser utilizado.

    14 pinos de entra e sada digital (pinos 0-13):

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    9/70

    9

    9

    www.facebook.com/fbseletronica

    o Esses pinos podem ser utilizados como entradas ou sadas digitais deacordo com a necessidade do projeto e conforme foi definido no sketchcriado na IDE.

    6 pinos de entradas analgicas (pinos 0 - 5):

    o Esses pinos so dedicados a receber valores analgicos, por exemplo, atenso de um sensor. O valor a ser lido deve estar na faixa de 0 a 5 V ondesero convertidos para valores entre 0 e 1023.

    6 pinos de sadas analgicas (pinos 3, 5, 6, 9, 10 e 11):

    o So pinos digitais que podem ser programados para ser utilizados comosadas analgicas, utilizando modulao PWM.

    A alimentao da placa pode ser feita a partir da porta USB do computador ou atravsde um adaptador AC. Para o adaptador AC recomenda-se uma tenso de 9 volts com

    pino redondo de 2,1 mm e centro positivo.

    6.2 Software do ARDUINO

    O software para programao do ARDUINO uma IDE que permite a criao deSketches para a placa ARDUINO. A linguagem de programao modelada a partir dalinguagem processing(www.processing.org). Quando pressionado o boto upload da IDE,o cdigo escrito traduzido para a linguagem C e transmitido para o compilador avr-gcc,

    que realiza a traduo dos comandos para uma linguagem que pode ser compreendida pelomicrocontrolador.

    O Ciclo de programao do ARDUINO pode ser dividido da seguinte maneira:

    1. Conexo da placa a uma porta USB do computador;

    2. Desenvolvimento de um sketch com comando para a placa;

    3. Upload do sketch para a placa, utilizando a comunicao USB.

    4. Aguardar a reinicializao, aps ocorrer execuo do sketch criado.

    A partir do momento que o software gravado no ARDUINO no precisa mais docomputador: o ARDUINO funciona como um computador independente e conseguirsozinho executar o sketch criado, desde que seja ligado a uma fonte de energia.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    10/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    11/70

    11

    11

    www.facebook.com/fbseletronica

    Sob a Toolbar h uma guia, ou um conjunto de guias, com o nome do arquivo dosketch. Tambm h um boto posicionado no lado direito que habilita o serial monitor. Aolongo do topo h uma barra de menus, com os itens File, Edit, Sketch, Tools e Help. Osbotes na Toolbar fornecem acesso conveniente s funes mais utilizadas dentro dessesmenus.

    Abaixo so identificados os cones de atalho da IDE:

    Verify

    o Verifica se existe erro no cdigo digitado.

    Uploado Compila o cdigo e grava na placa Arduino se corretamente conectada;

    New

    o Cria um novo sketch em branco.

    Open

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    12/70

    12

    12

    www.facebook.com/fbseletronica

    o Abre um sketch, presente no sketchbook.

    Save

    o Salva o sketch ativo

    Seria monitor

    o Abre o monitor serial.

    Os demais comandos presentes na barra de menus podem ser consultados atravs do helpdo IDE.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    13/70

    13

    13

    www.facebook.com/fbseletronica

    7PROGRAMAO

    7.1Estrutura de um programa ARDUINOA estrutura bsica de um programa para ARDUINO extremamente simples e dividida emdois blocos de funes. Primeiro bloco de funo chamado de setup () e o segundo chamado de loop (). A estrutura exibida a seguir:

    void setup()

    {

    procedimentos;

    }

    void loop()

    {

    procedimentos;

    }

    A funo setup() responsvel pela configurao inicial do ARDUINO e a funo loop() responsvel pela execuo das tarefas. Ambas as funes so requeridas para o corretofuncionamento do ARDUINO.

    A funo setup segue logo abaixo da declarao de variveis no inicio do programa. Esta

    a primeira funo a ser executada e usada para configurao dos pinos ou inicializao dacomunicao serial.

    A funo loop vem em seguida e inclui os comandos que sero executados durante ofuncionamento do ARDUINO, por exemplo: leitura de entradas, acionamento de sadas, etc.Essa a funo principal do ARDUINO onde executada a maior parte dos comandos.

    7.2 FunesFuno um bloco de cdigo que possui um nome e procedimentos que so

    executados quando a mesma chamada. As funes setup() e loop() foram explicadosanteriormente e as demais funes do compilador sero apresentadas mais a frente nestecaptulo.

    Funes customizadas podem ser escritas para simplificar em tarefas repetitivas reduzindorepeties na programao. Funes so declaradas primeiramente definindo o seu tipo,que dir qual o tipo de dado retornado pela funo. Depois de definido o tipo de retorno

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    14/70

    14

    14

    www.facebook.com/fbseletronica

    deve dar um nome a funo e definir entre parntese se algum parmetro deve ser passadopara a funo, conforme exemplo de cdigo a seguir:

    tipo NomedaFuno(parametros)

    {

    Comandos;

    }

    A seguinte funo do tipo inteiro chamada delayVal() usada para atribuir um valor noprograma atravs da leitura de um potencimetro. Dentro do bloco da funoprimeiramente declarado a varivel local do tipo inteira chamada v, depois atribudo ovalor lido do potencimetro pela funo analogRead(pot) que retorna um valor entre 0 e

    1023, depois este valor divido por 4 para dar um resultado final entre 0 e 255.Finalmente retornado este valor para o programa principal.

    int delayVal()

    {

    int v; // create temporary variable 'v'

    v = analogRead(pot); // read potentiometer value

    v /= 4; // converts 0-1023 to 0-255

    return v; // return final value

    }Os seguintes smbolos so utilizados na construo de funes:

    { }as chaves so utilizadas para delimitar os blocos de funes, dentro das chaves seencontram os procedimentos da funo:

    tipo funo ()

    {

    procedimentos;

    }

    ; - ponto e vrgula so utilizados para marcar o final do procedimento;int x = 13; // declara a varivel 'x' como um inteiro igual a 13

    //- qualquer caractere despois das duas barras ignorado pelo compilador, utilizado paracomentrios de apenas uma nica linha.

    // comentrio de linha simples como no exemplo acima

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    15/70

    15

    15

    www.facebook.com/fbseletronica

    /*........*/ -qualquer texto entre esses smbolos ignorado pelo compilador, usadopara comentar varias linhas.

    /* comentrio de mltiplas

    Linhas geralmente utilizado

    Para documentao ou para

    Ignorar uma sequncia de

    Cdigos*/

    7.3 Constantes

    A linguagem Arduino possui algumas constantes pr-definidas que auxiliam naprogramao. So divididas em grupos:

    7.3.1 Definindo estados lgicos, true(verdadeiro) e false(falso)Existem duas constantes para determinar valores booleanos na linguagem ARDUINO: true efalse.

    false

    Define um valor falso, ou seja, o valor booleano 0.

    true

    Define valores verdadeiros, ou seja, o valor booleano 1.

    7.3.2 Definindo Nvel lgico alto e baixo nos pinos

    Quando se trabalha com pinos de entrada ou sada digital apenas dois valores sopossveis: HIGH(alto, 1, 5 Volts) e LOW(baixo, 0, 0 Volts).

    7.3.3 Definindo direo de um pino digital e Pull-up

    Pinos digitais podem ser usados como INPUT_PULLUP INPUT, ou OUTPUT. Mudando umpino com pinMode () muda o comportamento eltrico do pino.

    Para configura um pino como entrada utiliza a constante INPUT com a funo pinMode().

    Pode-se tambm colocar o pino como entrada e habilitar o resistor interno de o pull-up,dessa forma o pino passa a ser entrada e tem nvel lgico 1 quando estiver aberto. Utiliza-se a constante INPUT_PULLUP na funo pinMode().

    Para configurar um pino como sada digital utiliza-se a constante OUTPUT na funopinMode().

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    16/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    17/70

    17

    17

    www.facebook.com/fbseletronica

    {for (int i=0; i

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    18/70

    18

    18

    www.facebook.com/fbseletronica

    pinMode(pin, OUTPUT);attachInterrupt(0, blink, CHANGE);

    }

    void loop(){

    digitalWrite(pin, state);}void blink(){

    state = !state;}

    7.6.3 const

    um qualificador que modifica o comportamento da varivel, tornando uma varivel "read-only". Isto significa que a varivel pode ser utilizada tal como qualquer outra varivel doseu tipo, mas o seu valor no pode ser alterado. Voc receber um erro do compilador sevoc tentar atribuir um valor a uma varivel const.

    Constantes definidas com a palavra-chave const obedecer as regras de escopo de variveisque governam outras variveis.

    Exemplo:

    const float pi = 3.14;float x;

    // ....

    x = pi * 2; // legal usar const em expresses matemticas

    pi = 7; // illegal - you can't write to (modify) a constant

    Voc pode usar const ou #definepara criar constates numricas ou constantes de textos.Para vetores voc vai precisar usar const. Em geral prefervel a consta #defineparadefinir constantes.

    7.7Tipos de dados

    As variveis podem assumir diferentes tipos de dados, tais tipos determinaro suacapacidade e numerao que poder ser utilizada. Os tipos bsicos de dados soapresentados a seguir:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    19/70

    19

    19

    www.facebook.com/fbseletronica

    7.7.1 void

    A palavra reservada void usada em declaraes de funes. Este tipo indica que a funono retorna nenhum valor quando executada.

    Exemplo:// as funes setup e loop no retornam valores quando so executadas

    void setup()

    {

    // ...

    }

    void loop()

    {

    // ...

    }

    7.7.2 Boolean

    O tipo booleanpode representar valores booleanos, verdadeiro (true) ou falso(false). Umtipo booleanocupa um byte da memria.

    Exemplo:

    int LEDpin = 5; // LED no pino 5int switchPin = 13; // chave no 13

    boolean running = false; //varivel booleana

    void setup(){

    pinMode(LEDpin, OUTPUT); //configura pino como sadapinMode(switchPin, INPUT); //configura pino como entradadigitalWrite(switchPin, HIGH); //Liga pullup do pino

    }

    void loop(){

    if (digitalRead(switchPin) == LOW) //se pino em nvel baixo{ // switch is pressed

    // pullup keeps pin high//normally

    delay(100); // delay to debounce switchrunning = !running; // toggle running variabledigitalWrite(LEDpin, running) // indicate via LED

    }}

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    20/70

    20

    20

    www.facebook.com/fbseletronica

    7.7.3 char

    O tipo char armazena valores de 1 byte. Caracteres so codificados em um nico byte e soespecificados na tabela ASCII. O tipo char sinalizado e representa nmeros de -128 a127. Para nmeros no sinalizados usa-se o tipo byte.

    Exemplo

    char myChar = 'A';

    char myChar = 65; // both are equivalent

    7.7.4 unsigned char

    unsigned char armazena valores de 1 byte no sinalizados, mesmo que utiliza o tipo byte.A faixa de valores vai de 0 a 255.

    Para programao consistente no estilo Arduino o tipo byte preferido para esse tipo de

    dado.

    Exemplo

    unsigned char myChar = 240;

    7.7.5 byte

    Armazena valores de 8 bits no sinalizados de 0 a 255.

    Exemplo

    byte b = B10010; // B10010 = 18 decimal

    7.7.6 int

    Inteiros so tipos primrios de armazenamento. No Arduino Uno ( e em outras placasbaseadas em ATMEGA) um int armazena valores de 16 bits(2 bytes). Esse tipo compreendevalores de -32768 a 32767. J no Arduino Due, um int armazena valores de 32 bits (4bytes) que compreende valores de -2147483648 a 2,147483647.

    Exemplo:

    int ledPin = 13;

    Quando o valor contido na varivel excede o seu valor mximo o seu valor reiniciado parao mnimo. Exemplo

    int x;

    x = -32768; //atribui o valor mnimo a varivel x

    x = x - 1; // x agora contm o valor mximo: 32,767

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    21/70

    21

    21

    www.facebook.com/fbseletronica

    x = 32767;

    x = x + 1; // x agora contm o valor mnimo: -32,768

    7.7.7

    unsigned intNo Arduino UNO e em outras placas baseadas em ATMEGA armazenam valores de 16 bitsno sinalizados, ou seja, apenas valores negativos de 0 a 65535.

    O Arduino DUE armazena valores de 32 bits no sinalizados, e compreende a faixa de 0 a4294967295.

    Exemplo

    unsigned int ledPin = 13;

    7.7.8 wordO tipo armazena valores de 16 bis no sinalizados que compreendem valores de 0 a 65535.

    Exemplo

    word w = 10000;

    7.7.9 long

    O tipo de dado Long armazena valores inteiros sinalizados de 32 bits (4 bytes) quecompreendem a faixa de -2147483648 a 2147483647

    Exemplo

    long speedOfLight = 186000L;

    7.7.10 unsigned long

    O tipo unsigned long armazena valores de 32 bits(4 bytes) no sinalizados quecompreendem a faixa de 0 a 429967295.

    Exemplo

    unsigned long time;

    void setup()

    {

    Serial.begin(9600);

    }

    void loop()

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    22/70

    22

    22

    www.facebook.com/fbseletronica

    {

    Serial.print("Time: ");

    time = millis();

    Serial.println(time);

    delay(1000);

    }

    7.7.11 short

    O tipo short armazena valores de 16 bits (2 bytes) sinalizados.

    Exemplo

    short ledPin = 13;

    7.7.12 float

    O tipo float armazena valor em ponto flutuante, ou seja, um valor que possui casasdecimais. O tipo float armazena valores de 32 bits (4 bytes) e compreendem a faixa de -3,4028235 E+38 a 3,4028235 E+38.4.

    A matemtica em ponto flutuante requer muito processamento, por exemplo, se for feitauma operao em ponto flutuante dentro de um loop, ocorrer um atraso maior, do que sefosse feita uma operao com inteiros. Deve-se ficar atento ao uso do tipo float tanto naquesto de espao de memria quanto no processamento. As funes de manipulao dotipo float requerem muito processamento,

    Exemplos

    float myfloat;

    float sensorCalbrate = 1.117;

    7.7.13 double

    O tipo double tambm armazena valores de ponto flutuante, porm no Arduino Uno eoutras placas baseadas em ATMEGA esse tipo exatamente o mesmo que o tipo float, semganho de preciso, j no Arduino Due o tipo double pussui 64 bits (8 bytes) provendo maiorpreciso, seu valor mximo pode chegar a 1,7976931348623157 x 10308.

    7.8VetoresUma matriz uma coleo de variveis que so acessadas por meio de um ndice. Matrizesem um programa em linguagem C, na qual o Arduino baseado, pode ser um pouco

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    23/70

    23

    23

    www.facebook.com/fbseletronica

    complicado. Mas utilizando uma matriz de linha simples, conhecida como vetores, podetornar a programao mais simples.

    7.8.1 Criando e declarando um vetor

    Todos os mtodos abaixo so vlidos para criar(declarar) um vetor: Pode-se declara um vetor sem inicializa-lo:

    int myInts[6];

    Pode-se inicializar um vetor sem determinar o tamanho, apenas inicializando com oselementos. O compilador se encarrega de determinar o tamanho conforme aquantidade de elementos:

    int myPins[] = {2, 4, 8, 3, 6};

    Pode-se inicializar o vetor com tamanho e com as variveis:

    int mySensVals[6] = {2, 4, -8, 3, 2};

    char message[6] = "hello";

    7.9string (vetor do tipo char) um conjunto de caracteres ASCII utilizado para armazenar informaes textuais (umastring pode ser utilizada para enviar dados pela serial, ou para exibir dados em um displayLCD). Uma String utiliza um byte para cada caractere e mais um caractere nulo para indicaro fim da string.

    Possibilidade para declarao de strings:

    Declarar um vetor de char sem inicializao:

    char Str1[15];

    Declarar um vetor de char com um caractere adicional que o compilador encarregarde colocar o caractere nulo:

    char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};

    Declarar um vetor de char inicializando com todos os caracteres inclusive o caracterenulo

    char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};

    Inicializar o vetor sem tamanho determinado e atribuir uma string.O compilador seencarrega de determinar o tamanho, conforme tamanho da string atribuda eadiciona o caractere nulo automaticamente:

    char Str4[ ] = "arduino";

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    24/70

    24

    24

    www.facebook.com/fbseletronica

    Inicializar vetor com tamanho determinado e atribuir uma string para inicializar.Importante observar que o tamanho deve ser suficiente para conter o caractere nulo:

    char Str5[8] = "arduino";

    Inicializar o vetor com tamanho extra e inicializar com uma string de quantidades decaracteres menor que a quantidades de variveis no vetor:

    char Str6[15] = "arduino";

    7.10Vetores de stringMuitas vezes, conveniente, quando se trabalha com grandes quantidades de texto,configurar um vetor de string para manipulao deste texto.

    No cdigo em seguida o caractere asterisco aps o tipo char(char*) indicar que se trata de

    um vetor de string. Todos os nomes nos vetor so na verdade ponteiros para outrosvetores. Isso necessrio para criar vetores de vetores:

    Exemplo:

    char* myStrings[]={"This is string 1", "This is string 2", "This is string 3","This

    is string 4", "This is string 5","This is string 6"};

    void setup(){

    Serial.begin(9600);

    }

    void loop(){

    for (int i = 0; i < 6; i++){

    Serial.println(myStrings[i]);

    delay(500);

    }

    }

    7.11Operadores

    A linguagem C muito rica em operadores sendo possivelmente uma das linguagens commaior numero de operadores disponveis. Possui operadores encontrados em linguagens dealto nvel como operadores encontrados em linguagens de baixo nvel como o Assembly.

    Os operadores so divididos nas seguintes categorias: Atribuio, aritmticos,relacionais, lgicos, lgicos bit a bit.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    25/70

    25

    25

    www.facebook.com/fbseletronica

    7.11.1 Atribuio

    O operador de atribuio em linguagem C o =, que utilizado para atribuir

    determinado valor a uma varivel. Exemplo:

    x = 10;

    y = x+3;

    Verificando as linhas anteriores duas operaes de atribuio foram feitas. Primeiro foiatribudo o valor 10 a varivel x, e na segunda foi atribudo o resultado da soma entre a

    varivel x(que 10) com o valor 3, portanto ao final desta operao ser atribudo o valor13 a varivel y. A atribuio sempre feita da direita para a esquerda.

    7.11.2 Aritmticos

    So utilizados para efetuar operaes matemticas, a tabela abaixo exibe os operadoresaritmticos disponveis na linguagem C:

    OPERADOR AO+ Adio- Subtrao* Multiplicao/ Diviso% Resto de diviso inteira++ Incremento-- Decremento

    Os operadores de adio, subtrao, multiplicao e divisopossuem a mesmasfunes j conhecida em matemtica.

    O operador % utilizado para retornar o resto de uma diviso inteira. Exemplo:

    x = 5%2; //retorna para a varivel x o valor 1 que o resto de uma diviso inteira

    de 5 por 2.

    Os operadores de incremento e decremento so utilizados para adicionar ousubtrair em 1 o valor de uma varivel.

    Exemplos:

    x= 10;

    x++; //incrementa em 1 o valor da varivel x, portanto x valer 11

    x = 20;

    x--; //decrementa em 1 do valar da varivel x, portanto x valer 19

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    26/70

    26

    26

    www.facebook.com/fbseletronica

    7.11.3 Operadores Relacionais

    So utilizados em testes condicionais para determinar a relao entre dados, so osseguintes:

    OPERADOR AO> Maior que>= Maior ou igual que< Menor que

    b; //neste caso x valer 0, pois 5 menor do que 10.

    importante observar que o operador relacional de igualdade lembra bastante ooperador de atribuio. Um erro muito comum para iniciantes em linguagem C o uso dooperador de atribuio em testes relacionais. Deve-se ficar atento, pois usar o operador deatribuio ao invs do relacional de igualdade pode ocasionar erros de lgica no programa.

    7.11.4 Operadores Lgicos

    Os operadores lgicos so utilizados para realizar testes booleanos entre elementosem um teste condicional. Eles retornam verdadeiro ou falso conforme o resultado doteste. So os seguintes:

    OPERADOR AO&& AND(E)|| OR(OU)

    ! NOT(NO)

    Os operadores lgicos so muito importantes na construo de testes condicionais, comeles pode-se relacionar diversas condies em um mesmo teste. Exemplo:

    x = 10;

    y = x>>5 && x

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    27/70

    27

    27

    www.facebook.com/fbseletronica

    // maior que 5 E menor do que 20

    Esses operadores so muito utilizados em conjuntos com os operadores relacionaisem estruturas de controle.

    7.11.5 Operadores Lgicos Bit a Bit

    Os operadores Lgicos bit a bit so utilizados para operaes lgicas entre elementosou variveis. So os seguintes:

    OPERADOR AO& AND(E)| OR(OU)^ XOR (OU EXCLUSIVO)~ NOT (NO)

    >> Deslocamento direita

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    28/70

    28

    28

    www.facebook.com/fbseletronica

    OR(||)

    0x04 Hexadecimal = 1 1 1 1 0 0 0 0 binrio

    Resultado = 1 1 1 1 0 0 0 1 binrio = 0xF1 hexadecimal

    Portanto o valor armazenado em v2 ser 0xF2h ou 242d.O operador OR muito utilizado para ligar bits de variveis ou registradores.

    O operador ^(XOR)faz a operao booleana XORentre dois operandos, lembrandoque a operao XORresulta em 0 quando os valores so iguais e resulta em 1 quando osvalores so diferentes.

    int v1, v2;

    v1 = 0x50;

    v2 = v1 ^ 0x50;

    A operao ocorrer da seguinte forma:

    0x20 hexadecimal = 0 1 0 1 0 0 0 0 binrio

    XOR(^)

    0x04 Hexadecimal = 0 1 0 1 0 0 0 0 binrio

    Resultado = 0 0 0 0 0 0 0 0 binrio = 0x00hexadecimal

    Portanto o valor armazenado em v2 ser 0x00h ou 00d.

    O operador XORe muito utilizado para fazer a comparao entre variveis e teste deregistradores.

    O operador ~(NOT) faz a operao booleana NOT, ou complemento de umavarivel. Exemplo:

    int x , y;

    x = 0b00001111;

    y = ~x;

    O resultado desta operao ser:

    y = 0b11110000;

    O operador NOT muito utilizado para inverter estados de bit em variveis, registradores epinos de I/O.

    Os operadores de deslocamento so utilizados para deslocar determinadas quantidades debits para direita ou esquerda. A forma geral para o uso destes operadores :

    Valor >>quantidade de bits a ser deslocados para a direita;

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    29/70

    29

    29

    www.facebook.com/fbseletronica

    Valor

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    30/70

    30

    30

    www.facebook.com/fbseletronica

    x = x>= y

    7.13if

    O comando if utilizado para executar um comando ou bloco de comandos no caso de umadeterminada condio ser avaliada como verdadeira.

    A forma geral do comando if:

    if (condio) comandoA;

    Caso seja necessrio executar um comando se a condio for avaliada com Falsa usaa clausula elsejunto com o comando if, o comando ficar da seguinte forma:

    if (condio)

    comandoA;

    else

    comandoB;

    Desta forma possvel executar comandos conforme o resultado do teste feito.

    Pode-se executar um bloco de cdigo dentro da declarao if else, pra isso deve-selimitar com { e }, exemplo:

    if(condio){

    comandoA1; //bloco de cdigo para a condio verdadeira

    comandoaA2;...comandoAn;}else{

    comandoB1; //bloco de cdigo para a condio falsacomandoB2;...comandoBn;

    }

    Deve-se ficar claro que a clausula elseno necessria para o funcionamento do comandoif, funciona apena como uma opo para tomar uma ao se a condio testada for

    avaliada como falsa. Desta forma a maneira mais simples de seu utilizar o comandoif:if(condio) comandoA;

    H a possibilidade de aninhar diversos comandos if,um dentro do outro para executar umasequncia de testes, exemplo:

    if(condio1) comandoA;

    else if(condio2) comandoB;

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    31/70

    31

    31

    www.facebook.com/fbseletronica

    else if(condio3) comandoC;

    Neste caso ser avaliada a condio1, se verdadeira ser executado o comandoA efinalizada a estrutura de teste, caso a condio1 seja falsa ser avaliada a condio2,

    caso verdadeira ser executado o comandoBe finalizado a estrutura, caso a condio2seja falsa ser avaliada a condio3e assim por diante at finalizarem os testes.

    Tambm possvel utilizar estruturas if-else dentro de estruturas if-else, como porexemplo:

    if(condio1){

    if(condio2){

    comandoA;comandoB;

    }

    else{

    comandoC;comandoD;

    }}else{

    if(condio3){

    comandoE;comandoF;

    }else{

    comandoG;comandoH;

    }}

    Neste caso a condio1 avaliada caso verdadeira ser avaliada a condio2. Casoa condio1seja avaliada como falsa ser avaliada a condio3.

    7.14switch

    Em alguns caso, como na comparao de uma determinada varivel com diversos valoresdiferentes o comando if pode torna-se extenso, confuso e pouco eficiente.

    O comando switch permite a realizao de comparaes sucessivas de uma formaelegante, clara e eficiente. O formato do comando switch:

    switch(varivel){

    case constante1:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    32/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    33/70

    33

    33

    www.facebook.com/fbseletronica

    ComandoN;}

    Cada uma das trs sees do comandoforpossui uma funo distinta conforme emseguida:

    Inicializao: esta seo conter uma expresso valida utilizada normalmente prainicializar a varivel de controle do lao.

    Condio:esta seo pode conter a condio a ser avaliada para deciso de continuidadedo lao de repetio. Enquanto a condio for avaliada como verdadeira o lao permanecerem execuo.

    Incremento: esta seo pode conter uma declarao para incremento da varivel decontrole do lao.

    O funcionamento bsico do comando for o seguinte:

    Primeiramente a seo de inicializao executada, em seguida a condio testada

    e se for verdadeira o comando ou bloco de comandos so executados, aps o fim doscomandos o lao executa a seo de incremento da varivel de controle.

    possvel utilizar a clausula break para encerrar a execuo do lao forindependente de a condio de repetio ser avaliada, desta forma quando o comandobreak for executado dentro de um lao de repetio for, este lao interrompidoimediatamente.

    7.16whileOutro tipo de estrutura de repetio da linguagem C comando while, que

    utilizado para repetir um comando ou um conjunto de instrues enquanto uma condiofor avaliada como verdadeira. No comando while existe apenas o teste condicional,diferentemente do comando forque possui ciclos definidos. A estrutura do comando while a seguinte:

    while(condio)

    {

    comando1;

    comando2;

    ...

    comandoN;

    }

    O funcionamento do comando while ocorre de uma forma bem simples.Primeiramente a condio avaliada, caso a condio seja avaliada como verdadeira ocomando ou o bloco de comandos executado em seguida a condio avaliada

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    34/70

    34

    34

    www.facebook.com/fbseletronica

    novamente. Caso seja avaliada como verdadeira o lao repetido, quando avaliada comofalsa o lao interrompido.

    Assim como no comando for possvel usar a clausula break para interromperprematuramente um lao while.

    7.17do - while

    O comando do-while utilizado para criar uma estrutura de repetio com funcionamentoligeiramente diferente do while e fortradicionais.

    De fato, a diferena entre a estrutura while e a estrutura do-while que esta ltimarealiza a avaliao da condio de teste no final de cada ciclo de iterao do lao de

    repetio, ao contrrio do comando while, que realiza o teste no incio de cada ciclo.A forma geral da estrutura do-while :

    docomando;while (condio);

    Oudo{

    comandoA;comandoB;

    ...comandoN;

    } while (condio);

    O funcionamento da estrutura do-while o seguinte: o comando ou bloco de comandos executado e logo depois ser avaliada a condio de teste, caso ela seja verdadeira, seriniciada uma nova iterao do ciclo, caso seja falsa, o lao terminado.

    Assim como nos comandos fore whilepode-se utilizar a clausula breakpara interrompero lao do-while.

    7.18Diretivas do compilador

    7.18.1 #define

    uma ferramenta que permite ao programador dar um nome a um valor constante antesde de iniciar a programao. O compilador substituir esse a constante no lugar destenome na hora da compilao. Isto facilita na programao e deixa o cdigo mais agradvel.

    A sintaxe mesma da linguagem C:

    #define constantName valor

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    35/70

    35

    35

    www.facebook.com/fbseletronica

    Exemplo:

    #define ledPin 3

    7.18.2 #include utilizado para incluir bibliotecas externas ao scketch. Dessa forma pode-se acessar umgrande nmero de bibliotecas seja ela do padro da linguagem C ou as feitas especialmentepara Arduino, ou at mesmo bibliotecas feitas pelo programador.

    Exemplo:

    #include

    Obs.: Assim como a diretiva #define no se coloca;no final.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    36/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    37/70

    37

    37

    www.facebook.com/fbseletronica

    pino: Numero correspondente ao pino;

    valor:HIGHOULOW

    Exemplo

    int ledPin = 13; // LED connected to digital pin 13

    void setup(){

    pinMode(ledPin, OUTPUT); // sets the digital pin as output}

    void loop(){

    digitalWrite(ledPin, HIGH); // sets the LED ondelay(1000); // waits for a seconddigitalWrite(ledPin, LOW); // sets the LED offdelay(1000); // waits for a second

    }

    digitalRead()

    L o valor presente e um pino digital. Este valor pode ser HIGH ou LOW.

    Sintaxe:

    digitalRead(pino)

    Parmetros:

    Pino: valor correspondente ao pino que se deseja ler.

    Retorno

    HIGH ou LOW.

    Exemplo:

    int ledPin = 13; // LED connected to digital pin 13int inPin = 7; // pushbutton connected to digital pin 7int val = 0; // variable to store the read value

    void setup(){

    pinMode(ledPin, OUTPUT); // sets the digital pin 13 as outputpinMode(inPin, INPUT); // sets the digital pin 7 as input}void loop(){

    val = digitalRead(inPin); // read the input pindigitalWrite(ledPin, val); // sets the LED to the button's value

    }

    http://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.html
  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    38/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    39/70

    39

    39

    www.facebook.com/fbseletronica

    Exemplo:

    int analogPin = 3; // potentiometer wiper (middle terminal) connected to analogpin 3

    // outside leads to ground and +5Vint val = 0; // variable to store the value read

    void setup(){

    Serial.begin(9600); // setup serial}

    void loop(){

    val = analogRead(analogPin); // read the input pinSerial.println(val); // debug value

    }

    7.19.3 Funes de temporizaomillis()

    Retorna o numero de milissegundos desde que a placa comeou a executar o programa.Este nmero retorna a zero aps aproximadamente 50 dias.

    Sintaxe:

    time = millis();

    Parmetros:

    Nenhum

    Retorno:

    unsigned long

    Exemplo:

    unsigned long time;

    void setup(){Serial.begin(9600);

    }void loop(){

    Serial.print("Time: ");time = millis();//prints time since program startedSerial.println(time);// wait a second so as not to send massive amounts of datadelay(1000);

    }

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    40/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    41/70

    41

    41

    www.facebook.com/fbseletronica

    Exemplo:

    int ledPin = 13; // LED connected to digital pin 13

    void setup(){

    pinMode(ledPin, OUTPUT); // sets the digital pin as output}

    void loop(){

    digitalWrite(ledPin, HIGH); // sets the LED ondelay(1000); // waits for a seconddigitalWrite(ledPin, LOW); // sets the LED offdelay(1000); // waits for a second

    }

    delayMicroseconds()

    Pausa o programa pelo tempo em microssegundos passado no parmetro.

    O valor mximo que produz um valor preciso 16383.

    Sintaxe:

    delayMicroseconds(us)

    Parmetros:

    us: valor em microssegundos que se deseja esperar(unsigned int)

    Exemplo:int outPin = 8; // digital pin 8

    void setup(){

    pinMode(outPin, OUTPUT); // sets the digital pin as output}

    void loop(){

    digitalWrite(outPin, HIGH); // sets the pin ondelayMicroseconds(50); // pauses for 50 microsecondsdigitalWrite(outPin, LOW); // sets the pin off

    delayMicroseconds(50); // pauses for 50 microseconds}

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    42/70

    42

    42

    www.facebook.com/fbseletronica

    7.19.4 Funes de bit e byte

    lowByte()

    Retorna o byte menos significativos de uma varivel

    Sintaxe

    lowByte(x)

    Parmetros

    x: um valor de qualquer tipo

    highByte()

    Retorna o byte mais significativo de uma varivel.Sintaxe

    highByte(x)

    Parmetros

    x: um valor de qualquer tipo

    bitRead()

    L um bit de um numero

    Sintaxe

    bitRead(x, n)

    Parmetros

    x: varivel que deseja ser lido o bit

    n: a posio do do bit na varivel.

    Retorno

    O valor do bit (0 ou 1).

    bitWrite()

    Escreve um bit em uma varivel.

    Sintaxe:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    43/70

    43

    43

    www.facebook.com/fbseletronica

    bitWrite(x, n, b)

    Parmetros

    x:

    varivel que deseja ser escrito o bit

    n: posio do bit a ser escrito.

    b: o valor do bit (0 or 1)

    bitSet()

    Coloca em 1 o bit de uma varivel.

    Sintaxe:

    bitSet(x, n)

    Parmetros

    x: a varivel que se deseja manipular

    n: posio do bit que se deseja colocar em 1

    bitClear()

    Colocar em 0 o bit desejado.

    Sintaxe

    bitClear(x, n)

    Parametros

    x: a varivel que se deseja manipular

    n: posio do bit que se deseja colocar em 0

    bit()

    Calcula o valor de um especifico bit.

    Sintaxe:bit(n)

    Parmetros:

    n: a posio do bit que deseja calcular o valor.

    Retorno:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    44/70

    44

    44

    www.facebook.com/fbseletronica

    O valor do bit.

    7.19.5 Funes matemticas

    min(x, y)

    Retorna o menor dos dois nmeros.

    Parmetros

    x: o primeiro valor a ser comparado

    y: o segundo valor a ser comparado

    Retorno

    O menor dos dois nmeros passados

    Exemplo

    sensVal = min(sensVal, 100); //verifica se sensval menor que se 100 se maior

    //garante que no ultrapasse 100

    max(x, y)

    Descrio

    Retorna o maior de dois nmeros.

    Parmetros

    x: o primeiro valor a ser comparado

    y: o segundo valor a ser comparado

    Retorno

    O maior entre os dois nmeros.

    Exemplo

    sensVal = max(senVal, 20); // garante que sensVal maior que 20

    abs(x)

    Calcula o valor absoluto de um numero.

    Parmetros

    x: o numero

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    45/70

    45

    45

    www.facebook.com/fbseletronica

    constrain(x, a, b)

    Restringe um nmero para estar dentro de um intervalo.

    Parmetros

    x: O numero que deseja restringir;

    a: meno valor do intervalo

    b: maior valor do intervalo

    Retorno

    x: sexestiver entre a e b

    a: se x menor quea

    b: sex maior queb

    Exemplo

    sensVal = constrain(sensVal, 10, 150);

    // limits range of sensor values to between 10 and 150

    map(value, fromLow, fromHigh, toLow, toHigh)

    Re-mapeia um nmero a partir de um intervalo para o outro. Isto , um valor de fromLowficaria mapeada para toLow, um valor de fromHigh ficaria mapeado para toHigh.

    No restringe os valores dentro do intervalo, Por que valores fora do intervalo as vezes sodesejados e uteis. A funo constrain () pode ser usada antes ou aps esta funo, se oslimites para os intervalos so desejados.

    Note que os limites inferiores pode ser maior ou menor do que os "limites superiores" demodo que o map () pode ser usado para inverter uma srie de nmeros, por exemplo

    y = map(x, 1, 50, 50, 1);

    A funo tambm lida com nmeros negativos, como no exemplo abaixo

    y = map(x, 1, 50, 50, -100);

    A funo map() usa matemtica inteiro por isso no ir gerar fraes. Restos fracionriosso truncados, e no so arredondados.

    Parmetros

    value: numero para mapear

    fromLow: limite inferior da faixa atual

    fromHigh: limite superior da faixa atual

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    46/70

    46

    46

    www.facebook.com/fbseletronica

    toLow: limite inferior da faixa futura

    toHigh:limite superior da faixa futura

    Retorno

    O valor Re-mapeado

    Exemplo

    /* Map an analog value to 8 bits (0 to 255) */

    void setup() {}

    void loop()

    {

    int val = analogRead(0);

    val = map(val, 0, 1023, 0, 255);

    analogWrite(9, val);

    }

    pow(base, exponent)

    Calcula o valor de um nmero elevado a uma potncia. pow() pode ser usado para elevarum nmero a uma potncia fraccionada. Isto til para a gerao valores de mapeamentoexponencial ou curvas.

    Parmetros

    base: o numero da base (float)

    exponent: o numero do expoente (float)

    Retorno

    Resultado da operao (double)

    sqrt(x)

    Calcula a raiz quadrada de um numero.

    Parmetros

    x: o numero, pode ser de qualquer tipoRetorno

    O resultado da operao(double)

    sin(rad)

    Calcula o seno de um ngulo(radianos). O resultado ser entre -1 e 1.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    47/70

    47

    47

    www.facebook.com/fbseletronica

    Parmetros

    rad: ngulo em radianos(float)

    Retorno

    Seno do ngulo.(double)

    cos(rad)Calcula o Cosseno de um ngulo(radianos). O resultado ser entre -1 e 1.

    Parmetros

    rad: ngulo em radianos(float)

    Retorno

    Cosseno do ngulo.(double)

    tan(rad)

    Calcula a tangente de um ngulo (radianos). O resultado estar entre menos infinito e maisinfinito.

    Parmetros

    rad: ngulo em radianos(float)

    Retorno

    Tangente do ngulo. (double)

    7.19.6 Funes de Converso

    char()

    Converte o valor para o tipo char.

    Sintaxe

    char(x)

    Parmetros

    x: valor de qualquer tipo

    Retorno

    char

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    48/70

    48

    48

    www.facebook.com/fbseletronica

    byte()

    Converte um valor para o tipo byte

    Sintaxe

    byte(x)

    Parmetros

    x: um valor de qualquer tipo

    Retorno

    byte

    int()

    Converte um valor para o tipo int

    Sintaxe

    int(x)

    Parmetros

    x: um valor de qualquer tipoRetorno

    Int

    word()

    Converte um valor em um dado do tipo word ou cria uma word a partir de dois bytes.

    Sintaxe

    word(x)word(h, l)

    Parmetros

    x: um valor de qualquer tipo.

    h: Parte alta da word

    l: parte baixa da word

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    49/70

    49

    49

    www.facebook.com/fbseletronica

    Retorno

    Word

    long()

    Converte um valor para o tipo de dado long.

    Sintaxe

    long(x)

    Parmetros

    x: valor a ser convertido

    Retornolong

    float()

    Converte um valor para o tipo de dado float.

    Sintaxe

    float(x)

    Parmetros

    x: valor de qualquer tipo

    Retorno

    float

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    50/70

    50

    50

    www.facebook.com/fbseletronica

    8PROJETOS

    A seguir sero apresentadas algumas aplicaes bsicas com o ARDUINO, aplicando napratica as funes estudadas anteriormente. Sero exibidos os conceitos com exemplosassim como a proposta de exerccios.

    8.1Sada digital - Piscar LED

    O exemplo mais simples para iniciar a programao do Arduino, que pode serconsiderado como o conhecido Hello World das linguagens de programao, consiste emacionar um LED atravs de uma sada digital.

    A placa Arduino Uno j possui um Led ligado ao pino digital 13 que pode ser utilizadopara o teste, a ligao desse LED exibida a seguir:

    Porm podemos, conforme figura a seguir, ligar um LED ao pino 13 no protoboard:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    51/70

    51

    51

    www.facebook.com/fbseletronica

    Para configurar o pino como sada digital utiliza a funo pinMode(). Inicialmentedefiniu-se uma varivel do tipo intcom o valor correspondente ao pino que se deseja ligaro LED, no caso o pino 13. Para definir o pino como sada usa-se a constante OUTPUT,conforme instruo abaixo:

    pinMode(led, OUTPUT);

    Para acionar a sada utiliza-se a funo digitalWrite(). Para escrever nvel lgico 1,usa-se a constante HIGH e para um nvel lgico baixo usa-se a constante LOW, conformeinstrues abaixo.

    digitalWrite(led, HIGH); // liga led

    digitalWrite(led, LOW); //desliga led

    A funo delay() utilizada para aguardar 1 segundo entre a mudana de estados.Como a funo delay() aguarda por x milissegundos so necessrios 1000 ms para se ter 1segundo:

    delay(1000); // aguarda 1 segundo

    O sketch para a programao do ARDUINO apresentado em seguida:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    52/70

    52

    52

    www.facebook.com/fbseletronica

    /*

    Pisca LEDLiga led por 1 segundo e depois desliga por mais 1 segundo

    */

    // Pino 13 tem um led conectado na maioria das placas

    int led = 13; //cria uma varivel inteira cchamada led com o numero do pino

    // rotina de configurao

    void setup() {

    pinMode(led, OUTPUT); // inicaliza pino do led como sada digital

    }

    void loop() {

    digitalWrite(led, HIGH); // liga led

    delay(1000); // aguarda 1 segundo

    digitalWrite(led, LOW); //desliga led

    delay(1000); //aguarda 1 segundo

    }

    Exerccio 1:

    Criar um sketch para acionar 4 LED, conectados aos pinos 10,11,12,13. Os LEDs devempiscar da seguinte forma:

    1. Ligar os LEDs 13, 11 e desligar os LEDs 12,10.

    2. Aguardar 1 segundo

    3.

    Desligar os LEDs 13, 11 e ligar os LEDs 12,10.4. Aguardar 1 segundo

    5. Repetir o processo.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    53/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    54/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    55/70

    55

    55

    www.facebook.com/fbseletronica

    O exemplo consiste em ler a tecla e ligar o LED quando a tecla estiver pressionada, osketch a seguir mostra a programao para leitura de uma entrada digital:

    /*

    Leitura de tecla

    O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13

    */

    const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED

    const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla

    void setup()

    {

    pinMode(ledPin, OUTPUT); // declara o pino do led como sada

    pinMode(inputPin, INPUT); // declara o pino da tecla como entrada

    }void loop()

    {

    int val = digitalRead(inputPin); // le o valor na entrada

    if (val == LOW) // se valor est em zero( tecla pressionada)

    {

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    56/70

    56

    56

    www.facebook.com/fbseletronica

    digitalWrite(ledPin, HIGH); // Liga LED indicando tecla pressionada

    }

    else

    {

    digitalWrite(ledPin, LOW); // Desliga led indicando tecla solta

    }

    }

    Os pinos de entrada possuem resistores de pull-up internos, dessa forma pode-seler o estado de uma tecla sem a necessidade de ligar um resistor, como foi feito noexemplo anterior. A figura a seguir exibe o esquema eltrico para ligar uma tecla sem oresistor de pull-up:

    O circuito fica mais limpo e mais simples de montar no protoboard, a figura a seguirexibe a ligao no protoboard para teste:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    57/70

    57

    57

    www.facebook.com/fbseletronica

    Para configura a entrada com resistor de pull-up ligado, utiliza-se a constanteINPUT_PULLUP na funo pinMode(), conforme instruo a seguir:

    pinMode(inputPin, INPUT_PULLUP); //declara o pino da tecla como

    //entrada E PULL UP habilitado

    O sketch completo para o teste da leitura de tecla sem resistor de pull up exibido aseguir:

    /*

    Leitura de tecla

    O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13

    */

    const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED

    const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    58/70

    58

    58

    www.facebook.com/fbseletronica

    void setup()

    {

    pinMode(ledPin, OUTPUT); // declara o pino do led como sada

    pinMode(inputPin, INPUT_PULLUP); // declara o pino da tecla como entrada

    }

    void loop()

    {

    int val = digitalRead(inputPin); // le o valor na entrada

    if (val == LOW) // se valor est em zero( tecla pressionada)

    {

    digitalWrite(ledPin, HIGH); // Liga LED indicando tecla pressionada

    }

    else

    {

    digitalWrite(ledPin, LOW); // Desliga led indicando tecla solta

    }

    }

    Quando uma tecla pressionada gerado oscilaes at o nvel lgico se estabilizar,essas oscilaes so conhecidas como bounce. Esse podem gerar leituras indesejadasfazendo o programa tomar aes que no eram previstas. O processo para eliminar aleitura durante as oscilao chamado de Debounce.

    A tcnica de debounce feita por software e existem muitas maneiras de se resolver esteproblema, umas delas apresentada no sketch a seguir:

    /** Debounce sketchuma tecla conectada ao pino e um led no pino 13a lgica de debounce previne leituras indesejadas da tecla*/

    const int inputPin = 2; // pino onde esta a teclaconst int ledPin = 13; // pino onde est conectado o ledconst int debounceDelay = 10; // tempo para estabilizar// rotina de debounceboolean debounce(int pin){

    boolean state;boolean previousState;previousState = digitalRead(pin); // armazena o estado da tecla

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    59/70

    59

    59

    www.facebook.com/fbseletronica

    for(int counter=0; counter < debounceDelay; counter++){delay(1); //aguarda 1 milisegundostate = digitalRead(pin); // le a teclaif( state != previousState){

    counter = 0; //reinicia contadorpreviousState = state; // armazena o valor atual da tecla

    }}// retorna o estado da teclareturn state;

    }

    void setup(){

    pinMode(inputPin, INPUT); //configura pino da tecla como entradapinMode(ledPin, OUTPUT); //configura pino do led como sada

    }

    void loop(){if (!debounce(inputPin)) //le tecla com rotina de debounce{digitalWrite(ledPin, HIGH); //liga led se tecla pressionada

    }else{digitalWrite(ledPin, LOW); //Desliga led se tecla solta

    }}

    A funo debounce chamada passando como parmetro o numero do pino da tecla que sedeseja fazer a leitura. A funo retorna o nvel lgico presente no pinio aps a estabilizao.

    Exerccio 2:

    Desenvolver um sketch para a leitura de uma tecla e acionar 4 LEDS de sada. A cada vezque a tecla for pressionada deve-se acender um LED e apagar o anterior. Inicialmente osleds encontram-se apagados. Quando tecla pressionada pela primeira vez acende LED1, nasegunda vez apaga LED1 e acende LED 2, e assim por diante. Quando o LED4 estiver acesoe a tecla for pressionada apaga o LED4. Quando a tecla for pressionada novamente

    repetem-se as instrues anteriores.

    8.3 Entrada analgica Lendo o valor em um potencimetro

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    60/70

    60

    60

    www.facebook.com/fbseletronica

    Os microcontroladores Atmega usados para o Arduino contm embarcados 6 canaisde converso analgica-digital (A/D). O conversor do Arduino tem uma resoluo de 10bits, retornando inteiros entre 0 e 1023. Enquanto a funo principal das portas analgicaspara a maioria dos usurios do Arduino ler sensores, as portas analgicas tambm tem afuncionalidade de entrada/sada de propsito geral (GPIO) (da mesma forma que as portasdigitais 0~13). Consequentemente, se o usurio precisar mais entradas/sadas de propsitogeral, e todas as portas analgicas no estiverem em uso, estas podem ser usadas paraGPIO.

    Para iniciar o estudo da entrada analgica, a maneira mais simples e rpida ligandoum potencimetro a uma entrada analgica, conforme esquema apresentado em seguida:

    Se girarmos o cursor do potencimetro, alteramos a resistncia em cada lado docontato eltrico que vai conectado ao terminal central do boto. Isso provoca a mudananaproximidadedo terminal central aos 5 volts ou GND o que implica numa mudana novalor analgico de entrada. Quando o cursor for levado at o final da escala, teremos, porexemplo, zero volt a ser fornecido ao pino de entrada do Arduino e, assim, ao l-lo obtm-se 0. Quando giramos o cursor at o outro extremo da escala, haver 5 volts a serfornecido ao pino do Arduino e, ao l-lo, teremos 1023. Em qualquer posio intermediriado cursor, teremos um valor entre 0 e 1023, que ser proporcional tenso eltrica sendoaplicada ao pino do Arduino.

    A ligao no Arduino UNO pode ser feita conforme a figura abaixo:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    61/70

    61

    61

    www.facebook.com/fbseletronica

    O exemplo a seguir l o valor no potencimetro. O tempo que o LED permanece ligado oudesligado depende do valor obtido pelo analogRead().

    /*

    * Entrada analgica

    * Liga e desliga um LED conectado ao pino digital 13. O tempo

    * que o LED permanece ligado ou desligado depende do valor

    * obtido pelo analogRead(). No caso mais simples, conecta-se

    * um potencimetro ao pino analgico 0.

    */

    int potPin = 0; // selecione o pino de entrada ao potencimetro

    int ledPin = 13; // selecione o pino ao LED

    int val = 0; // varivel a guardar o valor proveniente do sensor

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    62/70

    62

    62

    www.facebook.com/fbseletronica

    void setup() {

    pinMode(ledPin, OUTPUT); // declarar o pino ledPin como sada

    }

    void loop() {

    val = analogRead(potPin); // ler o valor do potencimetro

    digitalWrite(ledPin, HIGH); // ligar o ledPin

    delay(val); // pausar o programa por algum tempo

    digitalWrite(ledPin, LOW); // desligar o ledPin

    delay(val); // pausar o programa por algum tempo

    }

    Exerccio 3:

    Elaborar um sketch para ler um potencimetro e acender 8 leds nas sadas digitais querepresentaro o nvel de tenso na entrada analgica como um bargraph. Quando entradafor zero volts todos os leds estaro apagados e quando for 5 Volts todos estaro acesos equalquer valor dentro desse intervalo deve acender os leds proporcionalmente.

    8.4Comunicao Serial

    A comunicao serial prov um caminho fcil e flexvel para a placa ARDUINOinteragir com um computador ou outro dispositivo. Outro ponto interessante que a IDE doArduino, possui um Monitor serial que exibe os dados enviados pelo Arduino ou envia dadospara o Arduino. Esse monitor pode ser utilizado para exibir mensagens durante o teste doprojeto.

    Uma comunicao serial envolve hardware e software, o hardware faz a ligaoeltrica entre o Arduino e o dispositivo que ele est comunicando. O software enviaordenadamente os dados. A biblioteca Arduino auxilia na complexidade da comunicao

    serial tornando fcil e simples o seu uso.Atravs da comunicao serial pode-se criar supervisrios no computador para ler sinais doArduino e exibir na tela de um computador, pode-se enviar comandos atravs de umainterface grfica no computador para o Arduino executar determinadas tarefas.

    Para exibir textos e nmeros enviados do Arduino, no computador, deve-se inicialmenteconfigura a comunicao serial atravs da funo Serial.begin() na funo setup(), e usar afuno Serial.print() para enviar o texto ou valores para o computador.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    63/70

    63

    63

    www.facebook.com/fbseletronica

    A funo Serial.begin() seleciona o baudrate da comunicao serial. O baudrate determinaquantos bits por segundo enviando na transmisso de um dado. Para a comunicao comum computador usa-se os seguintes valores: 300, 1200, 2400, 4800, 9600, 14400, 19200,28800, 38400, 57600 ou 115200.

    A sintaxe exibida a seguir:Serial.begin(speed);

    Exemplo:

    Serial.begin(9600);

    A funo print envia textos pela serial. O texto deve ser colocado dentro de aspas duplas,por exemplo:

    Serial.print(ol, mundo);Para enviar nmeros, o valor exibido depender do tipo da varivel. Por exemplo, paraenviar uma varivel do tipo int, chamada numero, usa-se a seguinte funo:

    Serial.print(numero);

    Para visualizar os valores no computador pode-se utilizar o terminal serial integrado a IDEconforme figura a seguir:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    64/70

    64

    64

    www.facebook.com/fbseletronica

    Exemplo A Enviando nmeros para o computador

    O sketch a seguir exibe como a comunicao serial pode ser utilizada para enviar dadospara um computador.

    /** comunicao Serial* Envia nmeros pela comunicao serial* para ser exibido no computador*/void setup(){

    Serial.begin(9600); // seleciona velocidade para 9600 bps}int number = 0; //varivel para ser enviada

    void loop()

    {Serial.println(number); // envia numero em noiva linhadelay(500); // aguarda 0,5 segundonumber++; // incrementa o valor do numero.

    }

    Sero exibidos no terminal serial os nmeros no terminal conforme a figura a seguir:

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    65/70

    65

    65

    www.facebook.com/fbseletronica

    Exemplo B Enviando nmeros em diferentes formatos

    Para imprimir um texto simplesmente usa a funo: Serial.print(texto a ser enviado!).

    para enviar uma nova linha aps o envio do texto, usa-se a funo: Serial.println(texto aser enviado);

    Para imprimir valores numricos pode ser um pouco mais complicado. A forma que umvalor do tipo byte ou inteiro so exibidos depende do tipo de varivel e dos parmetros deformatao. A linguagem ARDUINO auxilia nessa tarefa possibilitando a exibir um valor emdiferente tipo de dados.

    Por exemplo, enviando um char, um byte e um int de um mesmo valor a sada no ser amesma.

    Segue um exemplo especifico todas as variveis a seguir tem valores similares:

    char asciiValue = 'A'; // ASCII A has a value of 65

    char chrValue = 65; // an 8 bit signed character, this also is ASCII 'A'

    byte byteValue = 65; // an 8 bit unsigned character, this also is ASCII 'A'

    int intValue = 65; // a 16 bit signed integer set to a value of 65

    float floatValue = 65.0; // float with a value of 65

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    66/70

    66

    66

    www.facebook.com/fbseletronica

    Os seguintes parmetros podem ser utilizados para enviar valores em diferentes tipos dedados:

    Serial.print(valor, BIN) - envia no formato binrio

    Serial.print(valor, OCT) -envia no formato octalSerial.print(valor, DEC) envia no formato decimal

    Serial.print(78, HEX ) envia no formato hexadecimal

    Serial.println(1.23456, 0) - envia numero flutuante sem casa decimal

    Serial.println(1.23456, 2) - envia numero flutuante com duas casa decimais

    Serial.println(1.23456, 4) - envia numero flutuante com 4 casas decimais

    O sketch a seguir envia dados em diferentes formatos pela comunicao serial:/** Comunicao serial - formatar dados* Envia valores*/char chrValue = 65; //valores para ser enviadosbyte byteValue = 65;int intValue = 65;float floatValue = 65.0;

    void setup(){

    Serial.begin(9600);

    }

    void loop(){

    Serial.print("chrValue: ");Serial.print(chrValue);Serial.print(" ");Serial.write(chrValue);Serial.print(" ");Serial.print(chrValue,DEC);Serial.println();

    Serial.print("byteValue: ");Serial.print(byteValue);Serial.print(" ");Serial.write(byteValue);Serial.print(" ");Serial.print(byteValue,DEC);Serial.println();

    Serial.print("intValue: ");Serial.print(intValue);

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    67/70

    67

    67

    www.facebook.com/fbseletronica

    Serial.print(" ");Serial.print(intValue,DEC);Serial.print(" ");Serial.print(intValue,HEX);Serial.print(" ");Serial.print(intValue,OCT);

    Serial.print(" ");Serial.print(intValue,BIN);Serial.println();

    Serial.print("floatValue: ");Serial.print(floatValue);Serial.println();Serial.println();Serial.println();

    delay(5000); // aguarda 5 segundochrValue++; // incremnta para o prximo valorbyteValue++;

    intValue++;floatValue +=1;}

    Exemplo C Enviando nmeros para o Arduino

    So enviados valores em ASCII para o Arduino, esses valores podem ser convertidos emvalores numricos de de uma maneira bem simples, bastando conhecer a tabela ASCII.

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    68/70

    68

    68

    www.facebook.com/fbseletronica

    O valores de 0 a 9 possuem o valor 48 a 57 na tabela ASCII. Desta forma para converterum valor ASCII de 0 a 9 em um valor numrico basta subtrair o valor 48, ou seja subtrair ocaractere 0 em ASCII.

    O sketch a seguir exibe uma maneira simples de receber valores em ASCII e converter em

    valores numricos:/** Comunicao Serial - Enviar dados para o Arduino* PISCA o led com o valor proporcional ao recebino pela serial*/const int ledPin = 13; //pino do ledint blinkRate=0; // valor para piscar

    void setup(){

    Serial.begin(9600); // Inicializa serial com 9600 bpspinMode(ledPin, OUTPUT); //configura pino do led como saida

    }

    void loop(){

    if ( Serial.available()) // verifica se h caracter disponivel na serial{char ch = Serial.read(); //le o caracterif( isDigit(ch) ) // verifica se valor est entre 0 e 9{blinkRate = (ch - '0'); // converte caracter em um valor numricoblinkRate = blinkRate * 100; // atualiza valor da piscagem

    }}blink();//chama rotina para piscar led

    }

    void blink(){

    digitalWrite(ledPin,HIGH);delay(blinkRate);digitalWrite(ledPin,LOW);delay(blinkRate);

    }

    Exerccio 4:

    Desenvolver um sketch para ligar os leds conforme o nmero enviado pela serial. Seenviado o numero 1 deve-se ligar o led1 e assim por diante. Quando enviado o mesmonumero na segunda vez deve-se desligar o led correspondente.

    8.56.5. Sada PWM

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    69/70

  • 8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2

    70/70

    70

    O valor deve ser de 0 a 255 onde 0 a sada permanece sempre em nvel zero e 225 a sadapermanece sempre em nvel alto.

    O sketch a seguir exibe como controlar a intensidade de um led atravs da leitura de umsinal analgico em um potencimetro.

    /*PWM

    controla a luminosidade de um led conforme o valor presenteem um potenciometro*/

    int ledPin = 13; // pino do ledint analogPin = 3; // pino para leitura do potenciometroint val = 0; // variable to store the read value

    void setup(){

    pinMode(ledPin, OUTPUT); // configura pino como sada

    }

    void loop(){

    val = analogRead(analogPin); // le o valor analgicoanalogWrite(ledPin, val / 4); // aciona led com o valor anlogico lido divido por 4

    }

    Exerccio 5

    Desenvolver um sketch para controlar o brilho do led atravs de duas teclas onde umaaumenta o brilho do led e outra diminui o brilho do led.

    9REFERNCIAS1. http://arduino.cc/en/Reference/HomePage

    http://arduino.cc/en/Reference/HomePagehttp://arduino.cc/en/Reference/HomePagehttp://arduino.cc/en/Reference/HomePage