Teensy MIDI VU meter


Hoe krijg je het volume van je laptop microfoon zichtbaar op een ledstrip op je Teensy. De LED strip die we gebruiken in de les is een Neopixel strip WS2812 zoals te vinden hier

teensyMIDIVUmeterMax

#include <Adafruit_NeoPixel.h>
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        23 

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 12 // Popular NeoPixel ring size

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  // put your setup code here, to run once:
  //zodra we een MIDI CC-bericht krijgen voer dan de myControlChange functie uit
  usbMIDI.setHandleControlChange(myControlChange);

  delay(500);
  Serial.println("I live");

  //maak alles iets minder fel
  pixels.setBrightness(100);
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
  pixels.clear(); // Set all pixel colors to 'off'
}

void loop() {
  //LET OP ZONDER DIT KRIJG JE NOOIT EEN MIDI-BERICHTJE BINNEN
  usbMIDI.read();
}

void myControlChange(byte channel, byte control, byte value) {
  int maxPixel = map(value, 0, 127, 0, 11);  //pas het bereik aan van 0 - 127 naar 0 tot 11 
  int maxPixel = map(value, 0, 127, 0, NUMPIXELS - 1); //dit is flexibeler
  for (int i = 0; i < NUMPIXELS; i++) { // For each pixel...
    //de eerste 5 pixels mits ze niet hoger zijn dan de max
    if (i < 5 && i <= maxPixel) {
      pixels.setPixelColor(i, pixels.Color(20, 255, 20));
    } else if (i >=  5 && i < 8 && i <= maxPixel) {
      //de pixels 5 tot 7 
      pixels.setPixelColor(i, pixels.Color( 150, 100, 20));
    } else if (i >= 8 && i <= maxPixel) {
      //de pixels na de 8e pixel
      pixels.setPixelColor(i, pixels.Color(255, 20, 20));
    } else if (i > maxPixel) {
      //alles wat hoger is dan het volume
      pixels.setPixelColor(i, pixels.Color(0, 0, 0));
    }
  }
  //stuur alles door naar de fysieke ledjes
  pixels.show();
  //print naar de monitor
  Serial.println("Got CC message with control " + String(control) + " value: " + String(value));
}