int latchPin = 13; // Pino conectado ao ST_CP do 74HC595 (Pin12)
int clockPin = 14; // Pino conectado ao SH_CP do 74HC595 (Pin11)
int dataPin = 12; // Pino conectado ao DS do 74HC595 (Pin14)
int ButtonPin = 25;
boolean ButtonState = 0;
boolean ButtonStateOld = 1; // Estado anterior do botão
void setup()
{
pinMode(latchPin, OUTPUT); // Define o pino como saída
pinMode(clockPin, OUTPUT); // Define o pino como saída
pinMode(dataPin, OUTPUT); // Define o pino como saída
pinMode(ButtonPin, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("Teste");
}
void loop()
{
ButtonState = digitalRead(ButtonPin);
// Verifica se o botão foi pressionado (mudança de estado)
if (ButtonState != ButtonStateOld)
{
// Alterna o sentido dos LEDs com base no estado do botão
if (ButtonState == HIGH)
{
// Sentido da direita para a esquerda
byte x = B00000001; // Representa apenas um LED da direita aceso
for (int j = 0; j < 8; j++)
{
writeTo595(LSBFIRST, x); // Acende o LED da direita para a esquerda
x <<= 1; // Move o bit para a esquerda (LED aceso move um passo para a esquerda)
delay(50); // Aguarda 0,05s
}
}
else
{
// Sentido da esquerda para a direita
byte x = B10000000; // Representa apenas um LED da esquerda aceso
for (int j = 0; j < 8; j++)
{
writeTo595(LSBFIRST, x); // Acende o LED da esquerda para a direita
x >>= 1; // Move o bit para a direita
delay(50); // Aguarda 0,05s
}
}
// Atualiza o estado anterior do botão
ButtonStateOld = ButtonState;
}
}
void writeTo595(int order, byte _data)
{
digitalWrite(latchPin, LOW); // Nível baixo no pino latchPin
shiftOut(dataPin, clockPin, order, _data); // Envia dados seriais para o 74HC595
digitalWrite(latchPin, HIGH); // Nível alto no pino latchPin para atualizar os dados
}