Как это работает: фотодиод подключен по следующей схеме
я использовал BPT-BP2314 но это совершенно не принципиально. Схема изначально планируется под любой датчик или даже любой аналоговый сигнал (конечно уровень его не должен превышать ограничения по входу АЦП).
Одновременно с опросом клавиатуры получаем значение яркости с этого канала АЦП, значение кладем в кольцевой буфер из 10 элементов от которого вычисляем среднее значение. Если рассчитанное среднее значение больше определенного порога относительно предыдущего значения, на котором мы регулировали яркость, то запускаем процедуру регулировки.
Процедура устроена следующим образом. Есть 7 настраиваемых пользователем точек (x0-x6) для входного сигнала, которым соответствует 7 настраиваемых значений подсветки (y0-y6), значения уровня подсветки между этими точками рассчитываются линейно относительно них. Таким образом, можно сделать почти любой график зависимости уровня подсветки от входного сигнала, вот например, тот, который я использовал для тестов (график построен в экселе для примера). В данном случае я подогнал настройки так, чтобы рабочий диапазон датчика регулировал уровень подсветки от 5% до 100%.
Пока еще не придумал, делать ли настройку всего этого через OSD(по хорошему надо) или ограничиться настройкой через тестовый скетч через I2C.