HC-SR04 Ultrasonic Controller



Here is a Code for Arduino to build a Ultrasonic MIDI Controller with MIDI Out.

Finally I managed to get a stable Ultrasonic signal with "sonar[0].ping_median(x);" and send it per serial on 31250 Baud to a simple Hardware MIDI Port.

https://raw.githubusercontent.com/erixerix/2-Ultrasonic-Sensors-to-MIDI-CC/master/Sensorbox09.ino


#include <SoftwareSerial.h>
#include <NewPing.h>
#include <medianFilter.h>
#include <sendMIDI.h>
/*#########################
* sendMIDI.h =
*
* sendMIDI(CC, Channel, CC Number, Value 0-127);
* const uint8_t NOTE_OFF = 0x80;
* const uint8_t NOTE_ON = 0x90;
* const uint8_t KEY_PRESSURE = 0xA0;
* const uint8_t CC = 0xB0;
* const uint8_t PROGRAM_CHANGE = 0xC0;
* const uint8_t CHANNEL_PRESSURE = 0xD0;
* const uint8_t PITCH_BEND = 0xE0;
*/
#define SONAR_NUM 2 // Number of sensors.
#define MAX_DISTANCE 50 // Maximum distance (in cm) to ping.
int SEN1 = 0;
int SEN2 = 0;
medianFilter Filter;
medianFilter Filter2;
int filtered;
int filtered2;
//const int PIEZO_PIN = A0; // Piezo output
NewPing sonar[SONAR_NUM] = { // Sensor object array.
NewPing(13, 12, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping.
NewPing(9, 10, MAX_DISTANCE),
///NewPing(9, 10, MAX_DISTANCE)
};
void setup() {
Serial.begin(31250);
Filter.begin();
Filter2.begin();
}
void loop() {
SEN1 = sonar[0].ping_median(3);
SEN2 = sonar[1].ping_median(3);
// int piezoADC = analogRead(PIEZO_PIN);
// float piezoV = piezoADC / 1023.0 * 5.0;
//Serial.println(piezoV); // Print the voltage.
SEN1 = sonar[0].convert_cm(SEN1); // newping CONVERT TO CM
SEN2 = sonar[1].convert_cm(SEN2); // newping CONVERT TO CM
filtered= Filter.run(SEN1);
filtered2= Filter2.run(SEN2);
int CC20 = map(constrain(filtered, 0, 51), 0, 50, 127, 1);
int CC21 = map(constrain(filtered2, 0, 51), 0, 50, 127, 1);
if((filtered > 1) && (filtered < 49)){
sendMIDI(CC, 1, 20, CC20); //
//Serial.print(SEN1);
// Serial.print("\t");
//Serial.println(SEN2);
}
if((filtered2 > 1) && (filtered2 < 49)){
sendMIDI(CC, 2, 21, CC21);
}
}