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
#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));
}