bool p_value[7] = {0, 0, 0, 0, 0, 0, 0}; int p_amp = 0; int p_wf = 0; float w = 0.8; // weighting factor for analogRead filter 0-1 int m = 2; // minimum difference to change value // the setup routine runs once when you press reset: void setup() { Serial.begin(9600); // initialize the digital pin as an input. for (int i = 0; i < 7; i++) { int pin = i + 3; pinMode(pin, INPUT_PULLUP); } } // the loop routine runs over and over again forever: void loop() { for (int i = 0; i < 7; i++) { int pin = i + 3; bool value = !digitalRead(pin); if (value != p_value[i]) { if (value) { Serial.print("noteON "); Serial.println(String(i)); } else { Serial.print("noteOFF "); Serial.println(String(i)); } } p_value[i] = value; } int amp = w * analogRead(A4) + (1 - w) * p_amp; // analogRead with exponential filter if (abs(amp - p_amp) > m ) { Serial.print("setAmp "); Serial.println(String(amp)); } p_amp = amp; int wf = map(analogRead(A5), 0, 1020, 0, 4); if (wf != p_wf) { Serial.print("setWf "); Serial.println(String(wf)); } p_wf = wf; }