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.pdf7/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.html7/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/Print7/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