void loop(){
for(c=0; c<sizeof(led); c++){
on(led[c]);
delay(1000);
}
Дело вот в этом участке кода. Когда вызывается прерывание, главный цикл loop останавливается, а затем продолжается с того момента, где он остановился. С очень большой вероятностью цикл будет прерван в моменте delay(1000), соответственно, переменная "c" станет нулем именно в этом участке. А затем, после выполнения задержки, сразу сработает увеличение на единицу и получится, что первый светодиод не будет зажжён.