Contadorestruturadecondiçãoifecomunicaçãoserial

download Contadorestruturadecondiçãoifecomunicaçãoserial

of 26

Transcript of Contadorestruturadecondiçãoifecomunicaçãoserial

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    1/26

    Robtica com Arduino

    Nesta apresentao veremosconceitos sobre contadores,estrutura de condio if, e

    trabalharemos com a comunicaoSerial entre o Arduino e oComputador.

    Professor: Paulo Marcos Trentin

    Escola CDI de Videira

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    2/26

    Problema envolvendo contadorVamos supor que desejamos fazer um LED piscar por10 vezes e no mais.

    O que precisa ser alterado no cdigo fonte abaixo?// Cria varivel global contendo o tempo de atraso

    int led = 3;

    void setup() {// define o pino 2 como sendo de saida

    pinMode(led, OUTPUT);

    }

    void loop() {

    // Liga o LED

    digitalWrite(led, HIGH);

    // Aguarda 200 milisegundosdelay(200);

    // Desliga o LED

    digitalWrite(led, LOW);

    // Aguarda 200 milisegundos

    delay(200);

    }

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    3/26

    Conceito do Contador

    Nosso crebro faz isso automaticamente,porm o computador precisa ser programadopara fazer uma contagem.

    Para permitir o Arduino contar, basta criarmosuma varivel que armazene valores inteiros:

    int contador= 0;

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    4/26

    J estamos somando!

    Uma vez criada a varivel, precisamos increment-la acada vez que o LED piscar.

    int led= 3;

    int contador= 0;

    ...void loop() {

    // Liga o LED

    digitalWrite(led, HIGH);

    // Aguarda 200 milisegundos

    delay(200);

    // Desliga o LED

    digitalWrite(led, LOW);

    // Aguarda 200 milisegundos

    delay(200);

    // Incrementa contador

    contador= contador+ 1;

    }

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    5/26

    Outras formas de somar ou subtrair

    Podemos somarda forma tradicional:contador= contador+ 1;

    Incremento rpido:contador++ ;

    Neste modo, a varivel contador recebe mais 1. Poderamos decrementar tambm:

    contador-- ;

    Incremento poratalho:contador += 1;

    A vantagem deste mtodo que podemos usar um atalho para incrementar de dois em dois eassim por diante:

    contador+= 2;

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    6/26

    Operador de condio if

    Agora, tudo que precisamos verificar, a cada execuodo loop, se o valor da varivel contadorj chegou 9(menor que 10).

    void loop() {

    // L-se: Se o valor da varivel contador for menor que, ou igual 10, ento entra dentro do "if"

    if (contador< 10){

    // Liga o LED

    digitalWrite(led, HIGH);

    // Aguarda 200 milisegundos

    delay(200);

    // Desliga o LED

    digitalWrite(led, LOW);// Aguarda 200 milisegundos

    delay(200);

    // Incrementa contador. L-se: varivel contador recebe o valor da varivel contador + 1

    contador= contador+ 1;

    }

    }

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    7/26

    Operadores de comparao

    Muitas vezes precisamos analisar valores, como noexemplo do cdigo anterior. Temos os seguintesoperadores (pg 6 da apostila) de comparao:

    == (igual a)

    != (diferente de)

    < (menorque)

    > (maiorque)

    = (maiorque ou igual)

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    8/26

    Muito terico! No acredito!

    Como vou confiar que o contador est mesmosendo incrementado?

    Como ter certeza disso?

    Como ver em tempo real o contador sendo

    incrementado?

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    9/26

    Soluo: Comunicao Serial!

    Permite comunicaes de longas distncias (o limite a capacincia dos cabos, 80 metros em alguns casos funcionanormalmente)

    Muito estvel

    USB o Universal SerialBus

    Com Arduino, velocidades

    de at 115.200 baud so

    aceitas

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    10/26

    Limite de velocidade

    O Arduino Duemilanove utiliza o chip FT232Rpara comunicar-se com o computador.

    Esse chip, segundo datasheet do fabricanteft232r(pg 27), suporta transferncias at 1Mbaud.

    O console serial da IDE do Arduino, por usavez, suporta at 115200 baud por segundo.

    http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdfhttp://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdfhttp://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdfhttp://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdf
  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    11/26

    E seu precisar mais velocidade?

    A soluo ento usar um chip que j venhade fbrica com suporte USB, exemplo disso o projeto Teensy:

    http://www.pjrc.com/teensy/
  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    12/26

    Qual a velocidade do Teensy

    A comunicao entre o computador e o Teensyocorre 12Mbps.

    Para maiores detalhes sobre a diferena detempo de transmisso do Arduino padro e oprojeto Teensy, acesse este link:

    http://www.pjrc.com/teensy/td_serial.html

    http://www.pjrc.com/teensy/td_serial.html
  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    13/26

    Como comear a trabalhar com aUSB Serial do Arduino?

    Veja como simples enviar dados do Arduino para o

    computador:

    void setup() {// Inicia comunicao serial a 9600 baud

    Serial.begin(9600);

    }

    void loop() {// Envia dados para a serial

    Serial.println("Executou o loop");

    // Aguarda 1 segundo

    delay(1000);}

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    14/26

    Entendendo o Serial.begin(9600);

    Serial um objeto interno do Arduino.

    Ele tem um mtodo, chamado begin, ou seja,comear.

    Aqui definimos que vamos usar a Serial do

    Arduino, e que a velocidade de transmisso 9600 baud.

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    15/26

    Entendendo o Serial.print();

    Serial um objeto interno do Arduino.

    Ele tem um outro mtodo, chamado print, ouseja, imprimir.

    Esse mtodo, envia para a serial o contedo

    passado como parmetro.

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    16/26

    Qual a diferena de print() e println() ?

    O mtodo print() apenas envia o contedo paraa serial.

    J println() alm de enviar o contedo, tambmimprime uma quebra de linha aps o envio.

    Mais informaes sobre Serial.print() aqui:http://arduino.cc/en/Serial/Print

    http://arduino.cc/en/Serial/Printhttp://arduino.cc/en/Serial/Printhttp://arduino.cc/en/Serial/Print
  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    17/26

    Exerccio 1

    Faa um programa que utilize o mtodo print()

    e println() do objeto Serial

    O print deve imprimir a mensagem: "imprimialgo sem quebra de linha"

    O println() deve imprimir a mensagem: "imprimialgo com quebra de linha"

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    18/26

    Exerccio1 - resposta

    void setup() {

    // Inicia comunicao serial a 9600 baud

    Serial.begin(9600);

    }

    void loop() {

    // Envia dados para a serial

    Serial.print("imprimi algo sem quebra de linha");

    // Envia dados para a serial

    Serial.println("imprimi algo com quebra de linha");

    // Aguarda 5 segundos

    delay(5000);

    }

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    19/26

    Enviando valores de variveis

    Verifique o valor da varivel contador:

    int contador= 0;

    void setup() {// Inicia comunicao serial a 9600 baud

    Serial.begin(9600);

    // Envia dados para a serial

    Serial.print("Valor da variavel contador: ");Serial.println(contador);

    }

    void loop() {}

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    20/26

    Exerccio 2 - voltando ao contador

    Crie um novo programa com um contador

    Ao iniciar o programa deve enviar na serial:

    "Iniciando programa contador..."

    Este contador deve ser incrementado com +2 a cada loop no intervalo de 1 segundo

    A cada loop, deve ser enviado para a serialo valor atual do contador

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    21/26

    Recebendo dados do computador

    Podemos facilmente enviar dados do computador para o

    Arduino

    Para isso usaremos o "Serial Monitor" da IDE

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    22/26

    Recebendo dados do computador -cdigo fonte

    charbyteRecebido;

    void setup() {

    // Inicia comunicao serial a 9600 baud

    Serial.begin(9600);

    Serial.println("Digite algo e pressione Enter");

    }

    void loop() {

    // Verifica se chegou algo pela serial

    if (Serial.available() > 0){

    // L a serial e coloca o valor na varivel byteRecebidobyteRecebido = Serial.read();

    Serial.print("Eu recebi: ");

    // Imprime na Serial o valor recebido

    Serial.println(byteRecebido);

    }}

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    23/26

    Entendendo o Serial.available();

    Serial um objeto interno do Arduino.

    Ele tem um mtodo, chamado available, ou

    seja, disponvel.

    Se houver alguma informao para ser lida na

    Serial, retorna o nmero de bytes a seremlidos, do contrrio, retorna 0.

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    24/26

    Entendendo o Serial.read();

    O mtodoread, l da serial um byte e o retornapara ser usado. Quando usamos:

    byteRecebido = Serial.read();

    Estamos dizendo para ler a Serial, e inserir o

    valor lido na varivel byteRecebido

    C ifi l t f i di it d ?

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    25/26

    Como verificar se uma letra foi digitada?

    charbyteRecebido;

    void setup() {

    // Inicia comunicao serial a 9600 baud

    Serial.begin(9600);// Exibe mensagem de boas vindas

    Serial.println("Insira alguma letra e pressione Enter");

    }

    void loop() {

    // Verifica se chegou algo pela serial

    if (Serial.available() > 0){

    // L a serial e coloca o valor na varivel byteRecebido

    byteRecebido = Serial.read();

    Serial.print("Eu recebi: ");

    // Imprime na Serial o valor recebido

    Serial.println(byteRecebido);// Verifica se a letra a foi digitada

    if (byteRecebido == 'a'){

    Serial.println("Voce digitou a tecla a");

    }

    }

    }

  • 7/30/2019 Contadorestruturadecondioifecomunicaoserial

    26/26

    Exerccio 2

    Faa um programa que receba do computador,via serial, comandos do usurio

    Quando o usurio digitar a tecla L, seuprograma deve ligar todos os LEDs daprotoboard

    Quando o usurio digitar D, ento todos osLEDs devem ser desligados