Obwohl die Nutzung von if ohne geschweifte Klammern möglich ist, würde ich generell eher davon abraten.

Denn ohne die Klammern steht nur die erste der folgenden Anweisungen im if-Block, der rest wird behandelt als wäre das if nicht da. Aber naja, immerhin ist das bei deiner Schreibweise (mit der Anweisung direkt hinter dem if) ja noch ganz gut zu erkennen.


Also bei deinen if Anweisungen fallen mir zunächst mal fehlende Klammern auf...

der && Operator hat nämlich eine höhere Priorität als < und >, dein erstes if würde also etwa so vom Compiler interpretiert:

Code:
if(((PIND & (1<<PIND2)) && i) >1)
Ich würde daher zuerst mal die i>1 und i<20 jeweils in Klammern setzen, vielleicht reicht das schon