Mapa das Entradas e Saídas do Arduino
João Alexandre da Silveira - autor do livro digital Experimentos com o Arduino

A Porta USB

É por meio da porta serial USB que o Arduino se comunica atraves de um cabo a um computador ou a outros dispositivos que tenham tambem uma interface USB. É tambem por esse conector que o Arduino recebe 5 volts diretamente da fonte de alimentação do computador.

Funções em C para a porta serial:

(Deslize o mouse sobre cada função)

Serial.begin(taxa)

Essa função habilita a porta serial e fixa a taxa de transmissão e recepção em bits por segundo entre o computador e o Arduino.

Exemplo: Serial.begin(9600) - porta serial é habilitada em 9600 bps.

Os pinos digitais 0 e 1 não podem ser utilizados como entrada ou como saída de dados quando a porta serial é habilitada por essa função.



Serial.end( )

Desabilita a porta serial para permitir o uso dos pinos digitais 0 e 1 para entrada ou saída de dados.

Como a função anterior, essa função deve ser sempre escrita dentro de setup( ).



Serial.available( )

Retorna o número de bytes disponíveis para leitura no buffer da porta serial.

Exemplo: int total=Serial.available( ); Aqui a variável inteira ‘total’ vai guardar o número de caracteres que estão disponíveis para leitura na porta serial.

O valor 0 é retornado quando não há nenhuma informação para ser resgatada na porta serial.



Serial.read( )

Essa função lê o primeiro byte que está no buffer da porta serial.

Exemplo: int valor = Serial.read( ); Aqui a variável inteira ‘valor’ vai guardar o primeiro byte (caracter) disponível na porta serial.

O valor -1 é retornado quando não há nenhuma informação para ser resgatada na porta serial.



Serial.print(valor,formato)

Envia para a porta serial um caracter ASCII, que pode ser capturado por um terminal de comunicação. O segundo parâmetro, ‘formato’, é opcional e especifica com quantas casas decimais ou com que base numérica vai ser o número transmitido.

Exemplos:

  Serial.print(1.23456);      // transmite 1.23 (default)
  Serial.print(1.23456,3);    // transmite 1.234
  Serial.print(“Alô Mundo!“); // transmite a frase (string)
  Serial.print(‘A’);          // transmite o caracter A
  Serial.print(‘A’,BIN);      // transmite 01000001
  Serial.print(‘A’,OCT);      // transmite o octal 101
  Serial.print(‘A’,HEX);      // transmite o hexa 41
  Serial.print(‘A’,DEC);      // transmite o decimal 65
                                


Serial.println(valor,formato)

Como a anterior, essa função envia para a porta serial um caracter ASCII com os mesmos parâmetros opcionais de ‘formato’, porem acrescenta ao final da transmissão o caracter Carriage Return (retorno ao início da linha) e o caracter New Line (mudança para a próxima linha).



Arduino_pinout.jpg
Os Pinos Analógicos

A0~A5: São 6 pinos em uma só barra com o nome ANALOG IN, localizada no lado oposto às barras dos pinos digitais. São numerados de 0 a 5, da esquerda para a direita. Esses pinos são usados para leitura de sinais analógicos de sensores conectados ao Arduino, e podem ser de quaisquer valores entre 0 a 5 volts. Os pinos analógicos não precisam ser previamente configurados com a função pinMode( ).

Função em C para os pinos analógicos:

analogRead(pino)

Essa função lê o nível analógico presente no pino indicado pelo parâmetro entre parênteses e, após a conversão para o seu equivalente em bits, o guarda em uma variável determinada pelo programador.

Exemplo: int sensor = analogRead(A0); Aqui a variável inteira ‘sensor’ vai armazenar a tensão analógica convertida para digital presente no pino A0. Essa informação vai ser um valor inteiro entre 0 (para 0 volt no pino) e 1023 (se 5 volts no pino).

Os pinos analógicos são reconhecidos pela linguagem do Arduino tanto como A0 a A5 como 14 a 19. Assim, a mesma expressão acima pode ser escrita tambem da seguinte forma: int sensor = analogRead(14);


Obs.: Esses pinos analógicos podem ser configurados tambem como pinos digitais pela função pinMode( ), aumentando assim o número desses pinos de 14 para 20.

Arduino ou Raspberry Pi?

Os Pinos Digitais

0~13: São 14 pinos marcados com o nome DIGITAL logo abaixo de duas barras de 8 pinos. São numerados de 0 a 13 da direita para a esquerda e podem ser configurados pela função pinMode( ) para detetarem ou transmitirem níveis lógicos digitais (verdadeiro/falso, 1/0 ou HIGH/LOW).

