const int main_pins[] = {1, 2, 3};
const int sub_pins[] = {13, 12, 11, 10, 9, 8, 7, 6, 5};
const int num_main = 3;
const int num_sub = 9;
const int temp = 500;
void setup() {
for(int i = 0; i < num_main; i++) {
pinMode(main_pins[i], OUTPUT);
}
for(int i = 0; i < num_sub; i++) {
pinMode(sub_pins[i], OUTPUT);
}
}
void allOff() {
for(int i = 0; i < num_main; i++) {
digitalWrite(main_pins[i], LOW);
}
for(int i = 0; i < num_sub; i++) {
digitalWrite(sub_pins[i], HIGH);
}
}
void setMainLine(int line) {
for(int i = 0; i < num_main; i++) {
digitalWrite(main_pins[i], i == line ? HIGH : LOW);
}
}
void setSubLeds(int startPos, bool reverseDirection) {
for(int i = 0; i < num_sub; i++) {
if (reverseDirection) {
digitalWrite(sub_pins[i], (i >= num_sub - startPos - 3 && i < num_sub - startPos) ? LOW : HIGH);
} else {
digitalWrite(sub_pins[i], (i >= startPos && i < startPos + 3) ? LOW : HIGH);
}
}
}
void loop() {
//mover da esquerda para direita
for(int line = 0; line < num_main; line++) {
setMainLine(line);
for(int pos = 0; pos <= num_sub - 3; pos++) {
setSubLeds(pos, false);
delay(temp);
}
}
//mover da direita para esquerda
for(int line = num_main - 1; line >= 0; line--) {
setMainLine(line);
for(int pos = 0; pos <= num_sub - 3; pos++) {
setSubLeds(pos, true);
delay(temp);
}
}
}