
Neste post vamos estudar as entradas digitais no Arduino.
No vídeo a seguir é mostrado o circuito que vamos utilizar em nossos estudos:
Códigos
As entradas digitais no Arduino, ou em outros microcontroladores permitem a leitura de teclas ou sensores, desde que retornem um nível válido que seja igual a 0 V ou igual a 5 V.
Para o exemplo apresentado, para fazermos a leitura da tecla vamos explorar duas possibilidades de código nesse post, sendo que é possível escrever o código de maneiras diferentes e obter os mesmos resultados.
A primeira versão do código é baseado na documentação oficial do Arduino, que depois pode ser consultado no final do post.
int LED = 13;
int tecla = 7;
int status = 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(tecla, INPUT);
}
void loop()
{
status = digitalRead(tecla);
digitalWrite (LED, status);
}
Uma outra maneira de obter o mesmo resultado é utilizando estruturas condicionais, como mostrado no código a seguir:
int LED = 13;
int tecla = 7;
int status = 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(tecla, INPUT);
}
void loop()
{
status = digitalRead(tecla);
if (status == HIGH) {
digitalWrite (LED, HIGH);
}
else {
digitalWrite (LED, LOW);
}
}
Alguns detalhes de Hardware
O exemplo apresentado no vídeo e os códigos consideram uma situação onde o terminal do Arduino vai sair do nível lógico baixo para o nível lógico alto, onde utilizamos um resistor de pulldown para garantir o nível lógico da entrada digital e também para que o terminal não fique flutuando e seja feitas leituras erradas.
O valor normalmente utilizado para resistores de pullup ou pulldown é de 10 k.
É possível fazer o mesmo circuito sem a utilização de um resistor de pulldown, como apresentado a seguir:

O microcontrolador ATMEGA328P possuí internamente resistores de pullup, que podem ser configurados como apresentado no código a seguir:
int LED = 13;
int tecla = 7;
int status = 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(tecla, INPUT_PULLUP);
}
void loop()
{
status = digitalRead(tecla);
if (status == LOW) {
digitalWrite (LED, HIGH);
}
else {
digitalWrite (LED, LOW);
}
}
E seguindo a lógica apresentada na documentação do Arduino temos:
int LED = 13;
int tecla = 7;
int status = 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(tecla, INPUT_PULLUP);
}
void loop()
{
status = digitalRead(tecla);
digitalWrite (LED, !status);
}
Simulação
Abaixo é possível conferir a simulação do circuito:
Isso é tudo pessoal, até o próximo post.