Я вижу две большие проблемы,
это строка:
if (leftRoundedValue> rightRoundedValue) {myServo.write (0);} else if (leftRoundedValue
Вы говорите ему двигаться до крайности, если свет с одной стороны ярче, чем с другой. Из вашего описания видно, что вы действительно хотите немного подвинуться и снова проверить свет. Если индикатор находится в положении 120, этот код никогда не сможет его найти. Он перейдет к 180, увидит, что свет находится слева, затем перейдет к 0 и увидит, что свет направо, а затем перейдет к 180. Он никогда не сможет перейти в любую другую позицию.
Что еще хуже, если он обнаружил, что свет и два значения равны, вы не говорите ему оставаться там, вы говорите, чтобы он переместился на 92, что, опять же, может быть не там, где свет,
Другой является эта строка:
leftRoundedValue = 100*((leftAnalogValue + 50) / 100);
Первая часть этого может переполниться, если аналоговое значение больше, чем 277. Поскольку все, что есть int, математика будет выполнена в 16математика с битами со знаком и 100 * 328 будут переполнены и int и даст отрицательный результат. Вместо этого сделайте это следующим образом:
leftRoundedValue = 100ul*((leftAnalogValue + 50) / 100);
Это приведет к тому, что правая сторона будет обрабатываться как 32-битная беззнаковая. Он не будет переполнен, и тогда результат должен помещаться в int.