Entradas Digitais no Arduino

Entradas Digitais no Arduino

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:

Arduino sem resistor de pulldown

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.

https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/
https://docs.arduino.cc/tutorials/generic/digital-input-pullup