AREF e GND: O pino AREF é a entrada de tensão de referência para o conversor A/D do Arduino; o pino GND é o terra, comum a todos os outros pinos.

PWM: 6 dos 14 pinos digitais (marcados com '~') podem ser usados para gerar sinais analógicos com a função analogWrite( ) utilizando a técnica de Modulação por Largura de Pulso (PWM).

Pinos 0 e 1: Os dois primeiros pinos digitais são conectados a USART do microcontrolador do Arduino para comunicação serial com um computador.

Pinos 2 e 3: Pinos que chamam uma ISR (Interrupt Service Routine) para tratar uma interrupção de hardware com a função attachInterrupt( ) nesses pinos.

Funções em C para os pinos digitais:

pinMode(pino,modo)

Serve para estabelecer a direção do fluxo de informações em qualquer dos 14 pinos digitais. Dois parâmetros devem ser passados à função: o primeiro indica qual pino vai ser usado; o segundo, se esse pino vai ser entrada ou se vai ser saída dessas informações.

Exemplo: pinMode(2,OUTPUT); Aqui o pino 2 é selecionado para transmitir informações do Arduino para um circuito externo qualquer. Para configurar esse pino como entrada, o segundo parâmetro dessa função deve ser INPUT.

digitalRead(pino)

Uma vez configurado um certo pino como entrada com a função pinMode( ), a informação presente nesse pino pode ser lida com a função digitalRead( ) e armazenada numa variável qualquer.

Exemplo: int chave = digitalRead(3); Nesse exemplo a variável inteira ‘chave’ vai guardar o estado lógico (verdadeiro/falso) presente no pino digital 3.

digitalWrite(pino,valor)

Para enviar um nível lógico para qualquer pino digital do Arduino utiliza-se essa função. Dois parâmetros são requeridos: o número do pino e o estado lógico (HIGH/LOW ) em que esse pino deve permanecer.

Exemplo: digitalWrite(2,HIGH); Aqui uma tensão de 5 volts é colocada no pino 2. Para enviar terra para esse pino o segundo parâmetro deverá ser LOW.

analogWrite(pino,valor)

O Arduino pode gerar tensões analógicas em 6 de seus 14 pinos digitais com a função analogWrite( ). Dois parâmetros devem ser passados à função: o primeiro indica em qual pino será gerada a tensão; o segundo determina a amplitude dessa tensão, e deve ter valores entre 0 (para 0 volt) e 255 (para 5 volts).

Exemplo: analogWrite(10,128); Com esses parâmetros uma tensão analógica de 2,5 volts vai aparecer no pino 10. Não é necessário configurar um pino PWM como saída com a função pinMode( ) quando se chama função analogWrite( ).

attachInterrupt(pino,função,modo)

Essa função é uma rotina de serviço de interrupção, ou ISR (Interrupt Service Routine). Toda vez que ocorrer uma interrupção por hardware no pino digital 2 ou no 3 do Arduino uma outra função, criada pelo programador, vai ser chamada. O terceiro parâmetro, modo, informa como a interrupção 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 mudança de nível desse pulso.

Exemplo: attachInterrupt(0,conta dor,RISING); Nesse exemplo a função ‘contador’ vai ser chamada quando o Arduino detetar uma mudança do nível LOW para o nível HIGH em seu pino 2. Nessa ISR o parâmetro 0 monitora o pino 2, o parâmetro 1 monitora o pino 3.

pulseIn(pino,valor,espera)

Essa função mede em microssegundos a largura de um pulso em qualquer pino digital. O parâmetro ‘valor’ diz à função que tipo de pulso deve ser medido, se HIGH ou LOW. O parâmetro ‘espera’ (time out) é opcional e se passado à função faz com que a medida do pulso só comece após o tempo em microssegundos ali especificado.

Exemplo: pulseIn(4,HIGH); Aqui essa função vai monitorar o pino 4, e quando o nível nesse pino mudar de LOW para HIGH a sua largura vai ser medida até que seu nível volte para LOW. Se, por exemplo, for passado o valor 100 como terceiro parâmetro, a medida da largura do pulso só será disparada após 100 uS.

Os Pinos de Alimentação

Ficam na barra com 6 pinos, marcada como POWER, localizada ao lado dos pinos analógicos. O primeiro pino dessa barra, RESET, quando forçado 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 tensão entre 9 e 15 volts.

Dos 6 pinos dessa 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 tensão com uma corrente máxima de 50mA.