Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ARDUINO
Cartilha para Programao em C
Para Interfaces Simples de Hardware - Edio 1.0
Pinos Digitais
usados para deteo ou transmisso de controles digitais Funes em C: pinMode( ) digitalRead( ) digitalWrite( ) analogWrite( ) attachInterrupt( ) pulseIn( )
Pinos analgicos
Pinos de Alimentao
Esse material de domnio pblico e pode ser livremente distribudo e impresso desde que sem modificaes em seu contedo.
www.revistadoarduino.com.br www.revistadoarduino.com.br
pgina II
Cartilha de Programao em C para o ARDUINO Escrita e produzida por Joo Alexandre da Silveira Com informaes e inspiraes tomadas de: Arduino Programming Notebook - Brian W. Evans Experimentos com o ARDUINO - Joo Alexandre da Silveira Programming Interactivity - Josua Noble The C Programming Language - Kernighan and Ritche Let Us C - Yashavant Kanetkar C for Engineers and Scientists - Gary Bronson www.arduino.cc www.revistadoarduino.com.br
Esse material de domnio pblico e pode ser livremente distribudo e impresso desde que sem modificaes em seu contedo.
pgina III
PREFCIO
Este livreto de pouco mais de 20 pginas um guia de consulta rpida para os iniciantes em programao do ARDUINO para criao de interfaces simples de hardware. Ele resume em tabelas, imagens e grficos de fcil compreenso a funo das portas fsicas de entrada e de sada do ARDUINO e os principais comandos da sua linguagem de programao. A idia foi reunir em um pequeno guia de bancada a descrio de cada pino do ARDUINO e as funes na sua linguagem de programao relativas a esses pinos. Tambem esto includas as funes para comunicao serial. O texto foi dividido em duas partes: uma que trata da estrutura da linguagem de programao, e uma que trata do hardware controlado por essa programao. Nessa primeira parte apresentada a estrutura bsica da linguagem com as suas duas principais funes; a seguir uma breve introduo sobre constantes, variveis, matrizes, funes de matemtica e tempo e, por fim, as funes de controle de fluxo herdadas da linguagem C/C++. Na segunda parte as portas de entrada e sada (pinos) digitais, as portas analgicas e a porta serial do ARDUINO so descritas junto com as suas funes de controle. Para aqueles leitores interessados em se aprofundar mais no mundo do ARDUINO e na linguagem C sugerimos os livros e sites web que aparecem na pgina II deste livreto. Sugestes, crticas e comentrios sobre esse trabalho podem ser enviadas diretamente para o autor pelo site www.revistadoarduino.com.br; onde o leitor poder tambem cadastrar seu e-mail para ser notificado sobre uma nova edio desta Cartilha.
www.revistadoarduino.com.br
pgina IV
NDICE
MAPA DAS ENTRADAS E SADAS DO ARDUINO A - A ESTRUTURA DA LINGUAGEM DO ARDUINO A Estrutura Bsica Funes Declarao de funes setup( ) loop( ) Os smbolos {} ; // /*...*/ A.1 - CONSTANTES E VARIVEIS TRUE/FALSE HIGH/LOW INPUT/OUPUT Escopo da Varivel Declarao da Varivel Tipos de variveis A.2 - MATRIZES Declarao de uma Matriz Escrever/Ler uma Matriz A.3 - LGICA E ARITMTICA Smbolos compostos Operadores de comparao Operadores lgicos A.4 - FUNES MATEMTICAS E DE TEMPO delay( ) delayMicroseconds( ) millis( ) random( ) abs( ) map( ) A.5 - FUNES PARA CONTROLE DE FLUXO if if...else if...else...if 2 3
www.revistadoarduino.com.br
pgina V
while do...while for switch...case operador ternrio ? B- AS PORTAS DE E/S DO ARDUINO E SUAS FUNES EM C B.1 - OS PINOS DIGITAIS pinMode( ) digitalRead( ) digitalWrite( ) analogWrite( ) attachInterrupt( ) pulseIn( ) B.2 - OS PINOS ANALGICOS analogRead( ) B.3 - A PORTA SERIAL DO ARDUINO Serial.begin( ) Serial.end( ) Serial.available( ) Serial.read( ) Serial.print( ) Serial.println( ) B.4 - OS PINOS DE ALIMENTAO 13 13
15 16
17
www.revistadoarduino.com.br
www.revistadoarduino.com.br
pgina 2
so como sub-rotinas ou procedimentos; so pequenos blocos de programas usados para montar o programa principal. Elas so escritas pelo programador para realizar tarefas repetitivas, ou podem ser importadas prontas para o programa em forma de bibliotecas.
o deve ser declarada antes de ser chamada atribuindo-lhe um tipo e um nome seguido de parnteses, onde sero colocados os parmetros de passagem da funo. Depois do nome so definidos entre as chaves { e } os procedimentos que a funo vai executar.
ser chamada quando o programa inicia. E executada apenas nessa primeira vez. Esta uma funo de preparao: ela dita o comportamento dos pinos do Arduino e inicializa a porta serial.
logo a seguir e todas as funes embarcadas nela so repetidamente executadas. Ela fica lendo os pinos de entrada do Arduino e comandando os pinos de sada e a porta serial.
Os Smbolos usados na construo de funes so os seguintes: { } - Dentro das chaves vo os procedimentos (statements) que a funo deve executar; ; - O ponto-e-vrgula usado para marcar o final de um procedimento; // - comentrio de uma linha: qualquer caracter depois das duas barras ignorado pelo programa; /*...*/ - comentrio em vrias linhas: qualquer texto colocado entre esses simbolos tambem
ignorado pelo programa.
www.revistadoarduino.com.br
pgina 3
Exemplo:
/* Nesse cdigo a funo setup( ) ativa a porta serial em 9600 bits/s e a funo loop( ) fica transmitindo a frase Hello World! pela porta serial a cada 2 segundos. */ void setup( ) { Serial.begin(9600); } void loop( ) { Serial.println( Hello World! ); delay(2000); } // inicializa a porta serial // transmite frase
valores predefinidos que nunca podem ser altera- HIGH/LOW essas constantes definem as tenses nos pinos digitais do dos. Na linguagem C do Arduino. Alto uma tenso de 5 volts; baixo o terra (ou 0 volt). Arduino so 3 os grupos de constantes; os dois INPUT/OUPUT so constantes programadas pela funo pinMode( ) componentes de cada para os pinos do Arduino; eles podem ser entradas (de sensores) ou podem grupo sempre podem ser representados pelos ser sadas (de controle). nmeros binrios 1 e 0.
VARIVEIS so
posies na memria de programa do Arduino marcadas com um nome e o tipo de informao que iro guardar. Essas posies podem estar Declarao da Varivel como as funes, toda varivel deve ser vazias ou podem recedeclarada antes de ser chamada. Essa declarao consiste em atribuir ber um valor inicial. Os previamente um tipo e um nome varivel. valores das variveis podem ser alterados pelo Tipos de variveis: programa.
el pode ser declarada em qualquer parte do programa. Se for declarada logo no incio, antes da funo setup( ), ela tem o escopo de Varivel Global, e porisso ela pode ser vista e usada por qualquer funo no programa. Se declarada dentro de uma funo ela tem o escopo de Varivel Local, e s pode ser usada por essa funo.
byte - esse tipo armazena 8 bits (0-255); int - armazena nmeros inteiros de at 16 bits; long - armazena nmeros inteiros de at 32 bits; float - variveis deste tipo podem armazenar nmeros fracionrios de at 32 bits.
www.revistadoarduino.com.br
pgina 4
Exemplo:
/* Esse programa escrito em C do Arduino aumenta e diminui gradativamente o brilho de um LED conectado no pino PWM 10 do Arduino. */ int i=0; // declarao da varivel global inteira i iniciada com 0 void ledOn( ); // declarao da funo criada ledOn do tipo void void setup( ) { pinMode(10,OUTPUT); // aqui 2 parmetros so passados funo pinMode( ) } void loop( ) { for (i=0; i <= 255; i++) ledOn( ); // aumenta o brilho do led for (i=255; i >= 0; i--) ledOn( ); // diminui o brilho do led } void ledOn( ) { // funo que acende o led analogWrite (10, i); // o n do pino e o valor de i so passados funo analogWrite( ) delay (10); }
A.2 - MATRIZES
MATRIZES so colees Declarao de uma Matriz I As matrizes, como as variveis e
as funes, devem ser declaradas com um tipo e um nome seguido de colchetes; e podem tambm ser inicializadas com os valores entre as chaves. Exemplo: int nomeMatriz [ ] = { 16,32,64,128, ... };
de variveis do mesmo tipo, portanto so posies na memria de programa, com endereos que podem ser acessados por meio de um identificador, chamado de ndice. A primeira posio de uma matriz sempre a de ndice 0.
somente o tipo, o nome e o tamanho da matriz, deixando para o programa o armazenamento de variveis nas posies, ou ndices, da matriz. int nomeMatriz [ 10 ] ; //nomeMatriz com dez 10 //posies para variveis inteiras
www.revistadoarduino.com.br
pgina 5
uma constante, ou variveis entre si. So usados para testar se uma condio verdadeira. x == y // x igual a y x != y // x no igual a y x <y // x menor que y x >y // x maior que y x <= y // x menor ou igual a y x >= y // x maior ou igual a y
www.revistadoarduino.com.br
pgina 6
Exemplo
delay(1000);
Com esse parmetro o programa vai pausar durante 1 segundo (1000 ms).
Notas
Durante o perodo em que essa funo est ativa qualquer outra funo no programa suspensa; equivalente ao HALT em Assembly. Somente as interrupes de hardware podem parar essa funo. As mesmas observaes acima para a funo delay(ms) so vlidas aqui.
delayMicroseconds(us)
Essa funo pausa o programa por um perodo em microssegundos indicado pelo parmetro entre parnteses.
delayMicroseconds(1000);
millis( )
Retorna o nmero de milissegundos desde que o Arduino comeou a executar o programa corrente.
Aqui a varivel inteira longa (de 32 bits) total vai guardar o tempo em ms desde que o Arduino foi inicializado. int valor = random(100,400); varivel valor vai ser atribuido um nmero inteiro qualquer entre 100 e 400.
random(min,max)
Gera nmeros pseudo-aleatrios entre os limites min e max especificados como parmetros.
O parmetro min opcional e se excludo o limite mnimo 0. No exemplo varivel valor poder ser qualquer nmero inteiro entre 0 e 400.
abs(x)
float valor = abs(-3.14); varivel valor vai ser atribudo o nmero em ponto flutuante (e sem sinal) 3.14.
map(valor,min1,max1,min2,max2)
A funo map( ) converte uma faixa de valores para outra faixa. O primeiro parmetro valor a varivel que ser convertida; o segundo e o terceiro parmetros so os valores mnimo e mximo dessa varivel; o quarto e o quinto so os novos valores mnimo e mximo da variavel valor.
int valor = map(analog Read(A0),0,1023,0,255)); A varivel valor vai guardar a leitura do nvel analgico no pino A0 convertida da faixa de 0-1023 para a faixa 0-255.
Com essa funo possvel reverter uma faixa de valores, exemplo: int valor = map(x,1,100,100,1);
www.revistadoarduino.com.br
pgina 7
if um controle de fluxo usado para selecionar uma ou mais instrues baseado no resultado de um
if (expresso) { bloco de instrues; // se expresso for verdadeira, bloco de instrues executado }
teste de comparao. Todas as instrues entre as chaves { e } so executadas somente se o resultado desse teste for verdadeiro; se no, essas instrues no so executadas. Verdadeiro qualquer resultado, mesmo negativo, diferente de zero. Falso um resultado zero.
da instruo anterior
O comando if
da instruo anterior
O comando if...else
NO EXPRESSO verdadeira? SIM BLOCO DE INSTRUES EXPRESSO verdadeira? SIM BLOCO DE INSTRUES 1
NO
www.revistadoarduino.com.br
pgina 8
if...else if E de novo ao se acrescentar agora o comando if...else no loop do comando if podese criar mais um outro comando, o if...else if. No exemplo abaixo se expresso1 for verdadeira o bloco de instrues1 executado; se expresso1 for falsa mas expresso2 for verdadeira bloco de instrues2 executado; e se expresso1 e expresso2 forem falsas o bloco de instrues3 executado.
da instruo anterior
O comando if...else if
da instruo anterior
O comando switch...case
EXPRESSO
EXPRESSO 1 verdadeira?
NO
SIM
BLOCO DE INSTRUES 1
ELSE IF
EXPRESSO 2 verdadeira?
1?
NO
SIM
BLOCO DE INSTRUES 1
NO
2?
ELSE
BLOCO DE INSTRUES 3
SIM
BLOCO DE INSTRUES 2
SIM
BLOCO DE INSTRUES 2
NO
3?
NO
BLOCO DE INSTRUES 4 (default)
SIM
BLOCO DE INSTRUES 3
if (expresso1) { bloco de comandos1; } else if (expresso2) { bloco de instrues2; } else { } bloco de comandos3;
switch (expresso) { case 1: bloco de instrues1; break; case 2: bloco de instrues2; break; case 3: bloco de instrues3; break; default: bloco de instrues4; }
instrues de outro comando if...else e assim criar uma cadeia de comandos para testar dezenas de expresses at encontrar uma que retorne um resultado verdadeiro e executar um dos blocos de instrues; mas existe um comando prprio que simplifica bastante essa seleo, o comando switch... case. Esse comando permite comparar uma mesma varivel inteira, ou uma expresso que retorne um inteiro, com vrios valores possveis.
www.revistadoarduino.com.br
pgina 9
while Uma das operaes mais frequentes que os programas executam repetir um grupo de inwhile (expresso) { bloco de instrues; } O bloco de instrues ser executado enquanto o parmetro expresso for verdadeiro.
strues at que uma condio inicialmente verdadeira se torne falsa. para isso que serve o comando while. A sua sintaxe a seguinte:
da instruo anterior
O comando while
da instruo anterior
O comando do...while
LOOP
BLOCO DE INSTRUES
BLOCO DE INSTRUES
LOOP
SIM
do...while Para que o bloco de instrues seja executado ao menos uma vez, ele deslocado
para a entrada da caixa de decises, antes do teste de validade: do { bloco de instrues; } while (expresso); Aqui o bloco de instrues ser executado primeiro e s ento o parmetro expresso avaliado.
www.revistadoarduino.com.br
pgina 10
for Inserindo-se no loop do comando while um contador que registre cada execuo do bloco de
for (varivel; expresso;incremento) { bloco de instrues; }
instrues cria-se o comando for. Esse contador deve ter uma varivel de controle que deve ser previamente inicializada com um tipo e um valor. A sua sintaxe a seguinte:
A varivel inicializada normalmente com 0 ou 1; o parmetro expresso deve conter o valor mximo (ou mnimo) que o contador deve alcanar; e incremento o valor que ser incrementado (ou decrementado) da varivel cada vez que o bloco de instrues executado. Observe que cada parmetro entre parnteses separado por ponto e vrgula.
O comando for
Exemplo: for (int i = 0; i <= 10; i++) { println (contador); delay(1000); } Nesse exemplo a varivel de controle i do contador inicializada com 0; o contador testado e se o valor nele acumulado for menor que 10 seu valor enviado para o Terminal, e depois de 1 segundo, o contador incrementado e seu novo valor testado novamente.
CONTADOR LOOP
BLOCO DE INSTRUES
SIM
www.revistadoarduino.com.br
pgina 11
C++ com o operador condicional ?, tambem chamado de operador ternrio. Esse operador avalia uma expresso e se esta for vardadeira uma instruo executada, se a expresso for falsa uma outra expresso executada. A sua sintaxe a seguinte:
Aqui o valor de y vai depender da avaliao da expresso do operador ternrio; como o valor de x vale 8, a expresso (x>10) falsa, porisso o inteiro 20 ser atribuido a y; se o valor atribuido a x fosse maior que 10, y seria 15. Essa mesma expresso com o comando if...else ficaria assim: int x = 8; if (x > 10) { y = 15; } else y = 20;
da instruo anterior
O operador ternrio
verdadeira ?
EXPRESSO
SIM
INSTRUO 1
NO
INSTRUO 2
www.revistadoarduino.com.br
pgina 12
usados para deteo ou transmisso de controles digitais Funes em C: pinMode( ) digitalRead( ) digitalWrite( ) analogWrite( ) attachInterrupt( ) pulseIn( )
Pinos Digitais
Pinos de Alimentao
Pinos analgicos
www.revistadoarduino.com.br
pgina 13
AREF a entrada de tenso de referncia para o conversor A/D do Arduino; o pino GND o terra, comum a todos os outros pinos.
Pinos 3, 5 e 6 e 9 a11 (PWM): 6 pinos dos 14 pinos digitais podem ser usados para gerar sinais analgicos com a funo analogWrite( ) utilizando a tcnica de Modulao por Largura de Pulso (PWM). Pinos 0 e 1: os dois primeiros pinos digitais so conectados a USART do microcontrolador do Arduino para co municao serial com um computador.
Pinos 2 e 3: pinos que chamam uma ISR (Interrupt Service Routine) para tratar uma interrupo com a funo attachInterrupt( ) nesses pinos.
Funo pinMode(pino,modo)
Serve para estabelecer a direo do fluxo de informaes em qualquer dos 14 pinos digitais. Dois parmetros devem ser passados funo: o primeiro indica qual pino vai ser usado; o segundo, se esse pino vai ser entrada ou se vai ser sada dessas informaes.
Exemplo pinMode(2,OUTPUT);
Aqui o pino 2 selecionado para transmitir informaes do Arduino para um circuito externo qualquer. Para configurar esse pino como entrada, o segundo parmetro dessa funo deve ser INPUT.
Notas
Essa funo sempre escrita dentro da funo setup( ).
digitalRead(pino)
Uma vez configurado um certo pino como entrada com a funo pinMode( ), a informao presente nesse pino pode ser lida com a funo digitalRead( ) e armazenada numa varivel qualquer.
Nesse exemplo a varivel inteira chave vai guardar o estado lgico (verdadeiro/falso) presente no pino digital 3.
digitalWrite(pino,valor)
Para enviar um nvel lgico para qualquer pino digital do Arduino utiliza-se essa funo. Dois parmetros so requeridos: o nmero do pino e o estado lgico (HIGH/LOW ) em que esse pino deve permanecer.
digitalWrite(2,HIGH);
Aqui uma tenso de 5 volts colocada no pino 2. Para enviar terra para esse pino o segundo parmetro dever ser LOW.
www.revistadoarduino.com.br
pgina 14
No programa abaixo essas tres funes so utilizadas para acender um led no pino 2 toda vez que uma chave normalmente aberta no pino 3 for pressionada. void setup() { pinMode(2,OUTPUT); pinMode(3,INPUT); } void loop() { int chave = digitalRead(3); digitalWrite(2,chave); } // led no pino 2 como sada // chave no pino 3 como entrada // varivel chave guarda estado do pino 3 // estado de chave passado para pino 2.
O cdigo dentro da funo loop( ) acima pode ainda ser simplificado da seguinte forma: void loop() { digitalWrite(2,digitalRead(3)); // led (pino 2) acende se chave (pino 3) for pressionada. }
Funo
analogWrite(pino,valor)
O Arduino pode gerar tenses analgicas em 6 de seus 14 pinos digitais com a funo analogWrite( ). Dois parmetros devem ser passados funo: o primeiro indica em qual pino ser gerada a tenso; o segundo determina a amplitude dessa tenso, e deve ter valores entre 0 (para 0 volt) e 255 (para 5 volts).
Exemplo
analogWrite(10,128);
Com esses parmetros uma tenso analgica de 2,5 volts vai aparecer no pino 10. No necessrio configurar um pino PWM como sada com a funo pinMode( ) quando se chama funo analogWrite( ).
Notas
Modulao por Largura de Pulsos, ou PWM (Pulse Width Modulation) na lingua inglesa, uma tcnica usada para gerar tenses analgicas a partir de uma sequncia de pulsos digitais.
attachInterrupt(pino,funo,modo) attachInterrupt(0,conta LOW - dispara a interrupo quando o pino Essa funo uma rotina de servio de dor,RISING);
interrupo, ou ISR (Interrupt Service Routine) em ingls. Toda vez que ocorrer uma interrupo por hardware no pino digital 2 ou no 3 do Arduino uma outra funo, criada pelo programador, vai ser chamada. O terceiro parmetro, modo, informa como a interrupo vai ser disparada, se na borda de subida do pulso detetado no pino do Arduino, se na borda de descida, se quando o pulso for baixo ou se na mudana de nvel desse pulso. Nesse exemplo a funo contador vai ser chamada quando o Arduino detetar uma mudana do nvel LOW para o nvel HIGH em seu pino 2. Nessa ISR o parmetro 0 monitora o pino 2, o parmetro 1 monitora o pino 3.
est em 0; CHANGE - dispara sempre que o pino muda de estado (de 0 para 1, ou vice-versa); RISING - somente quando o pino muda de 0 para 1; FALLING - somente quando o pino muda de 1 para 0. Uma aplicao interessante para essas duas ltimas funes pode ser vista no meu livro Experimentos com o Arduino, no captulo que mostra como montar um contador de dois dgitos com mostradores de 7-segmentos.
pulseIn(pino,valor,espera)
Essa funo mede a largura em microssegundos de um pulso em qualquer pino digital. O parmetro valor diz funo que tipo de pulso deve ser medido, se HIGH ou LOW. O parmetro espera (time out) opcional e se passado funo faz com que a medida do pulso s comece aps o tempo em microssegundos ali especificado.
pulseIn(4,HIGH);
Aqui essa funo vai monitorar o pino 4, e quando o nvel nesse pino mudar de LOW para HIGH a sua largura vai ser medida at que seu nvel volte para LOW. Se, por exemplo, for passado o valor 100 como terceiro parmetro, a medida da largura do pulso s ser disparada aps 100 uS.
www.revistadoarduino.com.br
pgina 15
So 6 pinos em uma s barra com o nome ANALOG IN, localizada no lado oposto s barras dos pinos digitais. So numerados de 0 a 5, agora da esquerda para a direita. Esses pinos so usados para leitura de sinais analgicos de sensores conectados ao Arduino, e podem ser de quaisquer valores entre zero a 5 volts. Os pinos de entradas analgicas no precisam ser previamente configurados com a funo pinMode( ).
Pinos 0 a 5: esses 6 pinos aceitam tenses entre zero e 5 volts CC que vo ao conversor A/D de 10 bits no microcon trolador do Arduino. O pino AREF, numa das barras de pinos digitais, a entrada de tenso de referncia para esse conversor.
Funo
analogRead(pino)
Essa funo l o nvel analgico presente no pino indicado pelo parmetro entre parnteses e, aps a converso para o seu equivalente em bits, o guarda em uma varivel determinada pelo programador.
Exemplo
Aqui a varivel inteira sensor vai armazenar a tenso analgica convertida para digital presente no pino A0. Essa informao vai ser um valor inteiro entre 0 (para 0 volt no pino) e 1023 (se 5 volts no pino). Uma tenso de 2,5 volts no pino A0 vai fazer a varivel sensor guardar o valor inteiro 512.
Notas
reconhecidos pela linguagem C do Arduino tanto como A0 a A5 como 14 a 19. Assim, a mesma expresso acima pode ser escrita tambem da seguinte forma: int sensor = analogRead(14);
Uma observao importante em relao a esses pinos analgicos que eles podem ser configurados tambem como pinos digitais pela funo pinMode( ), aumentando assim o nmero desses pinos para 20. Assim, a expresso pinMode(14,OUTPUT); transforma o pino analgico A0 em pino de sada digital como qualquer outro presente nas duas barras de pinos digitais.
Exemplo: O cdigo a seguir l uma tenso CC no pino analgico A5 (pino 19) e envia esse valor digitalizado para controlar o brilho de um led no pino PWM 10: void setup( ) { } void loop( ) { analogWrite(10,analogRead(A5)/4); } // essa funo pode ficar vazia se no h configurao // converso de 0-1023 para 0-255 pela diviso por 4.
www.revistadoarduino.com.br
pgina 16
Funo Serial.begin(taxa)
Essa funo habilita a porta serial e fixa a taxa de transmisso e recepo em bits por segundo entre o computador e o Arduino.
Exemplo
Serial.begin(9600); Nesse exemplo essa funo fixa a taxa de comunicao em 9600 bps. Os pinos digitais 0 e 1 no podem ser utilizados como entrada ou como sada de dados quando a porta serial habilitada por essa funo.
Notas
Essa funo vai sempre dentro da funo setup( ).
Serial.end( )
Desabilita a porta serial para permitir o uso dos pinos digitais 0 e 1 para entrada ou sada de dados.
Essa funo tambem deve ser escrita dentro da funo setup( ). O valor 0 retornado quando no h nenhuma informao para ser resgatada na porta serial. O valor -1 retornado quando no h nenhuma informao para ser resgatada na porta serial.
Serial.available( )
A funo Serial.available( ) retorna o nmero de bytes disponveis para leitura no buffer da porta serial.
int total = Serial.available( ); Aqui a varivel inteira total vai guardar o nmero de caracteres que esto disponveis para leitura na porta serial. int valor = Serial.read( ); Aqui a varivel inteira valor vai guardar o primeiro byte (caracter) disponvel na porta serial.
Serial.read( )
Serial.print(valor,formato)
Serial.print(1.23456); Serial.print(1.23456,3); Essa funo envia para a porta seSerial.print(Al Mundo!); rial um caracter ASCII, que pode ser capturado por um terminal de comuni- Serial.print(A); cao. O segundo parmetro, formato, Serial.print(A,BIN); opcional e especifica com quantas ca- Serial.print(A,OCT); sas decimais ou com que base numrica Serial.print(A,HEX); Serial.print(A,DEC); vai ser o nmero transmitido.
// transmite 1.23 (default) // transmite 1.234 // transmite a frase (string) // transmite o caracter A // transmite 01000001 // transmite o octal 101 // transmite o hexa 41 // transmite o decimal 65
Serial.println(valor,formato)
Como a anterior essa funo envia para a porta serial um caracter ASCII com os mesmos parmetros opcionais de formato, porem acrescenta ao final da transmisso o caracter Carriage Return (retorno ao incio da linha) e o caracter New Line (mudana para a prxima linha).
www.revistadoarduino.com.br
pgina 17
Todas essas funes em C para comunicao serial podem se testadas com o cdigo abaixo e ativando o Terminal de Comunicao do Arduino: void setup( ) { Serial.begin(9600); } void loop( ) { Serial.print(Retorno de available( ): ); Serial.println(Serial.available()); delay(1000); Serial.print(Retorno de read( ): ); Serial.println(Serial.read( )); delay(1000); } //inicia a porta serial em 9600 bps //envia frase ao terminal //transmite total de bytes disponveis //pausa 1 seg //envia frase //transmite primeiro byte disponvel na porta //pausa 1 seg.
O Terminal Serial do Arduino mostrar inicialmente todo segundo o retorno da funo available( ), que ser 0, e o da funo read( ), que ser -1. Isso ocorre porque nenhum dado est disponvel na porta serial do computador. Entre no Terminal do Arduino e transmita, por exemplo, as letras ABCDE juntas (digite no campo ao lado do boto Send) e observe que a funo available( ) informa inicialmente que existem 5 caracteres no buffer para ser enviados; e a funo read( ) mostra o cdigo ASCII decimal 65 do primeiro deles, que corresponde letra A. Os outros caracteres vo sendo enviados sequencialmente enquanto available( ) vai decrementando at 0 de novo.
Ficam na barra com 6 pinos, marcada como POWER, localizada ao lado dos pinos analgicos. O primeiro pino dessa barra, RESET, quando forado ao potencial de terra serve para resetar o Arduino. Do outro lado, Vin um pino que tambem pode servir para alimentar o Arduino se nele for aplicada uma tenso entre 9 e 15 volts.
barra somente os quatro do meio servem para alimentar um circuito externo conectado ao Arduino: o pino de 5V e o terra (os dois pinos Gnd entre 5V e Vin); e o pino 3V3 que disponibiliza essa tenso com uma corrente mxima de 50mA.
www.revistadoarduino.com.br
pgina 18