Не знаю как повесить на таймер в ардуине функцию. Я разрабатываю не в среде ардуино, а в AVR Studio. Для обработки прерываний в Arduino есть какие-то функции, поищи, тут на форуме было обсуждение таймера.
Ну а осуществить плавную регулировку просто
int CurrentVentPWM;
int TargetVentPWM;
void Timer(void) // эта функция должна вызываться определенное количество раз в секунду (сколько - сам считай, 10-20-50?)
{
if (CurrentVentPWM>TargetVentPWM)
{
CurrentVentPWM--;
AnalogOutput(CurrentVentPWM,???) // не помню что туда надо писать
}
if (CurrentVentPWM<TargetVentPWM)
{
CurrentVentPWM++;
AnalogOutput(CurrentVentPWM,???) // не помню что туда надо писать
}
}
Теперь по поводу дрожания.
Причины может быть две:
1. На самом деле вольтметр не ловит какую-то быструю помеху. Он ведь измеряет постоянное напряжение и если есть постоянная помеха с частотой 100 герц, он ее показать не должен. А ардуина очень быстро выполняет преобразование и помеху даже в 2000Гц она поймает по-полной. Решение - пустить сигнал с датчика через RC цепочку. Что это такое можешь почитать на сайте easyelectronics.ru. Я перед тамошним автором кепку снимаю, насколько доступно он умудряется объяснять.
2. Может быть так, что помеха идет по питанию ардуины. Для того, чтобы таких помех не ловить, надо задемфировтаь вывод aRef и переключить АЦП, чтобы он в качестве опорного напряжения брал не Vcc (напряжение питания МК), а этот aRef. Цепочку, которую надо на aRef включать, в интернете тоже легко найти.