AULA 4 - Microcontroladores - Engenharia: mudanças entre as edições
imported>Fargoud |
imported>Fargoud Sem resumo de edição |
||
| Linha 152: | Linha 152: | ||
Serial.println(""); | Serial.println(""); | ||
}//end loop | }//end loop | ||
===EXERCÍCIO 2:=== | |||
Escreva o programa que imprime uma tabela ASCII de 0 a 255, com os símbolos e respectivos valores na base decimal. | |||
--------------------- | |||
===EXEMPLO 3: acionando o led do Arduino, via Monitor Serial=== | ===EXEMPLO 3: acionando o led do Arduino, via Monitor Serial=== | ||
| Linha 220: | Linha 227: | ||
Faça o programa que lê um número de 0 a 15 no Monitor Serial e acende a respectiva sequência de 4 LEDS externos, correspondente ao valor binário lido. | Faça o programa que lê um número de 0 a 15 no Monitor Serial e acende a respectiva sequência de 4 LEDS externos, correspondente ao valor binário lido. | ||
--------------------- | |||
===EXEMPLO 5: enviando estado de chave para Monitor Serial=== | ===EXEMPLO 5: enviando estado de chave para Monitor Serial=== | ||
Edição das 09h51min de 15 de agosto de 2018
PLANO DE AULA
CARGA HORÁRIA: 5 h
CARGA HORÁRIA TEÓRICA: 2 h CARGA HORÁRIA PRÁTICA: 3 h
MATERIAIS
Por aluno:
- 1 placa Arduino Uno
- cabo de comunicação/alimentação USB
- 1 computador PC com software Arduino IDE instalado
- 1 proto shield para montagens
- 4 leds vermelhos;
- 4 resistores de 150 ou 200 Ω
- 2 resistores de 1000 Ω
- 2 chaves digitais tipo push-button;
- cabos fêmea-macho
METODOLOGIA
- Exposição dialogada dos conteúdos disponíveis, em projetor multimídia.
- Navegação assistida em outros sites e portais, de conteúdos relacionados.
- Montagens práticas e desenvolvimento em computador de aplicativos.
- Testes de verificação e validação.
Comunicação Serial
Apesar do Arduino ser gravado via porta USB, a comunicação se dá como serial padrão (USART). O ATmega328 permite comunicação serial no padrão UART TTL (5 V), que está disponível nos pinos digitais 0 (RX) e 1 (TX). Um chip FTDI FT232RL na placa encaminha esta comunicação serial através da USB e os drivers FTDI (incluído no software do Arduino) fornecem uma porta virtual para o software no computador.
O software Arduino inclui um Monitor Serial que permite que dados simples de texto sejam enviados e recebidos à placa Arduino.
Os LEDs RX e TX da placa piscam quando os dados estão sendo transferidos ao computador pelo chip FTDI e há conexão USB (mas não quando há comunicação serial pelos pinos 0 e 1).
A biblioteca SoftwareSerial permite comunicação serial por quaisquer dos pinos digitais do Uno.
O ATmega328 também oferece suporte aos padrões de comunicação I2C (TWI) e SPI.
O software do Arduino inclui uma biblioteca Wire para simplificar o uso do barramento I2C.
Para usar a comunicação SPI, veja o manual do ATmega328.
Assim, no Arduino existe uma parte do hardware especifica para a conversão Serial/USB.
Disso resulta a criação de uma porta COM virtual no computador para a comunicação com o Arduino.
Como a comunicação é a serial padrão, é fácil trocar informações entre o computador e o Arduino.
Existe uma ferramenta própria na IDE do Arduino para a comunicação serial.
A biblioteca Serial() do Wiring tem todas as funções necessárias para se implementar comunicação serial entre o Arduino e o PC.
A porta serial te permite ler e escrever facilmente dados de e para dispositivos externos.
Isto permite a duas máquinas se comunicarem através de portas seriais de 8 pinos, dos PCs, ou emulads através de um adaptador serial.
Velocidades típicas de comunicação são: 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 e 115200 BPS.
Apenas uma aplicação pode utilizar a porta serial, a cada vez.
As funções mais utilizadas são:
- begin() Abre a porta serial para leitura ou escrita.
- read() Retorna um número entre 0 e 255 para o próximo byte que está esperando no buffer. Retorna -1 se não há nenhum byte, embora isto possa ser evitado pelo uso da função available(), que informa se há dado disponível
- write() Escreve um byte na porta serial.
- print() Escreve dados (int, float, byte, char, char[], números nas bases (DEC, BIN, OCT or HEX) ou textos na porta serial.
- println() O mesmo que a função print(), exceto que acrescenta uma linha nova ao final da chamada.
- available() Retorna o número de bytes disponíveis.
- peek() Investiga o próximo byte de dados no buffer da porta serial. Não o recupera do buffer. Retorna -1 se não há dado disponível.
- flush() Descarrega o buffer da porta serial.
- end() Fecha a porta serial.
EXEMPLO 1: enviando texto para Monitor Serial
void setup(){
Serial.begin(9600);
//Inicia a comunicação serial a 9600 bauds
}
void loop(){
Serial.println(“Aprendendo a programar no arduino”);
// Envia a string “Aprendendo a programar no arduino”
//para a console
}
Agora acesse o Monitor Serial, no menu do Arduino.
O resultado é uma sucessão de impressões da string “Aprendendo a programar no arduino”.
Vimos que iniciamos a comunicação serial através do comando serial.begin(9600) que colocamos dentro do setup(){} .
O valor de 9600 pode variar dependendo da sua aplicação.
Conecte o Arduino no PC, selecione a versão do seu Arduino (UNO, Duemilanove, etc) e porta (COMx, ttyUSBx, ttyACMx) e clique em UPLOAD. Abra o Serial Monitor e selecione 9600 no baud.
Veja mais sobre velocidade da porta serial nesse post: [Baud Rates]
O comando Serial.print(“string aqui”) que faz com que a informação seja impressa no serial monitor.
Adiante veremos outros exemplos do uso do Serial.print, mas por ora quero que reparem que todo comando que não constrói um bloco (não tem “chaves” como o setup e o loop), ou então que não e uma diretiva de pré-processador (#include, #define que veremos adiante tambem) termina com ponto e vírgula, isso indica o fim do comando.
EXERCÍCIO 1:
Escreva o programa que mostra uma contagem de segundos e minutos, iniciada pelo Arduino, no Monitor Serial.
EXEMPLO 2: outras instruções para Comunicação Serial
O programa abaixo ilustra as funções write() e print(arg, FORMAT) que permitem formatar em qual forma (texto ou número) ou sistema numérico um determinado valor arg será escrito.
byte estebyte = 35;
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(" Como enviar valores formatados: ");
Serial.println("Formato ASCII do valor: ");
Serial.write(estebyte);
Serial.println(".");
Serial.println("Formato DECIMAL:");
Serial.print(estebyte, DEC);
Serial.println(".");
Serial.println("Formato HEXADECIMAL:");
Serial.print(estebyte, HEX);
Serial.println(".");
Serial.println("Formato BINÁRIO:");
Serial.print(estebyte, BIN);
Serial.println(".");
Serial.println("");
}//end loop
EXERCÍCIO 2:
Escreva o programa que imprime uma tabela ASCII de 0 a 255, com os símbolos e respectivos valores na base decimal.
EXEMPLO 3: acionando o led do Arduino, via Monitor Serial
No terceiro teste, vamos acionar, acender e apagar, o led do pino 13 através de comandos de teclado do PC, na interface Serial Monitor, do Arduino.
A programação também é simples e bem interessante:
#define LED 13 int numero;
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0)
{ numero = Serial.read();
if(numero == '1') // Digitou 1 no Monitor Serial
{ digitalWrite(LED, HIGH);
Serial.println(" LED ACESO!");
}
if(numero == '0') // Digitou 0 no Monitor Serial
{ digitalWrite(LED, LOW);
Serial.println(" LED APAGADO!");
}//end if
}//end if
}//end while
}//end loop
EXEMPLO 4: acionando leds externos a partir do Monitor Serial
Nosso quarto teste de uso do Monitor Serial vai ser um circuito e programação que acionam dois leds, conforme a montagem abaixo:
Agora, abra a IDE do Arduino e escreva/compile/carregue a seguinte programação:
char c;
void setup(){
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available()>0)
{
c = Serial.read() - '0';
Serial.flush();
digitalWrite(c,!digitalRead(c));
}
}
Ao digitar o número 2 no Serial Monitor, irá acender o LED conectado na porta digital 2 do Arduino, e ao digitar novamente o número 2, o LED apagará.
Agora se digitar o número 3, irá acender o LED da porta digital 3 e se digitar novamente o número 3, o LED apagará.
EXERCÍCIO 4:
Faça o programa que lê um número de 0 a 15 no Monitor Serial e acende a respectiva sequência de 4 LEDS externos, correspondente ao valor binário lido.
EXEMPLO 5: enviando estado de chave para Monitor Serial
Neste teste, o estado de uma chave externa será lido e enviado pro Monitor Serial.
Montagem:
Código:
No protoshield do laboratório:
Quando pressiona a chave, efeito no Monitor Serial:
Exercício 5:
Crie o programa que lê 4 chaves binárias, do tipo dip-switch e imprime no Monitor Serial qual o valor digitado por meio da sequência de chaves, nos sistemas binário, hexadecimal e decimal.
| Leitura das portas digitais | AULA 4 - Uso da comunicação serial | Leitura e escrita nas portas analógicas>> |
|---|






