   FastLED.show(brightness);
 
   frame_count++;
-  digitalWrite(STATUS_LED, (frame_count & 0x80) ? HIGH : LOW);
+  digitalWriteFast(STATUS_LED, (frame_count & 0x80) ? HIGH : LOW);
+
+  // Try to copy values quickly. This is a race condition with the interrupt.
+  short audio_count = adc0_count;
+  short audio_avg = adc0_total / max(1, audio_count);
+  short audio_min = adc0_min;
+  short audio_max = adc0_max;
+  // Reset the counter, which will cause the interrupt to clear other values.
+  adc0_count = 0;
 
   Serial.print(brightness);
   Serial.print("\t");
-  Serial.println(mw);
+  Serial.print(mw);
+  Serial.print("\t");
+  Serial.print(audio_count);
+  Serial.print("\t");
+  Serial.print(audio_min * 5000 / 4096);  // Return min in mV
+  Serial.print("\t");
+  Serial.print(audio_avg * 5000 / 4096);  // Return avg in mV
+  Serial.print("\t");
+  Serial.println(audio_max * 5000 / 4096);  // Return max in mV
+  Serial.send_now();
 }
 
 void loop() {

  FastLED.show();
  delay(500);

  digitalWrite(STATUS_LED, HIGH);
}

long leds_mw_per_supply() {

// Pin 13 has the LED on Teensy 3.0
// give it a name:
#define STATUS_LED 13

// Pin A9 is audio in
#define AUDIO_PIN A9

int frame_count = 0;

ADC *adc = new ADC();

short adc0_count = 0;
short adc0_min = 0;
short adc0_max = 0;
long adc0_total = 0;

void adc0_isr(void) {
    int v = adc->analogReadContinuous(ADC_0);
    if (adc0_count <= 0) {
        adc0_count = 0;
        adc0_min = v;
        adc0_max = v;
        adc0_total = v;
    } else {
        adc0_min = min(adc0_min, v);
        adc0_max = max(adc0_max, v);
        adc0_total += v;
    }
    adc0_count++;
}

void setup() {
  pinMode(STATUS_LED, OUTPUT);
  digitalWriteFast(STATUS_LED, HIGH);

  Serial.begin(115200);
  FastLED.addLeds<OCTOWS2811>(leds, NUM_LEDS_STRIP_A);
