// PROCCESS DRUMS
void processDrums() {
// read value of curernt piezo
currentPiezoValue = analogRead(currentPiezo);
// state machine of the piezo
switch (state[currentPiezo]) {
// IDLE
case 0:
// if we are over the threshold
if (currentPiezoValue > threshold[currentPiezo] && currentStateMillis[currentPiezo] + MILLIS_BETWEEN_TWO_OF_THE_SAME_NOTE <= millis()) {
// if current read is higher, we are still in the rise ...
while (currentPiezoValue > peekPiezoLevel[currentPiezo]) {
// set the peek value
peekPiezoLevel[currentPiezo] = currentPiezoValue;
currentPiezoValue = analogRead(currentPiezo);
}
velocityLevel[currentPiezo] = map(peekPiezoLevel[currentPiezo], threshold[currentPiezo], threshold[currentPiezo] * 3, 0, 127);
if (velocityLevel[currentPiezo] > MAX_MIDI_VELOCITY)
velocityLevel[currentPiezo] = MAX_MIDI_VELOCITY;
// play note
midiNoteOn(note[currentPiezo], velocityLevel[currentPiezo]);
// set state to 2
state[currentPiezo] = 1;
// set new state millis
currentStateMillis[currentPiezo] = millis();
}
break;
// looking for the break
case 1:
if (currentStateMillis[currentPiezo] + MILLIS_BETWEEN_PICKS_AND_OFF <= millis()) {
// stop note
midiNoteOff(note[currentPiezo], velocityLevel[currentPiezo]);
//set peek to zero
peekPiezoLevel[currentPiezo] = 0;
velocityLevel[currentPiezo] = 0;
// set state to 2
state[currentPiezo] = 0;
// set new state millis
currentStateMillis[currentPiezo] = millis();
}
break;
} //end switch
// move to next piezo
currentPiezo = (currentPiezo + 1) % NUM_PIEZOS;
} //end processDrums
Comments