我连接了一个声音传感器模块,它有3个引脚:Vcc,grnd和output。
代码粘贴在下面,我注意到串口上显示的值总是1023,无论声音如何。有什么问题?
int sensorPin = A0;
void setup ()
{
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
void loop ()
{
sensorValue = analogRead (sensorPin);
Serial.println (sensorValue, DEC);
delay(1000);
}
答案 0 :(得分:0)
我假设您有一个简单的模拟输出传感器模块,可根据环境音量级别提供10位模拟值。如果这个假设是正确的,那么您正确连接所有引脚并且接收的值总是超出范围或最大值,您可能必须集成一个电阻以获得有效值。尝试使用一个小电阻并增加电阻,直到您收到合适的值。也许您的模块文档提供了更多信息。
如果你有一个Adafruit麦克风放大器或类似的东西,你也应该检查制造商或经销商的教程网站,这几乎总能全面概述模块的编程,电路和可能性。
Adafruits麦克风放大器的以下代码举例说明了如何处理采样率,转换信号以及打印出当前的音量级别。
/****************************************
Example Sound Level Sketch for the
Adafruit Microphone Amplifier
****************************************/
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long startMillis= millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(0);
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample; // save just the max levels
}
else if (sample < signalMin)
{
signalMin = sample; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
double volts = (peakToPeak * 3.3) / 1024; // convert to volts
Serial.println(volts);
}