struct LED {
uint8_t const pin;
unsigned long time;
};
unsigned long const timeout = 2000;
uint8_t const sensorPins[] = {13, 12, 11, 10, 9, 8, 7, 6};
LED leds[] = {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {14, 0}, {15, 0}, {16, 0}};
template <class T, size_t N> arraySize(T (&)[N]) { return N; }
void setup() {
for (uint8_t const& pin: sensorPins) {
pinMode(pin, INPUT_PULLUP);
}
for (LED const& led: leds) {
pinMode(led.pin, OUTPUT);
}
}
void loop() {
for (size_t i = 0; i < arraySize(sensorPins); i++) {
if (not digitalRead(sensorPins[i])) {
if (i) {
digitalWrite(leds[i - 1].pin, HIGH);
leds[i - 1].time = millis();
}
if (i < arraySize(leds)) {
digitalWrite(leds[i].pin, HIGH);
leds[i].time = millis();
}
}
}
for (LED const& led: leds) {
if (millis() - led.time > timeout) {
digitalWrite(led.pin, LOW);
}
}
}