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);)
DigitalReadSerialSerial.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/Dimmerconst 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.

Driver do display LCD
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