frequency_in_avg+=frequency_in_raw; выполняется сразу, но гарантированное значение frequency_in_avg принимает лишь потом. В самом начале оно неопределено, и значит, может изначально быть неопределенная погрешность.
Почему Вы написали int i=0; ? зачем i здесь присвоен нуль, но переменные выше оставлены без внимания? Пишите так:
Код: Выделить всё
int Htime = 0; // целочисленная переменная для хранения времени высокого логического уровня
int Ltime = 0; // целочисленная переменная для хранения времени низкого логического уровня
int frequency_in_avg = 0; // переменная для хранения частоты входной
и т.д.после цикла не нужно i = 0; если она больше нигде не используется, она обнуляется сама в начале цикла.
Если написать так (вынеся первую итерацию цикла в начало):
Код: Выделить всё
void loop()
{
Htime=pulseIn(2,HIGH,100000); // прочитать время высокого логического уровня
Ltime=pulseIn(2,LOW,100000); // прочитать время низкого логического уровня
frequency_in_raw = 1000000/(Htime+Ltime);
frequency_in_avg = frequency_in_raw;
Serial.println(frequency_in_raw);
for(i=0;i<2;i++)
{
Htime=pulseIn(2,HIGH,100000); // прочитать время высокого логического уровня
Ltime=pulseIn(2,LOW,100000); // прочитать время низкого логического уровня
frequency_in_avg += 1000000/(Htime+Ltime);
Serial.println(frequency_in_raw);
}
frequency_in_avg_rez= frequency_in_avg / ( i+1);
Serial.println(frequency_in_avg_rez);
Serial.println(' ');






