Comunicação e controle
Anderson M. Amaral
Agosto - 2017
Exemplos/Basics/DigitalReadSerial
):(...)
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
(...)
// print out the state of the button:
Serial.println(buttonState);
Serial.begin(9600);
)DigitalReadSerial
Serial.print(data)
:data
para o computador, e exibe no Monitor Serial (Ferramentas/Monitor Serial
, ou CTRL+SHIFT+M
)data
pode ser uma string
, int
, long
, float
...Serial.println(data)
:print
, porém finaliza a linha usando os caracteres especiais \r\n
\r
: Carriage return volta para a primeira coluna\n
: new line segue para a próxima linhaSerial.begin(speed)
:Serial.end()
:Serial.available()
Indica se existem informações a processar
// Aguarda ate que um novo caractere seja recebido pela serial
void esperaSerial(){
int buffer = 0;
while((Serial.available()<=0)&&(buffer<20000)){
buffer++;
}
}
Importante para comunicação assíncrona (otimiza a capacidade de processamento).
Serial.write(int), Serial.write(str), Serial.write(buf, len)
string
, ou um array
buf, de comprimento len
.Que informação é exibida no monitor serial pelo programa abaixo?
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(100);
}
Serial.read()
int
. Se não houver novas informações, retorna -1
.available()
04.Communication/Dimmer
const int ledPin = 9;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
byte brightness;
// check if data has been sent from the computer:
if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255):
brightness = Serial.read();
// set the brightness of the LED:
analogWrite(ledPin, brightness);
}
}
Serial.read()
interpreta cada caractere enviado como um número.120
pela serial, o arduino recebe 3 bytes (0b
indica um número binário):1
-> 0b110001
, ou 49 em decimal.2
-> 0b110010
, ou 50 em decimal.0
-> 0b110000
, ou 48 em decimal.130
para o arduino? Pode-se enviar um caractere equivalente a 130 diretamente (0b10000010=='x'
), ou produzir uma função que traduz os bytes de cada caractere em um número.Serial.parseInt()
Serial.read()
por Serial.parseInt()
no exemplo 04.Communication/Dimmer
. Vejam o que acontece ao enviar um número pelo monitor serial.Serial.parseFloat()
é idêntica à parseInt()
, com a distinção que esta interpreta pontos flutuantes. Façam um programa que receba números flutuantes pela porta serial e atribua 0
como menor brilho no LED, e 1
o máximo de brilho.digitalRead(pin)
), ou qual a posição de um potenciômetro (analogRead(pin)
).1
botão e 1
potenciômetro, controle o brilho de 2 leds de forma independente.1
led apenas, e veja como é possível usar o botão para controlar o brilho dos leds.LiquidCrystal/Hello World
#include <LiquidCrystal.h>
-> Biblioteca que cuida dos detalhes de baixo nível da comunicação entre o arduino e o módulo HD44780ULiquidCrystal lcd(rs, enable, d4, d5, d6, d7);
(implementação básica)rs
: (Register Status) Indica o status do LCD (se ele aceita novas informações ou está processando o pedido anterior).enable
: Indica quando existe um caractere disponível para enviard4-d7
: Pinos utilizados para enviar os dados em paralelo. É possível usar 8 pinos ao invés de 4, mas isto é pouco frequente. (Por que?)lcd.begin(16, 2);
Indica o número de colunas (caracteres) e linhas do display usadolcd.print("hello, world!");
Envia uma determinada string
para o módulo do displayVSS
-> 0V (Terra), VDD
-> 5V, R/W
-> Leitura(1) ou Escrita(0), LED+-
(Tensões para ligar a iluminação), V0
-> Controle do brilho do LED interno. 1
V