hardware les 04 - MIDI filtering
Hier de code om MIDI waarden te filteren in Teensy, meer informatie over de les van vandaag vind je in de powerpoint.
//dit zijn de pins waar de potmeters op aangesloten zijn
int potPin1 = 14;
int potPin2 = 15;
//2 integers om de MIDI waarde van de potmeters in op te slaan
int potMIDI1 = 0;
int potMIDI2 = 0;
//2 integers om de MIDI waarde van potmeters in de vorige keer dat loop() werd uitgevoerd op te slaan.
int _potMIDI1 = 0;
int _potMIDI2 = 0;
//hoe veel stapjes kijken we terug in de tijd?
const int historyLength = 8;
//waar in de history array gaan we nu schrijven
int historyIndex1 = 0;
//de array met waarden voor potmeter 1 terug in de tijd
// FILO first in - last out
int pot1History[historyLength];
void setup() {
// put your setup code here, to run once:
//pinmodes INPUT, INPUT_PULLUP, OUTPUT
pinMode(potPin1, INPUT);
pinMode(potPin2, INPUT);
Serial.begin(9600);
Serial.println("Hi ik ben een Teensy en ik leef!");
}
void loop() {
//INPUT Lees potmeters uit
//maak een integer "potValue1" en zet die gelijk aan de waarde van de stroom op potPin1
int potValue1 = analogRead(potPin1);
int potValue2 = analogRead(potPin2); //0 - 1023
//FILTERING:
//schrijf de waarde van de potmeter in de array op positie historyIndex1
pot1History[historyIndex1] = potValue1;
//schrijf naar de volgende in de array
historyIndex1 ++;
//historyIndex1 moet kleiner blijven dan de lengte van de array
historyIndex1 = historyIndex1 % historyLength;
//dit wordt het gemiddelde van de eerste potmeter
int average1 = 0;
for (int i = 0; i < historyLength; i ++) {
//tel alle waarden in de history array bij elkaar op
average1 = average1 + pot1History[i];
}
//deel de som van de array door de lengte van de array om het gemiddelde te krijgen
average1 = average1 / historyLength;
Serial.println("min:0,max:1023,rawInput:" + String(potValue1) + ",filteredInput:" + String(average1));
//TRANSFORMATIE
//iets doen met de input
//schaal van 0 - 1023 naar 0 - 127 om de waardes van de potmeters
//als MIDI berichten door te kunnen sturen
potMIDI1 = average1 / 8;
potMIDI2 = potValue2 / 8;
//OUTPUT
if (potMIDI1 != _potMIDI1) { //is er iets veranderd in potMIDI1?
// Serial.println("Er is iets veranderd bij potMIDI1 want: " + String(potMIDI1) + " is niet gelijk aan " + String(_potMIDI1));
//zo ja, stuur MIDI CC
usbMIDI.sendControlChange(1, potMIDI1, 0);
}
if (potMIDI2 != _potMIDI2) { //is er iets veranderd in potMIDI1?
// Serial.println("Er is iets veranderd bij potMIDI1 want: " + String(potMIDI1) + " is niet gelijk aan " + String(_potMIDI1));
//zo ja, stuur MIDI CC
usbMIDI.sendControlChange(2, potMIDI2, 0);
}
//zet de waarde van de vorige MIDI waarde gelijk aan de huidige MIDI waarde
_potMIDI1 = potMIDI1;
_potMIDI2 = potMIDI2;
delay(20);
}