Please advice on how to prevent this from happening. Thanks!
- Code: Select all | TOGGLE FULL SIZE
/*
wjmb: testcode for Feather_M0 with ICS43432.
*/
#include <Adafruit_ZeroFFT.h> // https://github.com/adafruit/Adafruit_ZeroFFT
#include <Adafruit_ZeroI2S.h> // https://github.com/adafruit/Adafruit_ZeroI2S
#include <math.h>
/* max volume for 32 bit data */
#define VOLUME ( (1UL << 31) - 1)
#define REDLED 13
#define SAMPLE_RATE 12500
#define DATA_SIZE 512
/* create a buffer for both the left and right channel data */
int32_t left[DATA_SIZE];
int32_t right[DATA_SIZE];
Adafruit_ZeroI2S i2s(0, 1, 9, 2);
void blink(int speed)
{
digitalWrite(REDLED, HIGH);
delay(speed);
digitalWrite(REDLED, LOW);
delay(speed);
}
void get_audiosample()
{
for (unsigned i=0; i<DATA_SIZE; ++i) i2s.read(&left[i], &right[i]);
}
void setup() {
pinMode(REDLED, OUTPUT);
delay(10000);
Serial.begin(115200);
i2s.begin(I2S_32_BIT, SAMPLE_RATE);
i2s.enableRx();
}
void loop() {
//i2s.enableRx();
blink(100);
get_audiosample();
blink(20);
//i2s.disableRx();
for (int i = 0; i<DATA_SIZE; i++)
{
left[i] >>= 7;
right[i] >>= 7;
}
// FOR SOME REALLY ODD REASON, DATA COMES IN TWICE SOMETIME ON THE LEFT AND SOMETIMES ON THE RIGHT CHANNEL.
for (int i = 0; i<DATA_SIZE; i++) { Serial.print(left[i]); Serial.print("\t"); Serial.println(right[i]); }
Serial.println();
delay(2000);
}