Dein Fehler liegt in der Zeile mit dem if. Du machst ein bitweises UND zwischen PIND und (0 << 5). letzteres ist eine 0, die um 5 Stellen nach links verschoben wurde. Also immer noch 0. Ein bitweises UND mit 0 ergibt auf jeden Fall auch wieder 0, daher ergibt der Ausdruck im if immer false und PD7 wird nie gesetzt.
"0 << irgendwas" ergibt grundsätzlich immer 0, kann also genausogut durch 0 ersetzt werden (und sollte es auch, der Übersichtlichkeit wegen). Dein if muss also eher so aussehen:
if(!(PIND & (1 << 5)))
btw, einzelne Pins setzen geht so:
PORTD |= (1 << 7);
Wenn du nicht |= sondern = nimmst, setzt du alle anderen Pins auf 0.
Lesezeichen