我无法理解这段代码中数学部分的推理。

huangapple go评论63阅读模式
英文:

I cannot understand the reasoning for the math in this code?

问题

这是Seead提供的一个简单的模拟声音级别传感器代码吗?

我理解这段代码,但不理解为什么要进行32次读取采样?

const int pinAdc = A0;

void setup()
{
    Serial.begin(115200);
    //Serial.println("Grove - Sound Sensor Test...");
}

void loop()
{
    long sum = 0;
    for(int i=0; i<32; i++)
    {
        sum += analogRead(pinAdc);
    }

    sum >>= 5;

    Serial.println(sum);
    delay(10);
}

这段代码是用于读取声音传感器的模拟数据。它通过对传感器进行32次连续读取,然后将这些读数的总和右移5位(相当于除以32),以获得平均值。最后,将平均值打印到串行监视器中,并延迟10毫秒后再次执行此操作。通过进行多次采样并计算平均值,可以减小噪音对传感器读数的影响,从而获得更稳定的结果。

英文:

This is the code provided by Seead for a simple analoge sound level sensor?

I understand the code but not the reasoning for sampling for 32 reads?

    const int pinAdc = A0;
    
    void setup()
    {
    Serial.begin(115200);
    //Serial.println(&quot;Grove - Sound Sensor Test...&quot;);
    }
    
    void loop()
    {
    long sum = 0;
    for(int i=0; i&lt;32; i++)
    {
        sum += analogRead(pinAdc);
    }

    sum &gt;&gt;= 5;

    Serial.println(sum);
    delay(10);
    }

答案1

得分: 0

它正在对32个读数进行平均。

步骤1,将32个读数相加。

步骤2,右移5位。

右移相当于除以2。所以2^5 = 32。所以它相当于除以32。

英文:

It's doing an average over 32 readings.

Step 1, sum 32 readings.

Step 2, bit shift right by 5.

Shifting right is equivalent to dividing by 2. So 2^5 = 32. So it's equivalent of dividing by 32.

huangapple
  • 本文由 发表于 2023年7月13日 20:19:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/76679320.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定