shiftOut()

Descrição

Transfere um byte de dados um bit de cada vez. Começa com ou o bit mais significante (o mais à esquerda) ou o menos significante (mais à direita). Cada bit é escrito em sequência em um pino data, logo após o pino clock é pulsado (colocado em HIGH, depois LOW) para indicar que aquele bit está disponível.

Nota - se você está conectando um dispositivo que é sincronizado pela borda de subida do clock, irá precisar fazer com que o pino clock seja low antes de chamar shiftOut(), ex. com digitalWrite(clockPin, LOW).

Essa é uma implementação por software; O Arduino também provê uma biblioteca SPI que faz a implementação em hardware, que é mais rápida, mas apenas funciona em pinos específicos.

Sintaxe

shiftOut(dataPin, clockPin, bitOrder, value)

Parâmetros

  • dataPin: o pino no qual transferir cada bit (int)
  • clockPin: o pino a ser pulsado uma vez que o pino data estiver com o bit a ser trasnferido (int)
  • bitOrder: em que ordem receber os bits; pode ser MSBFIRST ou LSBFIRST. Respectivamente, primeiro o bit mais significativo (Most Significant Bit First), ou o primeiro o bit menos significativo (Least Significant Bit First)
  • value: o valor a ser transferido. (byte)

Retorna

Nada

Código de Exemplo

Para o circuito, ver o tutorial sobre o controle de um registrador de deslocamento 74HC595 (Em Inglês).

//**************************************************************// // Name : shiftOutCode, Hello World // // Author : Carlyn Maw,Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //**************************************************************** //Pino conectado a ST_CP no 74HC595 int latchPin = 8; //Pino conectado a SH_CP no 74HC595 int clockPin = 12; //Pino conectado a DS no 74HC595 int dataPin = 11; void setup() { //configura os pinos usados no loop principal como saídas pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //rotina de contagem de 0 até 255 for (int j = 0; j < 256; j++) { //coloca e mantém o pino latch em low enquanto ocorre a transmissão digitalWrite(latchPin, LOW); //transmite o valor de j, a começar pelo bit menos significativo shiftOut(dataPin, clockPin, LSBFIRST, j); //retorna o pino latch para high para sinalizar ao chip //que esse não precisa mais esperar por informação digitalWrite(latchPin, HIGH); delay(1000); } }

※ Notas e Advertências:

Os pinos data e clock devem ser configurados como saídas com uma chamada de pinMode().

A função shiftOut() atualmente funciona para transferir apenas 1 byte (8 bits) então requer uma operação em dois passos para transferir valores maiores que 255.

// Para serial MSBFIRST, faça: int data = 500; // transfere o byte mais significativo shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); // trasnfere o byte menos significativo shiftOut(dataPin, clock, MSBFIRST, data); // Para serial LSBFIRST, faça: data = 500; // transfere o byte menos significativo shiftOut(dataPin, clock, LSBFIRST, data); // transfere o byte mais significativo shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

Ver Também

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Disclosure: Some links in this section are Amazon affiliate links. If you make a purchase through these links, we may earn a commission at no extra cost to you.
Additionally, some links direct to products from our own brand, DIYables.

※ OUR MESSAGES