const unsigned int VIEWTIME = 200;
const unsigned int NLED = 7; // <= bitsize(row_t)
const unsigned int NLEDON = 2;
const unsigned int MAXSHIFT = NLED-NLEDON;
const unsigned int led[NLED] = {13, 12, 11, 10, 9, 8, 7};
typedef byte row_t;
void setup() {
for ( int i = 0; i < NLED; i++) {
pinMode(led[i], OUTPUT);
}
}
void ledWrite(row_t long leds) {
for ( int i = 0; i < NLED; i++) {
digitalWrite(led[i], bitRead(leds, i));
}
}
row_t nledon(uint8_t n) {
return (1<<n)-1; // 0..01..1 (n x 1)
}
row_t shiftLeft(row_t leds) {
return leds <<= 1;
}
row_t shiftRight(row_t leds) {
return leds >>= 1;
}
void loop() {
row_t ledon = nledon(NLEDON); // 0000011 (NLEDON==2 and NLED==7)
for ( int i = 0; i < MAXSHIFT; i++) {
ledWrite(ledon);
ledon = shiftLeft(ledon); // 0000011 -> 0000110 -> .. -> 1100000
delay(VIEWTIME);
}
for ( int i = 0; i < MAXSHIFT; i++) {
ledWrite(ledon);
ledon = shiftRight(ledon); // 1100000 -> 0110000 -> .. -> 0000011
delay(VIEWTIME);
}
}