diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..38c0e69
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+
+Processing/OSCReceive/application\.linux-arm64/
+
+Processing/OSCReceive/application\.linux-armv6hf/
+
+Processing/OSCReceive/application\.linux32/
+
+Processing/OSCReceive/application\.linux64/
diff --git a/Conf/MovedulationJ7.json b/Conf/MovedulationJ7.json
new file mode 100644
index 0000000..0f8001a
--- /dev/null
+++ b/Conf/MovedulationJ7.json
@@ -0,0 +1,175 @@
+{
+contents: [
+{
+ type:"hslider",
+ cursorFillColor: [255, 0, 0],
+ defaultFillColor: [20, 0, 0],
+ borderColor: [155, 0, 0],
+ height: 120,
+ slidedFillColor: [100, 0, 0],
+ width: 480,
+ rect: [304, 826, 784, 946],
+ maxValue: 255.0,
+ minValue: 0.0,
+ OSCValueChanged: "/lx $1"
+},
+{
+ type:"vslider",
+ cursorFillColor: [255, 0, 0],
+ defaultFillColor: [20, 0, 0],
+ borderColor: [255, 0, 0],
+ height: 480,
+ slidedFillColor: [100, 0, 0],
+ width: 120,
+ rect: [165, 320, 285, 800],
+ maxValue: 255.0,
+ minValue: 0.0,
+ OSCValueChanged: "/ly $1"
+},
+{
+ type:"vslider",
+ cursorFillColor: [255, 0, 0],
+ defaultFillColor: [20, 0, 0],
+ borderColor: [255, 0, 0],
+ height: 480,
+ slidedFillColor: [100, 0, 0],
+ width: 120,
+ rect: [1662, 314, 1782, 794],
+ maxValue: 255.0,
+ minValue: 0.0,
+ OSCValueChanged: "/ry $1"
+},
+{
+ type:"hslider",
+ cursorFillColor: [255, 0, 0],
+ defaultFillColor: [20, 0, 0],
+ borderColor: [155, 0, 0],
+ height: 120,
+ slidedFillColor: [100, 0, 0],
+ width: 480,
+ rect: [1156, 827, 1636, 947],
+ maxValue: 255.0,
+ minValue: 0.0,
+ OSCValueChanged: "/rx $1"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "1",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "1",
+ width: 150,
+ rect: [406, 320, 556, 470],
+ oscToggleOn: "/lt1 1",
+ oscToggleOff: "/lt1 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "2",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "2",
+ width: 150,
+ rect: [628, 321, 778, 471],
+ oscToggleOn: "/lt2 1",
+ oscToggleOff: "/lt2 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "3",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "3",
+ width: 150,
+ rect: [405, 584, 555, 734],
+ oscToggleOn: "/lt3 1",
+ oscToggleOff: "/lt3 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "4",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "4",
+ width: 150,
+ rect: [625, 579, 775, 729],
+ oscToggleOn: "/lt4 1",
+ oscToggleOff: "/lt4 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "1",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "1",
+ width: 150,
+ rect: [1159, 322, 1309, 472],
+ oscToggleOn: "/rt1 1",
+ oscToggleOff: "/rt1 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "2",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "2",
+ width: 150,
+ rect: [1415, 320, 1565, 470],
+ oscToggleOn: "/rt2 1",
+ oscToggleOff: "/rt2 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "3",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "3",
+ width: 150,
+ rect: [1162, 580, 1312, 730],
+ oscToggleOn: "/rt3 1",
+ oscToggleOff: "/rt3 0",
+ fireOSCOnToggleOff: "true"
+},
+{
+ type:"toggle",
+ defaultFillColor: [20, 0, 0],
+ defaultText: "4",
+ fontColor: [255, 255, 255],
+ borderColor: [250, 0, 0],
+ height: 150,
+ toggledFillColor: [250, 0, 0],
+ toggledText: "4",
+ width: 150,
+ rect: [1410, 581, 1560, 731],
+ oscToggleOn: "/rt4 1",
+ oscToggleOff: "/rt4 0",
+ fireOSCOnToggleOff: "true"
+}
+]}
\ No newline at end of file
diff --git a/Processing/OSCReceive/OSC.pde b/Processing/OSCReceive/OSC.pde
new file mode 100644
index 0000000..33ec6a3
--- /dev/null
+++ b/Processing/OSCReceive/OSC.pde
@@ -0,0 +1,96 @@
+int[] OSCleftToggle = {0,0,0,0};
+int OSCleftToggleActive = 0;
+int[] OSCrightToggle = {0,0,0,0};
+int OSCrightToggleActive = 0;
+float OSCleftX = 0;
+float OSCleftY = 0;
+float OSCrightX = 0;
+float OSCrightY = 0;
+float OSCvalue = 0;
+
+void oscEvent(OscMessage theOscMessage) {
+
+ if(theOscMessage.checkTypetag("s")){
+ OSCvalue = parseFloat(theOscMessage.get(0).toString().replaceAll(",","."));
+ }
+
+ switch(theOscMessage.addrPattern()) {
+ case "/lt1":
+ OSCleftToggle[0] = theOscMessage.get(0).intValue();
+ if(OSCleftToggle[0] == 1) {OSCleftToggleActive = 1;}
+ break;
+ case "/lt2":
+ OSCleftToggle[1] = theOscMessage.get(0).intValue();
+ if(OSCleftToggle[1] == 1) {OSCleftToggleActive = 2;}
+ break;
+ case "/lt3":
+ OSCleftToggle[2] = theOscMessage.get(0).intValue();
+ if(OSCleftToggle[2] == 1) {OSCleftToggleActive = 3;}
+ break;
+ case "/lt4":
+ OSCleftToggle[3] = theOscMessage.get(0).intValue();
+ if(OSCleftToggle[3] == 1) {OSCleftToggleActive = 4;}
+ break;
+ case "/lx":
+ OSCleftX = OSCvalue;
+ break;
+ case "/ly":
+ OSCleftY = OSCvalue;
+ break;
+
+ case "/rt1":
+ OSCrightToggle[0] = theOscMessage.get(0).intValue();
+ if(OSCrightToggle[0] == 1) {OSCrightToggleActive = 1;}
+ break;
+ case "/rt2":
+ OSCrightToggle[1] = theOscMessage.get(0).intValue();
+ if(OSCrightToggle[1] == 1) {OSCrightToggleActive = 2;}
+ break;
+ case "/rt3":
+ OSCrightToggle[2] = theOscMessage.get(0).intValue();
+ if(OSCrightToggle[2] == 1) {OSCrightToggleActive = 3;}
+ break;
+ case "/rt4":
+ OSCrightToggle[3] = theOscMessage.get(0).intValue();
+ if(OSCrightToggle[3] == 1) {OSCrightToggleActive = 4;}
+ break;
+ case "/rx":
+ OSCrightX = OSCvalue;
+ break;
+ case "/ry":
+ OSCrightY = OSCvalue;
+ break;
+ }
+
+ printOSC(false, theOscMessage);
+}
+
+
+void printOSC(boolean show, OscMessage theOscMessage) {
+
+ if(show) {
+ print("Pattern:"+theOscMessage.addrPattern());
+ print("\tTagType:"+theOscMessage.typetag());
+ if(theOscMessage.checkTypetag("i")){
+ print("\t\tValue:"+theOscMessage.get(0).intValue());
+ }
+ if(theOscMessage.checkTypetag("s")){
+ OSCvalue = parseFloat(theOscMessage.get(0).toString().replaceAll(",","."));
+ print("\t\tValue:"+OSCvalue);
+ }
+ println();
+ }
+
+ print(OSCleftToggle[0]+"\t");
+ print(OSCleftToggle[1]+"\t");
+ print(OSCleftToggle[2]+"\t");
+ print(OSCleftToggle[3]+"\t");
+ print(OSCrightToggle[0]+"\t");
+ print(OSCrightToggle[1]+"\t");
+ print(OSCrightToggle[2]+"\t");
+ print(OSCrightToggle[3]+"\t");
+ print(OSCleftX+"\t");
+ print(OSCleftY+"\t");
+ print(OSCrightX+"\t");
+ println(OSCrightY+"\t");
+}
diff --git a/Processing/OSCReceive/OSCReceive.pde b/Processing/OSCReceive/OSCReceive.pde
new file mode 100644
index 0000000..3f49b12
--- /dev/null
+++ b/Processing/OSCReceive/OSCReceive.pde
@@ -0,0 +1,43 @@
+
+import oscP5.*;
+
+OscP5 oscP5;
+
+void setup() {
+ size(900, 500);
+ noStroke();
+ stroke(255);
+ strokeWeight(3);
+ oscP5 = new OscP5(this,7000);
+}
+
+void draw() {
+ background(50);
+
+ for ( int i=0; i<4; i++) {
+ noStroke();
+ fill(150);
+
+ if(OSCleftToggle[i]==1) {fill(100,200,100,200);} else {fill(150);}
+ if(OSCleftToggleActive==i+1) {stroke(255);} else {noStroke();}
+ ellipse((50)+(100*i), 50, 40, 40);
+
+ if(OSCrightToggle[i]==1) {fill(100,200,100,200);} else {fill(150);}
+ if(OSCrightToggleActive==i+1) {stroke(255);} else {noStroke();}
+ ellipse((550)+(100*i), 50, 40, 40);
+ }
+
+ fill(200);
+ rect(190, 150, 20, 255, 10);
+ rect(70, 265, 255, 20, 10);
+ fill(100,200,100,200);
+ ellipse(200, OSCleftY+150, 40, 40);
+ ellipse(OSCleftX+70, 275, 40, 40);
+
+ fill(200);
+ rect(690, 150, 20, 255, 10);
+ rect(570, 265, 255, 20, 10);
+ fill(100,200,100,200);
+ ellipse(700, OSCrightY+150, 40, 40);
+ ellipse(OSCrightX+570, 275, 40, 40);
+}
diff --git a/V3-WeMos/Circuit/CIRCUIT.pdf b/V3-WeMos/Circuit/CIRCUIT.pdf
new file mode 100644
index 0000000..5766e4f
Binary files /dev/null and b/V3-WeMos/Circuit/CIRCUIT.pdf differ
diff --git a/V3-WeMos/Circuit/CIRCUIT.svg b/V3-WeMos/Circuit/CIRCUIT.svg
new file mode 100644
index 0000000..62a47a7
--- /dev/null
+++ b/V3-WeMos/Circuit/CIRCUIT.svg
@@ -0,0 +1,4559 @@
+
+
diff --git a/V3-WeMos/Circuit/WeMos-D1-mini.svg b/V3-WeMos/Circuit/WeMos-D1-mini.svg
new file mode 100644
index 0000000..aa890e9
--- /dev/null
+++ b/V3-WeMos/Circuit/WeMos-D1-mini.svg
@@ -0,0 +1,323 @@
+
+
\ No newline at end of file
diff --git a/V3-WeMos/Circuit/mpu6050.svg b/V3-WeMos/Circuit/mpu6050.svg
new file mode 100644
index 0000000..4d95b87
--- /dev/null
+++ b/V3-WeMos/Circuit/mpu6050.svg
@@ -0,0 +1,498 @@
+
+
+
\ No newline at end of file
diff --git a/V3-WeMos/ESP8266sendMessage/ESP8266sendMessage.ino b/V3-WeMos/ESP8266sendMessage/ESP8266sendMessage.ino
new file mode 100644
index 0000000..997e322
--- /dev/null
+++ b/V3-WeMos/ESP8266sendMessage/ESP8266sendMessage.ino
@@ -0,0 +1,76 @@
+
+#include
+#include
+#include
+#include
+#include
+
+const int MPU=0x68;
+int16_t AcX,AcY,AcZ;
+
+char ssid[] = "NETGEAR41";
+char pass[] = "magicalbanana0";
+
+WiFiUDP Udp;
+const IPAddress outIp(192,168,0,29); // remote IP of receiver computer
+const unsigned int outPort = 7000; // remote port to receive OSC
+
+void setup() {
+
+ Wire.begin();
+ Wire.beginTransmission(MPU);
+ Wire.write(0x6B);
+ Wire.write(0);
+ Wire.endTransmission(true);
+
+ Serial.begin(115200);
+
+ Serial.print("Connecting to ");
+ Serial.println(ssid);
+ WiFi.begin(ssid, pass);
+
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.print(".");
+ }
+
+ Serial.println("");
+ Serial.println("WiFi connected");
+ Serial.println("IP address: ");
+ Serial.println(WiFi.localIP());
+
+}
+
+void loop() {
+
+ Wire.beginTransmission(MPU);
+ Wire.write(0x3B);
+ Wire.endTransmission(false);
+ Wire.requestFrom(MPU,14);
+ AcX=Wire.read()<<8|Wire.read();
+ AcY=Wire.read()<<8|Wire.read();
+ AcZ=Wire.read()<<8|Wire.read();
+
+ Serial.print(AcX);
+ Serial.print("\t");
+ Serial.print(AcY);
+ Serial.print("\t");
+ Serial.println(AcZ);
+
+ OSCMessage msgRX("/movedulation/sliderRX");
+ msgRX.add(AcX);
+ Udp.beginPacket(outIp, outPort);
+ msgRX.send(Udp);
+ Udp.endPacket();
+ msgRX.empty();
+
+ OSCMessage msgRY("/movedulation/sliderRY");
+ msgRY.add(AcY);
+ Udp.beginPacket(outIp, outPort);
+ msgRY.send(Udp);
+ Udp.endPacket();
+ msgRX.empty();
+
+
+ delay(100);
+}
diff --git a/V3-WeMos/ProcessingTestReceive/ProcessingTestReceive.pde b/V3-WeMos/ProcessingTestReceive/ProcessingTestReceive.pde
new file mode 100644
index 0000000..442672a
--- /dev/null
+++ b/V3-WeMos/ProcessingTestReceive/ProcessingTestReceive.pde
@@ -0,0 +1,27 @@
+
+import oscP5.*;
+import netP5.*;
+
+OscP5 oscP5;
+
+void setup() {
+ size(400,400);
+ frameRate(25);
+ oscP5 = new OscP5(this,7000);
+}
+
+void draw() {
+ background(0);
+}
+
+void oscEvent(OscMessage theOscMessage) {
+ print("### Pattern: "+theOscMessage.addrPattern());
+ print(" TypeTag:"+theOscMessage.typetag());
+ if(theOscMessage.checkTypetag("i")){
+ print(" Value: "+theOscMessage.get(0).intValue());
+ }
+ if(theOscMessage.checkTypetag("s")){
+ print(" Value: "+theOscMessage.get(0));
+ }
+ println();
+}