//**************************************************************//
// 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 ao ST_CP do 74HC595
int latchPin = 8;
// Pino conectado ao SH_CP do 74HC595
int clockPin = 12;
// Pino conectado ao DS do 74HC595
int dataPin = 11;
void setup() {
// configura pinos como saída pois são endereçados no loop()
pinMode(latchPin, OUTPUT);
}
void loop() {
// rotina de contagem
for (int j = 0; j < 256; j++) {
// aterre latchPin e mantenha por todo o tempo de transmissão
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, j);
// retorna o latchPin para HIGH, para sinalizar
// que não é preciso mais escutar a linha
digitalWrite(latchPin, 1);
delay(1000);
}
}
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// Esta função desloca 8 bits (bit mais significativo primeiro)
// na subida do clock
// O clock quando em LOW está pausado
// função de configuração interna
int i = 0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
// apaga tudo para preparar o registrador
// para os deslocamentos
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
// para cada bit no byte myDataOut
// VEJA QUE a contagem é REGRESSIVA no nosso laço for
// Quer dizer que %00000001 ou "1" vai atravessar o chip
// e que o pino Q0 é o que vai acender.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
//se o valor passado ao myDataOut e a máscara de bits resultar
// verdadeiro então... isto é, se estamos em i=6 e nosso valor é
// %11010100, o código compara-o com %01000000
// e segue a atribuir 1 a pinState.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
// Ajusta pino para HIGH ou LOW dependendo de pinState
digitalWrite(myDataPin, pinState);
// Registrador desloca os bits na subida do clock
digitalWrite(myClockPin, 1);
// Zera o pino de dados após deslocar, para prevenir vazamento
digitalWrite(myDataPin, 0);
}
//pare o deslocamento
digitalWrite(myClockPin, 0);
}