In deiner while-Schleife startest du deine drei Unterprogramme dauernd, speziell den ADC. Wenn du alle 20mSec zuerst dein Servo, dann die Motorsteuerung und dann die Helligkeitsmessung startest, ist das doch schnell genug.
Bei einem Interrupt werden interne Variable nicht gesichert und daher auch schnell mal überschrieben.
Zur Stromversorgung noch, wenn so ein Servo wegläuft braucht es schnell mal 500mA, so ein Spannungszucker kann da ganz rasch was durcheinanderbringen.