英文:
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("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);
}
答案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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论