São 14 pinos digitais dispostos em duas barras de 8 pinos, marcadas com o nome
DIGITAL (PWM) e numerados de 0 a 13. A direção do fluxo de informações nesses pinos é configurada com a função
pinMode( ).
A leitura do estado lógico em qualquer pino é feita com a função
digitalRead( ) e a escrita com a função
digitalWrite( ).
Os dois últimos pinos à esquerda dessas duas barras,
AREF e GND, são a entrada de tensão de referência para o conversor A/D do Arduino e o terra, pino comum a todos os outros pinos.
Desses 14 pinos digitais, 6 são marcados com
'~' e 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).
são os pinos
3,5 e 6 e 9 a 11,
Os dois primeiros pinos digitais, pinos
0 e 1, são conectados diretamente a USART interna do microcontrolador do Arduino para comunicação serial com um computador.
Os pinos
2 e 3 podem detetar uma interrupção de
hardware e assim chamar uma
ISR (Interrupt Service Routine) para ser tratada com a função
attachInterrupt( ).
São 6 pinos em uma só barra com o nome
ANALOG IN e numerados de
A0 a A5. Esses pinos são usados para leitura, com a função
analogRead(), de sinais de sensores conectados ao Arduino. Esses sinais, tensões entre 0 e 5 volts CC, vão ao conversor A/D de 10 bits no microcontrolador do Arduino.
O pino
AREF, numa das barras de pinos digitais, é a entrada de tensão de referência para esse conversor.
Esses pinos de entradas analógicas não precisam ser previamente configurados com a função pinMode().
Obs.: Uma observação importante em relação a esses pinos analógicos é que eles podem ser configurados tambem como pinos digitais pela função pinMode( ), aumentando assim o número desses pinos de 14 para 20. Assim, a expressão
pinMode(19,OUTPUT); transforma o pino analógico
A5 em pino de saída digital como qualquer outro presente nas duas barras de pinos digitais.
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 regulada ou não entre 9 e 15 volts
Os 4 pinos do meio dessa barra de 6 pinos servem para alimentar um circuito externo conectado ao Arduino: são os pinos com as tensões de 3.3V e 5V e os dois pinos de terra; a corrente máxima fornecida é de 50mA.
É por meio desse conector USB fêmea do tipo A que o Arduino se comunica atraves de um cabo serial 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 da porta serial:
begin( )
end( )
available( )
read( )
print( )
println( )
Todas essas funções para comunicação serial podem se testadas com esse
código em C no Terminal de Comunicação do Arduino.
Sintaxe:
pinMode(pino,modo);Serve para estabelecer a direção do fluxo de informações em qualquer um dos 14 pinos digitais. Dois parâmetros devem ser passados à essa função: o primeiro,
pino, indica qual pino vai ser usado; o segundo,
modo, 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 mesmo pino como entrada, o parâmetro
modo deverá ser
INPUT.
Obs: Essa função deverá ser sempre escrita dentro da função
setup( ).
Sintaxe: void setup() { ... }
Essa é a primeira função a ser chamada quando o programa inicia. E é executada apenas nessa primeira vez.
Esta é uma função de preparação: ela reune as funções que ditam o comportamento dos pinos do Arduino e de inicialização da porta serial.
Exemplo:
void setup() {
pinMode (10,OUTPUT);
Serial.begin(9600);
}
Sintaxe: void loop() { ... }
Essa função é chamada logo depois da função setup() e todas as outras funções ambarcadas nela são repetidamente executadas.
Ela fica lendo os pinos configurados como entrada e controlando os pinos configurados como saida e a porta serial.
Exemplo: aqui um led no pino 2 acende 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);
}
Sintaxe:
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.
Obs: Essa função deverá ser sempre escrita dentro da função
loop( ).
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: pino, que é o número do pino digital do Arduino e valor, que é 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 0 volt (terra) para esse mesmo pino o segundo parâmetro deverá ser LOW.
Obs.: É necessário configurar previamente o pino como saída com a função pinMode( ).
Sintaxe: analogWrite(pino,valor);
Utilizando a técnica PWM o Arduino pode gerar tensões analógicas em 6 de seus 14 pinos digitais com essa função. Dois parâmetros devem ser passados à função: o primeiro, pino, indica em qual pino será gerada a tensão; o segundo, valor, determina a amplitude dessa tensão, que 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.
Obs.: Não é necessário configurar um pino PWM como saída com a função pinMode( ) quando se chama a função analogWrite( ).
Sintaxe: 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). Uma tensão de 2,5 volts no pino A0 vai fazer a variável sensor guardar o valor inteiro 512.
Obs.: 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);
A técnica de produzir tensões analógicas a partir de sinais digitais recebe o nome de Modulação por Largura de Pulso, ou PWM (Pulse Width Modulation).
O Arduino trabalha com uma resolução de 8 bits para gerar sinais PWM em seis dos 14 pinos digitais; assim para produzir uma amplitude média de 5 volts o valor da variável que vai gerar essa tensão será 255.
Para produzir tensões analógicas em qualquer desses seis pinos PWM do Arduino utilizamos a função analogWrite( ).
Sintaxe: attachInterrupt(pino,função,modo);
Essa função é uma rotina de serviço de interrupção, ou ISR (Interrupt Service Routine) em inglês.
Ela monitora o pino 2 ou 3 do Arduino. Toda vez que ocorrer uma interrupção por hardware em um desses pinos, uma outra função, criada pelo programador, vai ser chamada. O terceiro parâmetro, modo, informa quando a interrupção vai ser disparada: se na borda de subida do pulso (RISING), se na borda de descida (FALLING),
se quando o pulso for baixo (LOW) ou se na mudança de nível desse pulso (CHANGE).
Exemplo: attachInterrupt(0,contador,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.
Sintaxe: 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);
Nesse exemplo essa função fixa a taxa de comunicação em 9600 bps. Quando a porta serial é habilitada os pinos digitais 0 e 1 são usados para transmissão e recepção de dados e porisso não podem ser configurados nem como entrada nem como saída com a função pinMode().
Sintaxe: Serial.end( )
Essa função libera os pinos digitais 0 e 1 da porta serial e permite que eles possam ser usados como entrada ou saída de dados como qualquer outro pino de 2 a 13.
Sintaxe: Serial.available( )
A função 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.
Obs.: O valor 0 é retornado quando não há nenhuma informação para ser resgatada na porta serial.
Sintaxe: Serial.read( )
A função Serial.read( ) 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.
Obs.: O valor -1 é retornado quando não há nenhuma informação para ser resgatada na porta serial.
Sintaxe:
Serial.print(valor,formato)Essa função envia para a porta serial um caracter
ASCII, parâmetro
valor, 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
Serial.print(1.23456,3); // transmite 1.234
Serial.print(“Alô Mundo“); // transmite frase
Serial.print(‘A’); // transmite o caracter A
Serial.print(‘A’,BIN); // transmite 01000001
Serial.print(‘A’,OCT); // octal 101
Serial.print(‘A’,HEX); // transmite o hexa 41
Serial.print(‘A’,DEC); // decimal 65
Sintaxe: Serial.println(valor,formato)
Como a anterior, essa função envia para a porta serial um caracter ASCII com os mesmos parâmetros opcionais do parâmetro formato, porem acrescenta ao final da transmissão o caracter CR (Carriage Return) ou retorno ao início da linha, e o caracter New Line (mudança para a próxima linha).