Created
January 13, 2022 10:29
-
-
Save dewomser/15556b41ea5932ddc540bb37b7264cc2 to your computer and use it in GitHub Desktop.
Beim Ausatmen wird die LED rot sonst blau.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
This example reads audio data from the on-board 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) | |
Circuit: | |
- Arduino Nano 33 BLE board, or | |
- Arduino Nano RP2040 Connect, or | |
- Arduino Portenta H7 board plus Portenta Vision Shield | |
This example code is in the public domain. | |
*/ | |
#include <WiFiNINA.h> | |
#include <PDM.h> | |
// default number of output channels | |
static const char channels = 1; | |
// default PCM output frequency | |
static const int frequency = 16000; | |
// Buffer to read samples into, each sample is 16-bits | |
short sampleBuffer[512]; | |
// Number of audio samples read | |
volatile int samplesRead; | |
void setup() { | |
pinMode(LED_BUILTIN, OUTPUT); | |
pinMode(LEDB, OUTPUT); | |
digitalWrite(LED_BUILTIN, LOW); | |
digitalWrite(LEDB, HIGH); | |
Serial.begin(9600); | |
//while (!Serial); | |
// Configure the data receive callback | |
PDM.onReceive(onPDMdata); | |
// Optionally set the gain | |
// Defaults to 20 on the BLE Sense and 24 on the Portenta Vision Shield | |
// PDM.setGain(30); | |
// Initialize PDM with: | |
// - one channel (mono mode) | |
// - a 16 kHz sample rate for the Arduino Nano 33 BLE Sense | |
// - a 32 kHz or 64 kHz sample rate for the Arduino Portenta Vision Shield | |
if (!PDM.begin(channels, frequency)) { | |
Serial.println("Failed to start PDM!"); | |
while (1); | |
} | |
} | |
void loop() { | |
// Wait for samples to be read | |
if (samplesRead) { | |
// Print samples to the serial monitor or plotter | |
for (int i = 0; i < samplesRead; i++) { | |
if(channels == 2) { | |
Serial.print("L:"); | |
Serial.print(sampleBuffer[i]); | |
Serial.print(" R:"); | |
i++; | |
} | |
Serial.println(sampleBuffer[i]); | |
//digitalWrite(LED_BUILTIN, HIGH); | |
//digitalWrite(LEDB, HIGH); | |
if (sampleBuffer[i] > 350 || sampleBuffer[i] < -350) { | |
digitalWrite(LED_BUILTIN, HIGH); | |
digitalWrite(LEDB,LOW); | |
delay(250); | |
} | |
else { | |
digitalWrite(LED_BUILTIN, LOW); | |
digitalWrite(LEDB, HIGH); | |
} | |
} | |
// Clear the read count | |
samplesRead = 0; | |
} | |
} | |
/** | |
* Callback function to process the data from the PDM microphone. | |
* NOTE: This callback is executed as part of an ISR. | |
* Therefore using `Serial` to print messages inside this function isn't supported. | |
* */ | |
void onPDMdata() { | |
// Query the number of available bytes | |
int bytesAvailable = PDM.available(); | |
// Read into the sample buffer | |
PDM.read(sampleBuffer, bytesAvailable); | |
// 16-bit, 2 bytes per sample | |
samplesRead = bytesAvailable / 2; | |
} |
Author
dewomser
commented
Jan 13, 2022
- commit
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment