3.2 Programando para o Arduino: Con eitos e Sintaxe da Linguagem de Programação
3.2.18 Comuni ação serial
Serial.begin( )Ajustaotaxadetransferên iaembitsporsegundoparaumatransmissão
dedados pelopadrãoserial. Para omuni ação omum omputadorutiliza-se umadestas
taxas: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 57600, 115200. Pode-se, entre-
tanto,espe i aroutrasvelo idades,porexemplo,para omuni ação atravésdospinos0e
1 omum omponente que requerumataxa espe í a.
Sintaxe:
Serial.begin(taxa);
Serial1.begin(taxa);
Serial12.begin(taxa);
Serial13.begin(taxa);
Exemplo paraArduinoMega:
void setup(){
/* Abre a porta serial 1, 2, 3 e 4
* e ajusta a taxa das portas para
* 9600 bps, 38400 bps, 19200 bps * e 4800 bps respe tivamente */ Serial1.begin(9600); Serial2.begin(38400); Serial3.begin(19200); Serial4.begin(4800); . : } void loop() { . : }
int Serial.available( ) Retorna o número de bytes ( ara teres) disponíveis para leitura
no buerda porta serial. O buerserial podearmazenar até128 bytes. [verapêndi eC.4℄
Sintaxe: Serial.available(); Exemplo void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { /* lê na porta 0
* e envia para a porta 1:
*/
if (Serial.available()) {
int inByte = Serial.read();
Serial1.print(inByte, BYTE);
}
/* lê na porta 1 e
* envia para a porta 0:
*/
if (Serial1.available()) {
int inByte = Serial1.read();
Serial.print(inByte, BYTE);
}
int Serial.read()Retornaoprimeiro bytedisponívelnobuerdeentradadaportaserial
(ou -1 senão hover dadosmobuer)
Sintaxe
variavel = Serial.read( )
Exemplo
int in omingByte = 0;
// para entrada serial
void setup() {
Serial.begin(9600);
}
void loop() {
// envia dados apenas
//quando re ebe dados:
if (Serial.available() > 0) {
// lê o primeiro byte disponível:
in omingByte = Serial.read();
// imprime na tela o byte re ebido:
Serial.print("Eu re ebi: ");
Serial.println(in omingByte, DEC);
}
Serial.ush( ) Esvazia o buer de entrada da porta serial. De modo geral, esta função
apaga todososdadospresentesno buer deentradano momento de exe uçãodamesma.
Sintaxe: Serial.flush(); Exemplo: void setup() {( Serial.begin(9600); } void loop(){ Serial.flush(); /* Apaga o onteúdo * do buffer de entrada */ . : }
Serial.print( ) Envia dados de todos os tipos inteiros, in luindo ara teres, pela porta
serial. Ela não fun iona om oats, portanto é ne essário fazer uma onversão para um
tipo inteiro. Em algumas situações é útil multipli ar um oat por uma potên ia de 10
parapreservar(aomenosemparte) ainformaçãofra ionária. Atente-separa ofatodeque
os tipos de dados sem sinal, har e byte irão gerar resultados in orretos e atuar omo se
fossemdo tipo dedados om sinal. Este omandopodeassumir diversasformas:
Serial.print(valor)semnenhumformatoespe i ado: imprimeovalor omoumnúmero
de imal emumastringASCII.
Por exemplo:
int b = 79;
Serial.print(b);
(envia pela porta serial o ódigo ASCII do
Serial.print(valor, DEC):imprimevalor omoum número de imal em umastringAS-
CII.
Por exemplo:
int b = 79;
Serial.print(b, DEC);
(imprime astringASCII "79").
Serial.print(valor, HEX): imprimevalor omo umnúmero hexade imal emuma string
ASCII.
Por exemplo:
int b = 79;
Serial.print(b, HEX);
(imprime astring"4F").
Serial.print(valor,OCT):imprime valor omoum número o talemumastring ASCII.
Por exemplo:
int b = 79;
Serial.print(b, OCT);
(imprime astring"117")
Serial.print(valor,BIN):imprimevalor omoumnúmerobinárioemumastringASCII.
Por exemplo:
int b = 79;
Serial.print(b, BIN);
(imprime astring"1001111").
Serial.print(valor,BYTE): imprimevalor omo umúni obyte. Por exemplo:
int b = 79;
Serial.print(b, BYTE);
(envia pela porta serial o valor 79, queserá
mostrado na tela de um terminal omo um
ara tere "0", pois 79 é o ódigo ASCII do
"0").
Serial.print(str): sestrforumastringouumarrayde hars,imprimeumastringASCII.
Por exemplo:
Exemplo: int analogValue; void setup() { serial.begin(9600); } void loop() { analogValue = analogRead(0);
serial.print(analogValue); // imprime um ASCII de imal - o mesmo que "DEC"
serial.print("\t"); // imprime um tab
serial.print(analogValue, DEC); // Imprime um valor de imal
serial.print("\t"); // imprime um tab
serial.print(analogValue, HEX); // imprime um ASCII hexade imal
serial.print("\t"); // imprime um tab
serial.print(analogValue, OCT); // imprime um ASCII o tal
serial.print("\t"); // imprime um tab
serial.print(analogValue, BIN); // imprime um ASCII binário
serial.print("\t"); // imprime um tab
serial.print(analogValue/4, BYTE);
/* imprime omo um byte úni o e adi iona um " ariage return"
* (divide o valor por 4 pois analogRead() retorna número de 0 à 1023,
* mas um byte pode armazenar valores somente entre 0 e 255
*/
serial.print("\t"); // imprime um tab
delay(1000); // espera 1 segundo para a próxima leitura
Serial.println(data)Estafunçãoenviadadosparaaportaserialseguidosporum arriage
return (ASCII 13, ou '
\
r') e por um ara tere de linha nova (ASCII 10, ou '\
n'). Este omando utilizaosmesmos formatosdo Serial.print( ):Serial.println(valor): imprime o valor de um número de imal em uma string ASCII
seguido por um arriage returne umlinefeed.
Serial.println(valor, DEC): imprime o valor de um número de imal em uma string
ASCII seguido por um arriagereturn eumlinefeed.
Serial.println(valor,HEX): imprimeovalordeumnúmero hexade imalemumastring
ASCII seguido por um arriagereturn eumlinefeed.
Serial.println(valor,OCT): imprimeovalordeumnúmero o talemumastringASCII
seguido por um arriage returne umlinefeed.
Serial.println(valor,BIN):imprimeovalordeumnúmerobinárioemumastringASCII
seguido por um arriage returne umlinefeed.
Serial.println(valor,BYTE):imprimeovalordeumúni obyteseguidoporum arriage
return eumlinefeed.
Serial.println(str): se str for uma string ou um array de hars, imprime uma string
Exemplo:
/* Entrada Analógi a
lê uma entrada analógi a no pino analógi o 0 e imprime o valor na porta serial.
*/
int analogValue = 0; // variável que armazena o valor analógi o
void setup() {
// abre a porta serial e justa a velo idade para 9600 bps:
Serial.begin(9600);
}
void loop() {
analogValue = analogRead(0); // lê o valor analógi o no pino 0:
/* imprime em diversos formatos */
Serial.println(analogValue); // imprime um ASCII de imal - o mesmo que "DEC"
Serial.println(analogValue, DEC); // imprime um ASCII de imal
Serial.println(analogValue, HEX); // imprime um ASCII hexade imal
Serial.println(analogValue, OCT); // imprime um ASCII o tal
Serial.println(analogValue, BIN); // imprime um ASCII binário
Serial.println(analogValue/4, BYTE); // imprime omo um byte úni o
delay(1000);// espera 1 segundo antes de fazer a próxima leitura:
Capítulo 4
Exemplos Práti os
4.1 Imprimindo uma mensagem no LCD
Componentes: 1LCD,1 poten imetro
Neste exemplo será mostrado omo one tar orretamente um LCD ao Arduino, além de
imprimir o famoso Hello World! na tela do LCD através da função l d.print(), ontida na
bibliote a LiquidCrystal.h.
Sugestão de montagem
Para one tar o LCD aoArduino, one te osseguintes pinos:
pinoVSS(1) doLCD ao pinoGND
pinoVDD(2)do LCD aopino 5V
pinoRS(4)do LCD aopino12
pinoRW(5) do LCD aopinoGND
pinoD6(13) do LCDao pino3
pinoD7(14) do LCDao pino2
Deve-se one tar também o poten imetro de 10K Ohms aos pinos 5V, GND e V0(3) do
LCD, onforme sugere asFiguras 4.1e 4.2:
Figura4.2: Esquemáti o Eletrni o Código fonte #in lude <LiquidCrystal.h> LiquidCrystal l d(12, 11, 5, 4, 3, 2); void setup() { l d.begin(16, 2); l d.print("Hello World!"); } void loop() { l d.setCursor(0, 1); l d.print(millis()/1000); l d.print("s");