Hallo Welt!
Ich hab da so ein kleines Projekt am laufen und könnte Hilfe gebrauchen, weil ich mich ein wenig verzettelt habe, was die Übertragung von Seriell über Midi zum USB angeht.
Das Setup liegt bereits auf Midi_Controller DIY
Der Code:
//*****************************************************************************
//Sketch from Peter Kussike 2016 for
//3 Poti 100k, 3 Momentary Switches, 1 Ultrasonic Sensor HC SR04 and an Arduino Nano.
//I took a Nano because it's so small and has the same funktions as his big brother UNO.
//In the Box it is Connected via MiditoUSB connector while midi.h did not work out well.
//This is Sketch Nr.1 vom 12.11.2016
//Published under Midi_Controller DIY
//its open source and free for all and everyone off course!
//******************************************************************************
// Install MidiChannel for all
int controlChange = 176; // MIDIKanal 1
// Install Ultrasonic
int ctrlNummer = 20;
int Trigger = 0;
int Echo = 0;
// Install Potis 1 to 3
int potiWert1 = 0;
int potiWert2 = 0;
int potiWert3 = 0;
int smoothWert1 = 0;
int smoothWert2 = 0;
int smoothWert3 = 0;
int potiWertAlt1 = 0;
int potiWertAlt2 = 0;
int potiWertAlt3 = 0;
int quickSmooth1 = 0;
int quickSmooth2 = 0;
int quickSmooth3 = 0;
int differenz1 = 0;
int differenz2 = 0;
int differenz3 = 0;
boolean quickAktiv1 = false;
boolean quickAktiv2 = false;
boolean quickAktiv3 = false;
int x = 0;
int y = 0;
int z = 0;
// Install Pushbuttons 1 to 3
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
void setup() {
Serial.begin(9600);
//Initialize the Ultrasonic
pinMode(10, OUTPUT); //Trigger
pinMode(9,INPUT); //ECHO
// initialize the pushbutton pin as an input:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
}
void loop() {
// Inititialize Potis 1 to 3
potiWert1 = analogRead(A0);
potiWert2 = analogRead(A1);
potiWert3 = analogRead(A2);
smoothWert1 = 0.6 * smoothWert1 + 0.4 * analogRead(A0);
smoothWert2 = 0.6 * smoothWert2 + 0.4 * analogRead(A1);
smoothWert3 = 0.6 * smoothWert3 + 0.4 * analogRead(A2);
differenz1 = abs(potiWert1 - potiWertAlt1);
differenz2 = abs(potiWert2 - potiWertAlt2);
differenz3 = abs(potiWert3 - potiWertAlt3);
if (differenz1 <= 5 && quickAktiv1 == false) {
quickSmooth1 = 0.6 * smoothWert1 + 0.4 * analogRead(A0);
}
else if (differenz1 <= 5 && quickAktiv1 == true){
quickSmooth1 = analogRead(A0);
x++;
}
else {
quickSmooth1 = analogRead(A0);
quickAktiv1 = true;
}
if (differenz2 <= 5 && quickAktiv2 == false) {
quickSmooth2 = 0.6 * smoothWert2 + 0.4 * analogRead(A1);
}
else if (differenz2 <= 5 && quickAktiv2 == true){
quickSmooth2 = analogRead(A1);
y++;
}
else {
quickSmooth2 = analogRead(A1);
quickAktiv1 = true;
}
if (differenz3 <= 5 && quickAktiv3 == false) {
quickSmooth3 = 0.6 * smoothWert3 + 0.4 * analogRead(A2);
}
else if (differenz3 <= 5 && quickAktiv3 == true){
quickSmooth3 = analogRead(A2);
z++;
}
else {
quickSmooth3 = analogRead(A2);
quickAktiv3 = true;
}
if (x >= 10) {
x = 0;
quickAktiv1 = false;
}
if (y >= 10) {
y = 0;
quickAktiv2 = false;
}
if (z >= 10) {
z = 0;
quickAktiv3 = false;
}
potiWertAlt1 = potiWert1;
potiWertAlt2 = potiWert2;
potiWertAlt3 = potiWert3;
delay (10);
// read the state of the pushbutton value:
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
delay (10);
sensorenAbfragen(10, 9, ctrlNummer);
}
void sensorenAbfragen(int Trigger, int Echo, int ctrlNummer) {
//Trigger Measurement
digitalWrite(Trigger, LOW);
delayMicroseconds(2);
digitalWrite(Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
long sensorWert = pulseIn(Echo, HIGH);
if (sensorWert <=2500) {
int sensorMIDI = map(sensorWert,2500,0,0,127);
sendeMIDI(controlChange, ctrlNummer, sensorMIDI);
}
Serial.print(sensorWert);
Serial.println("cm ");
}
//Send Data to Midi
void sendeMIDI(int statusByte, int dataByte1, int dataByte2) {
Serial.write(statusByte);
Serial.write(dataByte1);
Serial.write(dataByte2);
}