Noch ne Idee: schreib mal in deinen Vergleichen TRUE statt true und FALSE statt false.
Das ist eigentlich eher üblich bei Arduino- und wird in den Beispielen immer so gemacht. K.A. obs nötig ist, probieren schadet nicht.
Da er scheinbar ja das erste "if" im Hauptprogramm abarbeitet, wärs denkbar....

Auch möglich: er verhaspelt sich in den If()'s irgendwo.
Wenn man mehrere if()-Entscheidungen hinter einander schreibt, werden die auch der Reihe nach abgearbeitet.
Wenn also if(1) zutrifft, wird sie abgearbeitet. Tritt dabei der Zustand auf, der bei if(2) TRUE geben wird, wird anschliessend die abgearbeitet, und so weiter. So kann man Endlosschleifen basteln, die schwer zu finden sind.
Da eben hilft es, in jedem if() einfach mal ne Ausgabe zu machen "ich bin hierund hier jetzt".

Sowas umgehe ich dann mit switch/case: dort wird nach jedem break alles von vorne begonnen!