Referência
Video
Curso Setup e Loop
Entradas e saídas digitais
Configuração das entradas digitais
Antes de utilizar cada um pinos do Arduino em sua aplicação, você deve
configurá-lo como entrada ou saída digital, conforme a necessidade. Por
exemplo, para acionar um LED você deve configurar o pino como saída e
para ver o estado de uma chave ou interruptor você deve configurar o pino como entrada.Na imágem acima vemos 1 LED sendo acionado pela porta 11, configurada como saída digital e 2 chaves conectadas às portas 7 e 8 cofiguradas como entrada digital.
Saída digital: LED, lâmpadas, buzinas, motores
Entrada digital: chaves, sensores
Entradas Digitais
Por padrão os pinos no Arduino estão configurados como entradas digitais, porém, para ficar mais explicito na programação, deve-se configurar o pino como entrada.Para que se possa utilizar um pino como entrada digital, é necessário colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme o desenho abaixo.
Esses resistores garantem nível lógico estável, ou seja, a entrada digital não fica flutuando, quando por exemplo uma tecla não está pressionada.
Geralmente utiliza-se um resistor de 10K para esse propósito.
O microcontrolador ATmega328, da placa Arduino UNO, possui resistores de pull-up internos ( 20 kOhms) que facilitam a ligação de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilitação desses resistores é feita de maneira simples via software.
Configuração dos Pinos Digitais
Para se configurar um pino como entrada ou saída, utilizamos a seguinte função:- pinMode();
Ela geralmente é utilizada dentro da função setup(). Apresenta
as seguintes características:
pinMode(pino, modo);
pino:
Número correspondente ao pino que se deseja configurar, conforme a
placa que está trabalhando. No caso da Arduino UNO e NANO pode ser de 0 a 13;
- INPUT: Entrada digital;
- INPUT_PULLUP: Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado;
- OUTPUT: Saída digital;
Leitura de uma Entrada Digital
A função para a leitura do estado de uma entrada digital é:
- int digitalRead();
Essa função lê o valor presente em um pino digital. Ou seja, se essa entrada digital estiver ligada a uma chave, esse valor pode ser HIGH ou LOW.
Na foto acima, vemos uma chave (botão) conectado ao pino 2 do Arduino.
Quando esse potão estiver acionado, a entrada retorna HIGH, de outra forma retorna LOW.
A função de leitura apresenta as seguintes características:
Imagem
Na foto acima, vemos uma chave (botão) conectado ao pino 2 do Arduino.
Quando esse potão estiver acionado, a entrada retorna HIGH, de outra forma retorna LOW.
A função de leitura apresenta as seguintes características:
digitalRead(pino);
pino: valor correspondente ao pino que se deseja ler.
Retorno: HIGH ou LOW.
Acionamento de uma Saída Digital
Para acionarmos uma saída digital, utilizamos a função:
- digitalWrite();
A função digitalWrite() coloca um nível lógico Alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.
digitalWrite(pino, valor)
pino: Número correspondente ao pino;
valor: HIGH ou LOW
Exemplo
Para
exemplificar a utilização de pinos de I/O digitais, vamos desenvolver
uma aplicação de leitura de tecla e acionamento de LED, conforme o a
montagem feita no software Fritzing exibida a seguir:
Imagem
O esquema elétrico obtido a partir do Fritzing é exibido abaixo, note que no circuito há um resistor de pull-up que garante nível lógico alto quando tecla não está pressionada:
Imagem
O exemplo consiste em ler a tecla S1 e ligar o LED caso a mesma estiver pressionada. Caso não esteja sendo pressionada, o LED deve permanecer desligado.
O Sketch a seguir exibe a programação:
/*
Leitura de tecla
O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13
*/
int ledPin = 13; // cria uma variável "int" com o número do pino ligado ao LED
int inputPin = 2; // cria uma variável "int" com o número do pino conectado a tecla
int val = 0; // cria uma variável para armazenar o estado da entrada digital
int val = 0; // cria uma variável para armazenar o estado da entrada digital
void setup()
{
pinMode(ledPin, OUTPUT); // declara o pino do led como saída
pinMode(inputPin, INPUT); // declara o pino da tecla como entrada
}
void loop()
{
val = digitalRead(inputPin); // le o valor na entrada e armazena na variável val
if (val == LOW) // se valor está em zero( tecla pressionada)
{
digitalWrite(ledPin, HIGH); // Liga LED indicando tecla pressionada
}
else
{
digitalWrite(ledPin, LOW); // Desliga LED indicando tecla solta
}
A programação apresentada acima possui uma estrutura bem simples e serve de inicio para a manipulação de pinos de I/O digitais. Com as três funções apresentadas é possível aplicar em diversos projetos que necessitem de acionamento e leitura de sinais digitais. Agora para fixar os conceitos apresentados é necessário colocar a mão na massa!!!
Exercícios
1) Para que serve a função pinMode() ?
2) Para que serve a função digitalRead() ?
3) O que pode ser acionado por uma saída digital?
4) Que tipo de informação pode ser recebida por uma entrada digital?
5) Que tipo de informação é recebida pela função digitalRead() ?
6) O que é um resistor de Pull-down?
7) Para que serve o modo INPUT_PULLUP ?