#define ROW1 11 //red
#define ROW2 12 //green
#define ROW3 13 //blue
#define REFRESH 100u
#define INTERVAL 500u
void setup() {
// put your setup code here, to run once:
for (unsigned char i = 2; i <= ROW3; ++i)
pinMode(i, OUTPUT);
digitalWrite(ROW2, true);
digitalWrite(ROW3, true);
}
unsigned char c{};
unsigned long iTimestamp{}, rTimestamp{};
bool on = true, direction = 0; // 0 - forward, 1 - backward
void loop() {
// put your main code here, to run repeatedly:
if (millis() >= rTimestamp) {
digitalWrite(c % 9 + 2, !direction);
for (unsigned char i = c % 9 + 1; i <= 9 + c / 9; ++i)
if (i >= 9)
digitalWrite(i + 2, !on);
else
digitalWrite(i + 2, on && i < c);
rTimestamp = millis() + REFRESH;
on = !on;
}
if (millis() >= iTimestamp) {
c = (c + 1 - 2 * direction) % 27;
iTimestamp = millis() + INTERVAL;
}
}
// digitalWrite(i + 2, on && !(i - 9 < c / 9 && i >= 9));