-
Notifications
You must be signed in to change notification settings - Fork 117
/
PDMSerialPlotter.ino
73 lines (65 loc) · 1.86 KB
/
PDMSerialPlotter.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
@file PDMSerialPlotter.ino
@author rakwireless.com
@brief This example reads audio data from the PDM microphones, and prints
out the samples to the Serial console. The Serial Plotter built into the
Arduino IDE can be used to plot the audio data (Tools -> Serial Plotter)
@version 0.1
@date 2022-06-6
@copyright Copyright (c) 2022
*/
#include "audio.h" // Click here to install the library: http://librarymanager/All#RAKwireless-Audio
Channel_Mode channels = left; // stereo or left or right
int frequency = 16000;
// buffer to read samples into, each sample is 16-bits
short sampleBuffer[BUFFER_SIZE];
volatile uint8_t read_flag = 0;
void onPDMdata();
void setup() {
pinMode(LED_GREEN, OUTPUT);
digitalWrite(LED_GREEN, HIGH);
pinMode(LED_BLUE, OUTPUT);
digitalWrite(LED_BLUE, HIGH);
// Initialize Serial for debug output
time_t timeout = millis();
Serial.begin(115200);
while (!Serial)
{
if ((millis() - timeout) < 3000)
{
delay(100);
}
else
{
break;
}
}
// configure the data receive callback
PDM.onReceive(onPDMdata);
// initialize PDM with:
// - one channel (mono mode)
// - a 16 kHz sample rate
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
delay(500);
Serial.println("=====================================");
Serial.println("Audio test");
Serial.println("=====================================");
}
void loop() {
// wait for samples to be read
if (read_flag == 1) {
read_flag = 0;
// print samples to the serial monitor or plotter
for (int i = 0; i < BUFFER_SIZE; i++) {
Serial.println(sampleBuffer[i]);
}
}
}
void onPDMdata() {
// read into the sample buffer
PDM.read(sampleBuffer, sizeof(sampleBuffer));
read_flag = 1;
}