Du wartest ja auch an dieser Stelle
Code:
            while(!(PIND & (1<<PD1)));
             _delay_ms(10);
             }
auf einen Tastendruck. An dieser Stelle bleibt dein Programm so lange in der While-Schleife hängen, bis eine Taste gedrückt wird.