shiftIn()

shiftIn(pinoDado, pinoClock, ordem)

É o irmão de entrada do shiftOut(): em vez de mandar dados, ele um byte inteiro bit a bit por um pino, dando um pulso de clock a cada bit. Perfeito para ler vários botões ou sensores usando um registrador de entrada como o 74HC165.

Sintaxe

byte valor = shiftIn(pinoDado, pinoClock, ordem);

Parâmetros

  • pinoDado: pino de onde cada bit é lido (deve estar como INPUT).
  • pinoClock: pino que gera o pulso de clock a cada bit (deve estar como OUTPUT).
  • ordem: MSBFIRST ou LSBFIRST, conforme a ordem em que os bits chegam.

Retorno

O byte lido (byte, de 0 a 255).

Exemplo

const int DADO  = 11;
const int CLOCK = 12;

void setup() {
  pinMode(DADO, INPUT);
  pinMode(CLOCK, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  byte leitura = shiftIn(DADO, CLOCK, MSBFIRST);
  Serial.println(leitura, BIN);
  delay(500);
}

Notas e cuidados

  • O pino de dado deve estar como INPUT e o de clock como OUTPUT.
  • Lê sempre 8 bits; para registradores em cascata, chame a função uma vez por byte.
  • Com o 74HC165, dê o pulso de load antes para travar o estado das entradas no momento da leitura.

Quer aprender a usar isso em projetos reais, do zero?

Conhecer o Curso Maker