/ LED_Masquerade_Masks / Audio_Reactive / Audio_Reactive.ino
Audio_Reactive.ino
 1  // SPDX-FileCopyrightText: 2017 Phillip Burgess for Adafruit Industries
 2  //
 3  // SPDX-License-Identifier: MIT
 4  
 5  // Sound level sketch for Adafruit microphone amplifier.
 6  // For the GEMMA sequin masquerade mask.
 7  
 8  #define SAMPLE_WINDOW 33 // Sample window width in mS (33 mS = ~30 Hz)
 9  #define LED_PIN        0 // DIGITAL pin # where LEDs are connected
10  #define MIC_PIN       A1 // ANALOG pin # where microphone "OUT" is connected
11  
12  void setup() {
13    pinMode(LED_PIN, OUTPUT);
14  }
15  
16  void loop() {
17    // Listen to mic for short interval, recording min & max signal
18    unsigned int signalMin = 1023, signalMax = 0;
19    unsigned long startTime = millis();
20    while((millis() - startTime) < SAMPLE_WINDOW) {
21      int sample = analogRead(MIC_PIN);
22      if(sample < signalMin) signalMin = sample;
23      if(sample > signalMax) signalMax = sample;
24    }
25    int peakToPeak = signalMax - signalMin; // Max - min = peak-peak amplitude
26    int n = (peakToPeak - 10) / 4;          // Remove low-level noise, lower gain
27    if(n > 255)    n = 255;                 // Limit to valid PWM range
28    else if(n < 0) n = 0;
29    analogWrite(LED_PIN, n);                // And send to LEDs as PWM level
30  }