I assume that the inputs from the seven 'runs' will be treated very similarly so that might be another place to use arrays.
const byte RunPins[7] = {10, 11, 12, 13, A0, A1, A2};
bool LastState[7];
unsigned long DebounceTimers[7];
void setup()
{
for (int p=0; p<7; p++)
pinMode(RunPins[p], INPUT_PULLUP);
}
void loop()
{
for (int p=0; p<7; p++)
{
bool state = digitalRead(RunPins[p]) == HIGH;
if (state != LastState[p] &&
millis() - DebounceTimers[p] >= DEBOUNCE_TIME)
{
// State Change Detected (and debounced)
LastState[p] = state;
DebounceTimers[p] = millis();
if (state)
BulbCounter++; // Another one went by
}
}
}