Robô faz pesquisa no blog

🔍 Buscar no Blog ×
Olá! Digite o assunto ou a palavra-chave que você procura, e eu listarei as postagens do blog para você.

Guia Completo da digitalRead(): Do Sinal Elétrico ao Nível Lógico HIGH/LOW

O objetivo fundamental da função digitalRead() é traduzir uma tensão elétrica do mundo físico em um sinal digital (nível lógico HIGH ou LOW) processável pelo microcontrolador. Seja para ler o estado de um botão, o disparo de um sensor ou o pulso de uma chave fim de curso, essa é a instrução básica de leitura em C/C++.


1. Sintaxe da Função digitalRead()

A função aceita como parâmetro o número do pino e retorna o valor lido:

int valor = digitalRead( pin );
  • pin (uint8_t): O pino digital ou analógico que você deseja ler (ex: 2, A0).
  • Retorno (int): Retorna HIGH (1) se a tensão estiver acima do limiar de nível alto, ou LOW (0) se estiver abaixo do limiar de nível baixo.

2. Processamento do Sinal e Limiares de Tensão (Thresholds)

Como o microcontrolador decide se uma tensão contínua ou alternada é HIGH ou LOW? Isso ocorre através dos limiares de tensão de entrada (Input Voltage Thresholds):

  • $V_{IL}$ (Volt Input Low): Define o limite máximo de tensão para que o sinal seja interpretado com certeza como NÍVEL LÓGICO BAIXO (LOW).
  • $V_{IH}$ (Volt Input High): Define o limite mínimo de tensão para que o sinal seja interpretado com certeza como NÍVEL LÓGICO ALTO (HIGH).

Em um sinal senoidal ou rampa, conforme a tensão ultrapassa o limiar $V_{IH}$, a função passa a responder como HIGH; quando a tensão cai abaixo de $V_{IL}$, ela é processada como LOW. O intervalo entre esses limiares garante estabilidade e imunidade contra ruídos elétricos.

3. Mapeamento de Pinos Analógicos como Digitais

Os pinos de entrada analógica também podem ser utilizados como pinos digitais comuns em funções como digitalRead() e digitalWrite():

Apelido Analógico Mapeamento Numérico Digital
A014
A115
A216
A317
A418
A519
Atenção às exceções: Em placas como o Arduino Nano, Pro Mini e Mini, os pinos A6 e A7 são exclusivamente entradas analógicas e não podem ser usados como pinos digitais com digitalRead().

4. Notas e Advertências Importantes

Pinos Flutuantes (Floating Pins): Se um pino configurado como entrada não estiver conectado a nenhum circuito ou componente (ficando "no ar"), o digitalRead() pode retornar tanto HIGH quanto LOW de forma totalmente aleatória devido a ruídos eletromagnéticos. Para evitar isso, sempre utilize resistores de Pull-Up ou Pull-Down externos (ou ative o INPUT_PULLUP interno).

5. Exemplo Prático de Código

Abaixo temos a estrutura clássica para ler um botão no pino 2 e controlar um LED no pino 13:

void setup() { pinMode(2, INPUT); // Pino 2 configurado como Entrada pinMode(13, OUTPUT); // Pino 13 configurado como Saída } void loop() { if (digitalRead(2) == HIGH) { // Acende o LED se o botão estiver pressionado (sinal HIGH) digitalWrite(13, HIGH); } else if (digitalRead(2) == LOW) { // Apaga o LED se o botão estiver solto (sinal LOW) digitalWrite(13, LOW); } }

Resumo Didático

A função digitalRead() converte os níveis de tensão do circuito físico em estados binários compreendidos pelo seu firmware. Entender os limites de tensão ($V_{IL}$ e $V_{IH}$) e evitar pinos flutuantes são passos essenciais para garantir leituras precisas e sem falhas em seus projetos de automação e eletrônica!

Comentários