Как измерить частоту в arduino с помощью функции pulseIn ()? - PullRequest
0 голосов
/ 15 мая 2018

Я новичок в Arduino, и у меня небольшой проект. Я прочитал, что функция pulseIn возвращает длительность импульса в микросекундах и частоту

(Гц) = 1 / время (секунда)

, поэтому я надеюсь, что приведенный ниже код для измерения частоты правильный, в противном случае сообщите мне

int senserpin=8;
int sensordelay=1000; 
float duration;
float freq;

void setup{
pinMode(senserpin,INPUT);
serial.begin(9600);
}

void loop()
{
duration=pulsein(senserpin,high)
freq=1/(duration*1000000)// multiply duration *1000000 to convert from microseconds to seconds 
serail.print("frequency");
serail.print(freq);

delay(sensordelay)
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы измерили только высокое время.Вам нужно измерить как для расчета частоты и периода.Я надеюсь, что это сработает для вас.

int highTime;    //integer for storing high time
int lowTime;     //integer for storing low time
float period;    // integer for storing period
float freq;      //storing frequency

void setup()
{
    pinMode(8,INPUT);  //Setting pin as input
}

void loop()
{
    highTime=pulseIn(8,HIGH);  //read high time
    lowTime=pulseIn(8,LOW);    //read low time
    period = highTime+lowTime; // Period = Ton + Toff
    freq=1000000/period;       //getting frequency with totalTime is in Micro seconds
    delay(1000);
}
0 голосов
/ 15 мая 2018

Частота - это время между двумя одинаковыми событиями (например, от одного переднего фронта до следующего переднего фронта)

pulseIn измеряет только время части этого периода (например, как долго сигнал ВЫСОКИЙ)

Вы либо знаете, что HIGH-фаза имеет ту же продолжительность, что и LOW-фаза, либо вам приходится измерять оба.

...