Stap 7: Definiëren de modi
Onze eerste en standaardmodus zullen de Notitiemodus zoals eerder vermeld.
void SendNotes() { if ( zx_sensor.positionAvailable() ) { z_pos = zx_sensor.readZ(); if ( z_pos != ZX_ERROR ) { if (z_pos != last_z_pos) { MIDI.sendNoteOn(z_pos, 127, midi_channel); // delay(100); // MIDI.sendNoteOff(z_pos, 127, midi_channel); } last_z_pos = z_pos; } } }
Het is mogelijk om te sturen van de NoteOff-methode na een vertraging, maar dit is puur persoonlijk en u kunt één van beide manier. U kunt ook vergroten of verkleinen van de vertraging zodat het bericht van de opmerking een bepaalde effect.
In dit volgende methode is onze tweede modus. Zoals u dat deze methode stuurt het besturingselement wordt gewijzigd om te bepalen van een effect bijvoorbeeld zien kunt. Het leest de X- en de Y-as van de sensor. Op deze manier kan het simuleren een X-Y-pad gevonden op sommige midi-controllers. Het geven van de waarde een beetje meer stabiliteit zorgen wij ervoor dat de nieuwe waarde hetzelfde als de oude waarde nooit kan zijn. Op die manier de waarde van de output zal worden steeds een beetje meer.
void SendCC() { if ( zx_sensor.positionAvailable() ) { x_pos = zx_sensor.readX(); if ( x_pos != ZX_ERROR ) { int ccX = constrain(x_pos, 0, 127); MIDI.sendControlChange(3, ccX, midi_channel); } z_pos = zx_sensor.readZ(); if ( z_pos != ZX_ERROR ) { if (z_pos != last_z_pos) { int cc = constrain(z_pos, 0, 127); MIDI.sendControlChange(2, cc, midi_channel); } z_pos = last_z_pos; } } }
Onze derde en laatste modus is de modus configureren. In deze modus kunt u vergroten of verkleinen van het uitvoerkanaal van de MIDI. Dit kan handig komen wanneer u wilt overschakelen van instrumenten.
void ConfigureMode() { if ( zx_sensor.gestureAvailable() ) { gesture = zx_sensor.readGesture(); gesture_speed = zx_sensor.readGestureSpeed(); switch ( gesture ) { case NO_GESTURE: break; case RIGHT_SWIPE: if (midi_channel < 16) { midi_channel++; } break; case LEFT_SWIPE: if (midi_channel > 1) { midi_channel--; } break; case UP_SWIPE: currentMode = CC; default: break; } } }
Ik heb geprobeerd te schrijven van de code als zichzelf mogelijk. U kunt altijd vragen me als iets niet duidelijk.