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, ouLOW(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 |
|---|---|
| A0 | 14 |
| A1 | 15 |
| A2 | 16 |
| A3 | 17 |
| A4 | 18 |
| A5 | 19 |
digitalRead().
4. Notas e Advertências Importantes
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
Postar um comentário