shiftIn()
shiftIn(pinoDado, pinoClock, ordem)
É o irmão de entrada do shiftOut(): em vez de mandar dados, ele lê 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:
MSBFIRSTouLSBFIRST, 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
INPUTe o de clock comoOUTPUT. - Lê sempre 8 bits; para registradores em cascata, chame a função uma vez por byte.
- Com o 74HC165, dê o pulso de
loadantes para travar o estado das entradas no momento da leitura.