A0 = Ground
A2 = 3.3V
Right: -32117 0V
Left: 8832 3.3V
A0 = Ground
A2 = 5V
Right: -32117 0V
Left: 32704 5V
A0 = 3.3V
A2 = Ground
Right: 8183 3.3V
Left: -32768 0V
A0 = 5V
A2 = Ground
Right: 31681 5V
Left: -32768 0V
The ADC seems to be reading the pins correctly so the problem must be elsewhere. Maybe your microphones are not wired correctly? If you use the sketch below, do your inputs average near 'zero' (2.5V).
#define LIN_OUT 1 // use the log output function
#define FHT_N 64 // set to 256 point fht
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
// #include <FHT.h>
int f;
int Rreal[FHT_N];
int Lreal[FHT_N];
int RMAG[FHT_N];
int LMAG[FHT_N];
void setup()
{
ADCSRB = 0;
sbi(ADCSRA, ADEN); // Enable ADC
sbi(ADCSRA, ADATE); // Auto trigger
sbi(ADCSRA, ADSC); // Start conversion
// 19.231 kHz
sbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
cbi(ADCSRA, ADPS0);
Serial.begin(115200); // use the serial port
}
void loop()
{
noInterrupts(); // UDRE interrupt slows this way down on arduino1.0
for (int i = 0 ; i < FHT_N ; i++) // save 256 samples
{
while (!(ADCSRA & _BV(ADIF))); // wait for adc to be ready
ADMUX = (DEFAULT << 6) | 0; // A0
sbi(ADCSRA, ADIF); // Clear interrupt flag
byte m0 = ADCL; // fetch adc data
byte j0 = ADCH;
int k0 = (j0 << 8) | m0; // form into an int
k0 -= 0x0200; // form into a signed int
k0 <<= 6; // form into a 16b signed int
Rreal[i] = k0; // put real data into bins
while (!(ADCSRA & _BV(ADIF))); // wait for adc to be ready
ADMUX = (DEFAULT << 6) | 2; // A2
sbi(ADCSRA, ADIF); // Clear interrupt flag
byte m2 = ADCL; // fetch adc data
byte j2 = ADCH;
int k2 = (j2 << 8) | m2; // form into an int
k2 -= 0x0200; // form into a signed int
k2 <<= 6; // form into a 16b signed int
Lreal[i] = k2; // put real data into bins
}
interrupts();
long TotalRight = 0, TotalLeft = 0;
for (int i = 0; i < FHT_N; i++)
{
TotalRight += Rreal[i];
TotalLeft += Lreal[i];
}
float AverageRight = TotalRight / (float) FHT_N;
float AverageLeft = TotalLeft / (float) FHT_N;
Serial.print("AverageRight = ");
Serial.println(AverageRight);
Serial.print("AverageLeft = ");
Serial.println(AverageLeft);
delay(5000);
}