unsigned long const onTime {100}; // Microseconds.
size_t const strobes {200};
uint8_t const outPins[] {5, 4, 3, 2};
uint8_t const inPins[] {9, 8, 7, 6};
void blink(size_t const i, size_t const j) {
digitalWrite(outPins[i], HIGH);
digitalWrite(inPins[j], LOW);
delayMicroseconds(onTime);
digitalWrite(inPins[j], HIGH);
digitalWrite(outPins[i], LOW);
}
void strobe(size_t const bitmap) {
for (size_t i {0}; i < strobes; i++) {
for (size_t j {0}; j < sizeof(outPins) * sizeof(inPins); j++) {
if (bitmap >> j & 1) {
blink(j % sizeof(outPins), j / sizeof(inPins));
}
else {
delayMicroseconds(onTime);
}
}
}
}
void setup() {
for (uint8_t const& pin: outPins) {
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
}
for (uint8_t const& pin: inPins) {
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
}
}
void loop() {
for (size_t i {0}; i < pow(2, sizeof(outPins) * sizeof(inPins)); i++) {
strobe(i);
}
}