#include <Arduino.h>
const int DS = 2; // Data pin of 74HC595
const int STCP = 3; // Latch pin of 74HC595
const int SHCP = 4; // Clock pin of 74HC595
byte ledPattern[2]; // Array to hold LED patterns for two shift registers
void setup() {
pinMode(DS, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(SHCP, OUTPUT);
clearLEDs();
}
void loop() {
rainDrop(2);
rainDrop2(2);
scanning(2);
theaterChase(2);
twinkle(2);
confetti(2);
candleEffect(2);
}
void clearLEDs() {
for (int i = 0; i < 2; i++) {
ledPattern[i] = 0;
}
updateShiftRegister();
}
void updateShiftRegister() {
digitalWrite(STCP, LOW);
for (int i = 1; i >= 0; i--) { // Send data to both shift registers
shiftOut(DS, SHCP, MSBFIRST, ledPattern[i]);
}
digitalWrite(STCP, HIGH);
}
void rainDrop(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int i = 0; i < 16; i++) {
//clearLEDs();
bitSet(ledPattern[i / 8], i % 8);
updateShiftRegister();
delay(50);
}
clearLEDs(); // Mematikan semua LED setelah semua LED menyala
}
}
void rainDrop2(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int i = 16 - 1; i >= 0; i--) {
//clearLEDs();
bitSet(ledPattern[i / 8], i % 8);
updateShiftRegister();
delay(50);
}
clearLEDs(); // Mematikan semua LED setelah semua LED menyala
}
}
void scanning(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int i = 0; i < 16; i++) {
bitSet(ledPattern[i / 8], i % 8);
updateShiftRegister();
delay(50);
bitClear(ledPattern[i / 8], i % 8);
}
for (int i = 16 - 1; i >= 0; i--) {
bitSet(ledPattern[i / 8], i % 8);
updateShiftRegister();
delay(50);
bitClear(ledPattern[i / 8], i % 8);
}
}
}
void theaterChase(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int j = 0; j < 10; j++) { // repeat 10 times
for (int q = 0; q < 3; q++) {
for (int i = 0; i < 16; i++) {
if ((i + q) % 3 == 0) {
bitSet(ledPattern[i / 8], i % 8);
} else {
bitClear(ledPattern[i / 8], i % 8);
}
}
updateShiftRegister();
delay(100);
}
}
}
}
void twinkle(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int i = 0; i < 50; i++) {
int led = random(16);
bitWrite(ledPattern[led / 8], led % 8, !bitRead(ledPattern[led / 8], led % 8));
updateShiftRegister();
delay(100);
}
}
}
void confetti(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int i = 0; i < 50; i++) {
int led = random(16);
bitSet(ledPattern[led / 8], led % 8);
updateShiftRegister();
delay(50);
bitClear(ledPattern[led / 8], led % 8);
}
}
}
void candleEffect(int repeat) {
for (int r = 0; r < repeat; r++) {
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 16; j++) {
bitWrite(ledPattern[j / 8], j % 8, random(2));
}
updateShiftRegister();
delay(50);
}
}
}