// include MIDI library
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
//controller notes
int noteON = 144;//144 = 10010000 in binary, note on command
int noteOFF = 128;//128 = 10000000 in binary, note off command
//led's to correspond with which ldr's are giving a read to aid debugging/mapping midi
int ledPin1 = 22;
int ledPin2 = 23;
int ledPin3 = 24;
int ledPin4 = 25;
int ledPin5 = 26;
int ledPin6 = 27;
int ledPin7 = 28;
int ledPin8 = 29;
int ledPin9 = 30;
int sensorValue1 = 0; // variables to hold LDR sensor values
int sensorValue2 = 0;
int sensorValue3 = 0;
int sensorValue4 = 0;
int sensorValue5 = 0;
int sensorValue6 = 0;
int sensorValue7 = 0;
int sensorValue8 = 0;
int sensorValue9 = 0;
const int threshold = 200;
int x = 0;
//this is the array of notes that can be called, later the variable newNote is added to notePlayed[here] to decide which gets played
int notePlayed[] = {55, 56, 57, 58, 59, 60, 61, 62, 63, 64};
int oldNote;
// put your setup code here, to run once:
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
// begin MIDI
MIDI.begin();
// 115200 Hairless MIDI Serial Bridge baud rate
//Serial.begin(115200);
Serial.begin(38400);
}
void loop() {
int velocity = 127;
int newNote = 0;
sensorValue1 = (analogRead(A7));
sensorValue2 = (analogRead(A8));
sensorValue3 = (analogRead(A9));
sensorValue4 = (analogRead(A10));
sensorValue5 = (analogRead(A11));
sensorValue6 = (analogRead(A12));
sensorValue7 = (analogRead(A13));
sensorValue8 = (analogRead(A14));
sensorValue9 = (analogRead(A15));
if (sensorValue1 > threshold) {
(newNote++);
digitalWrite(ledPin1, HIGH);
} else if (sensorValue1 < threshold) {
digitalWrite(ledPin1, LOW);
}
if (sensorValue1 && sensorValue2 > threshold) {
(newNote++);
digitalWrite(ledPin2, HIGH);
} else if (sensorValue1 && sensorValue2 < threshold) {
digitalWrite(ledPin2, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 > threshold) {
(newNote++);
digitalWrite(ledPin3, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 < threshold) {
digitalWrite(ledPin3, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 > threshold) {
(newNote++);
digitalWrite(ledPin4, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 < threshold) {
digitalWrite(ledPin4, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 > threshold) {
(newNote++);
digitalWrite(ledPin5, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 < threshold) {
digitalWrite(ledPin5, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 > threshold) {
(newNote++);
digitalWrite(ledPin6, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 < threshold) {
digitalWrite(ledPin6, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 && sensorValue7 > threshold) {
(newNote++);
digitalWrite(ledPin7, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 && sensorValue7 < threshold) {
digitalWrite(ledPin7, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 && sensorValue7 && sensorValue8 > threshold) {
(newNote++);
digitalWrite(ledPin8, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 && sensorValue7 && sensorValue8 < threshold) {
digitalWrite(ledPin8, LOW);
}
if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 && sensorValue7 && sensorValue8 && sensorValue9 > threshold) {
(newNote++);
digitalWrite(ledPin9, HIGH);
} else if (sensorValue1 && sensorValue2 && sensorValue3 && sensorValue4 && sensorValue5 && sensorValue6 && sensorValue7 && sensorValue8 && sensorValue9 < threshold) {
digitalWrite(ledPin9, LOW);
}
if (oldNote == newNote) {
delay(1000);
} else if (newNote != oldNote) {
MIDImessage(noteON, notePlayed[newNote], velocity);//turn note on
delay(500);//hold note for 300ms
MIDImessage(noteOFF, notePlayed[newNote], velocity);//turn note off
delay(200);//wait 200ms until triggering next note
oldNote = newNote;
}
}
void MIDImessage(int command, int MIDInote, int MIDIvelocity) {
Serial.write(command);//send note on or note off command
Serial.write(MIDInote);//send pitch data
Serial.write(MIDIvelocity);//send velocity data
}