// Pin definitions
const int S0 = 2;
const int S1 = 3;
const int S2 = 4;
const int S3 = 5;
const int SIG_COM = 6;
void setup() {
// Set the select pins as outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Set the common pin as output
pinMode(SIG_COM, OUTPUT);
// Initialize the serial monitor
Serial.begin(9600);
}
void loop() {
// Chase LEDs from right to left
for (int channel = 0; channel < 16; channel++) {
selectChannel(channel);
digitalWrite(SIG_COM, HIGH);
delay(35);
digitalWrite(SIG_COM, LOW);
}
delay(10);
// Chase LEDs from left to right
for (int channel = 15; channel >= 0; channel--) {
selectChannel(channel);
digitalWrite(SIG_COM, HIGH);
delay(35);
digitalWrite(SIG_COM, LOW);
}
}
void selectChannel(int channel) {
digitalWrite(S0, bitRead(channel, 0));
digitalWrite(S1, bitRead(channel, 1));
digitalWrite(S2, bitRead(channel, 2));
digitalWrite(S3, bitRead(channel, 3));
}