Map tilt sensors to MIDI
parent
d113da6db2
commit
fac248290d
|
@ -0,0 +1,106 @@
|
|||
#include <Arduino_LSM9DS1.h>
|
||||
#include <BLEMIDI_Transport.h>
|
||||
|
||||
//#include <hardware/BLEMIDI_ESP32_NimBLE.h>
|
||||
//#include <hardware/BLEMIDI_ESP32.h>
|
||||
//#include <hardware/BLEMIDI_nRF52.h>
|
||||
#include <hardware/BLEMIDI_ArduinoBLE.h>
|
||||
|
||||
BLEMIDI_CREATE_DEFAULT_INSTANCE()
|
||||
|
||||
unsigned long t0 = millis();
|
||||
bool isConnected = false;
|
||||
|
||||
// accelerometer
|
||||
float x, y, z;
|
||||
float mx, my, mz; // midi mapped
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// When BLE connected, LED will turn on (indication that connection was successful)
|
||||
// When receiving a NoteOn, LED will go out, on NoteOff, light comes back on.
|
||||
// This is an easy and conveniant way to show that the connection is alive and working.
|
||||
// -----------------------------------------------------------------------------
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
|
||||
Serial.println("MIDI-BLE TEST 1");
|
||||
Serial.println("2022-03-02");
|
||||
|
||||
MIDI.begin();
|
||||
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
|
||||
BLEMIDI.setHandleConnected([]() {
|
||||
isConnected = true;
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
Serial.println("MIDI-BLE CONNECTED");
|
||||
|
||||
});
|
||||
|
||||
BLEMIDI.setHandleDisconnected([]() {
|
||||
isConnected = false;
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
Serial.println("MIDI-BLE DISCONNECTED");
|
||||
|
||||
});
|
||||
|
||||
MIDI.setHandleNoteOn([](byte channel, byte note, byte velocity) {
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
});
|
||||
MIDI.setHandleNoteOff([](byte channel, byte note, byte velocity) {
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
});
|
||||
|
||||
// accelerometer
|
||||
if (!IMU.begin()) {
|
||||
Serial.println("Failed to initialize IMU!");
|
||||
while (1);
|
||||
}
|
||||
|
||||
Serial.print("Accelerometer sample rate = ");
|
||||
Serial.print(IMU.accelerationSampleRate());
|
||||
Serial.println(" Hz");
|
||||
Serial.println();
|
||||
Serial.println("Acceleration in G's");
|
||||
Serial.println("X\tY\tZ");
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
void loop()
|
||||
{
|
||||
if (IMU.accelerationAvailable()) {
|
||||
IMU.readAcceleration(x, y, z);
|
||||
|
||||
mx = x * 64 + 64;
|
||||
my = y * 64 + 64;
|
||||
mz = max(10, abs(z) * 1000);
|
||||
|
||||
Serial.print(mx);
|
||||
Serial.print('\t');
|
||||
Serial.print(my);
|
||||
// Serial.print(y);
|
||||
// Serial.print('\t');
|
||||
// Serial.println(z);
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
MIDI.read();
|
||||
|
||||
|
||||
|
||||
if (isConnected && (millis() - t0) > mz)
|
||||
{
|
||||
t0 = millis();
|
||||
|
||||
MIDI.sendNoteOn (my, mx, 1); // note 60, velocity 100 on channel 1
|
||||
Serial.println("ping");
|
||||
delay(mz);
|
||||
MIDI.sendNoteOff(my, mx, 1);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue