Browse Source

Updated README

oloturia 3 months ago
parent
commit
aa05eb2c80
4 changed files with 693 additions and 4 deletions
  1. 15 4
      README.md
  2. 25 0
      console/BOM.html
  3. 392 0
      console/console.xml
  4. 261 0
      example configuration/Oloturia v10.midi.xml

+ 15 - 4
README.md

@@ -1,7 +1,18 @@
-A simple project that transform an Arduino Leonardo (or similar boards based on ATmega32u4) in a mixing console for open source Mixxx DJ software.
+A simple project that transform an Arduino Leonardo (or similar boards based on ATmega32u4) in a mixing console for open source Mixxx DJ software. To compile, you'll need MIDIUSB and EncoderButton libraries. Both are downloadable from the official Arduino IDE's library manager.
 
-Attach some potentiometers to analogue inputs (you can alter the inputs in the first part of the sketch - there is no real difference between knobs and sliders, it's just the structs name), plug the Arduino then open Mixxx and open the preferences. You should see a new entry under "Controllers".
+After uploading the sketch and connecting the controls, you'll have to "train" Mixxx to recognize the various sliders and knobs: click "Learning Wizard" and then follow the instructions. Some of the commands aren't selectable from the interface, you'll need to use the drop down menu to select them (i.e. "scroll up/down the library"). An example configuration is in the folder of the same name. You have to copy the .xml into /home/<user>/.mixxx/controllers/ folder.
 
-After that you have to "train" Mixxx to recognize the various sliders and knobs: click "Learning Wizard" and then follow the instructions!
+Be aware that the controller needs to be plugged in before starting Mixxx. If you enabled the debug, you have to open a serial console to start the device.
 
-To do: add some digital inputs for buttons and switches.
+At the moment it supports these kinds of controls:
+- Analog controls (knobs, sliders) need to be connected to an analog input.
+- Rotary encoders, clk should be connected to an interrupt pin, dt to a digital input.
+- Buttons (also on top of rotary encoders) need to be connected to digital input.
+
+Buttons feature single and long press. They could have also two states that toggle (i.e. start/stop, etc.).
+Analog controls have three "magnetic" positions: around 0, 1023 and middle (user defined) the reading has more stickyness (user definable). If you see that Mixxx's control is not in the middle when the potentiometer is at its half, alter the middle "magnetic" position.
+They have also a dead zone that filters small variations in the readings. If you see that the controls are oscillating, increase the dead zone.
+
+There are two experimental improvements:
+- In the "console" folder there is a PCB made in Kicad, ready to be printed. Some of the footprints come from Digi-Key/digikey-kicad-library. The example configuration is trained on this PCB.
+- If you need more analog controls, there is a version that features a multiplexer. I've tested with three potentiometers and worked, I've not tested it yet for a full console anyway.

+ 25 - 0
console/BOM.html

@@ -0,0 +1,25 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <title>KiCad BOM</title>
+    </head>
+    <body>
+    <h1>console.sch</h1>
+    <p>gio 8 feb 2024, 15:47:04</p>
+    <p>Eeschema 5.1.5+dfsg1-2build2</p>
+    <p><b>Component Count:</b>15</p>
+    <table>
+    <tr><th style='width:640px'>Ref</th><th>Qnty</th><th>Value</th><th>Part</th><th>Footprint</th><th>Description</th><th>Vendor</th></tr>
+    <tr><td>ARDUINO1</td><td>1</td><td>Arduino_Leonardo</td><td>MCU_Module:Arduino_Leonardo</td><td>Module:Arduino_UNO_R3</td><td>Arduino LEONARDO Microcontroller Module</td><td></td></tr>
+    <tr><td>RV_Crossfader1</td><td>1</td><td>R_POT</td><td>Device:R_POT</td><td>Potentiometer_THT:Potentiometer_Bourns_PTA6043_Single_Slide</td><td>Potentiometer</td><td></td></tr>
+    <tr><td>RV_Left_Bass1, RV_Left_Mid1, RV_Left_Treble1, RV_Right_Bass1, RV_Right_Mid2, RV_Right_Treble1</td><td>6</td><td>R_POT</td><td>Device:R_POT</td><td>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</td><td>Potentiometer</td><td></td></tr>
+    <tr><td>RV_Left_BPM1, RV_Right_BPM1</td><td>2</td><td>R_POT</td><td>Device:R_POT</td><td>Potentiometer_THT:Potentiometer_Bourns_PTA4543_Single_Slide</td><td>Potentiometer</td><td></td></tr>
+    <tr><td>SW_Left1, SW_Right1</td><td>2</td><td>SW_Push</td><td>Switch:SW_Push</td><td>digikey-footprints:D6R90F2LFS</td><td>Push button switch, generic, two pins</td><td></td></tr>
+    <tr><td>SW_Left_Table_Control1, SW_Right_Table_Control1, SW_Selector1</td><td>3</td><td>Rotary_Encoder_Switch</td><td>Device:Rotary_Encoder_Switch</td><td>digikey-footprints:XDCR_PEC11R-4215F-S0024</td><td>Rotary encoder, dual channel, incremental quadrate outputs, with switch</td><td></td></tr><!--TABLEROW-->
+    </table>
+    </body>
+</html>
+    

+ 392 - 0
console/console.xml

@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<export version="D">
+  <design>
+    <source>/media/antiz/openshare/Documents/RaspiBO/mixxx/console/console.sch</source>
+    <date>gio 8 feb 2024, 15:47:04</date>
+    <tool>Eeschema 5.1.5+dfsg1-2build2</tool>
+    <sheet number="1" name="/" tstamps="/">
+      <title_block>
+        <title>MIXXX CONSOLE</title>
+        <company/>
+        <rev>1.0</rev>
+        <date>2024-01-09</date>
+        <source>console.sch</source>
+        <comment number="1" value=""/>
+        <comment number="2" value=""/>
+        <comment number="3" value=""/>
+        <comment number="4" value=""/>
+      </title_block>
+    </sheet>
+  </design>
+  <components>
+    <comp ref="ARDUINO1">
+      <value>Arduino_Leonardo</value>
+      <footprint>Module:Arduino_UNO_R3</footprint>
+      <datasheet>https://www.arduino.cc/en/Main/ArduinoBoardLeonardo</datasheet>
+      <libsource lib="MCU_Module" part="Arduino_Leonardo" description="Arduino LEONARDO Microcontroller Module"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>65974FEC</tstamp>
+    </comp>
+    <comp ref="RV_Left_BPM1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTA4543_Single_Slide</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>65976467</tstamp>
+    </comp>
+    <comp ref="RV_Left_Treble1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>65976A6B</tstamp>
+    </comp>
+    <comp ref="RV_Right_Treble1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>65976F71</tstamp>
+    </comp>
+    <comp ref="RV_Crossfader1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTA6043_Single_Slide</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>659775A2</tstamp>
+    </comp>
+    <comp ref="RV_Left_Bass1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>659779F0</tstamp>
+    </comp>
+    <comp ref="RV_Left_Mid1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>65977E3F</tstamp>
+    </comp>
+    <comp ref="SW_Left1">
+      <value>SW_Push</value>
+      <footprint>digikey-footprints:D6R90F2LFS</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Switch" part="SW_Push" description="Push button switch, generic, two pins"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597BE83</tstamp>
+    </comp>
+    <comp ref="SW_Right1">
+      <value>SW_Push</value>
+      <footprint>digikey-footprints:D6R90F2LFS</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Switch" part="SW_Push" description="Push button switch, generic, two pins"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597C315</tstamp>
+    </comp>
+    <comp ref="RV_Right_Mid2">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597BAE6</tstamp>
+    </comp>
+    <comp ref="RV_Right_Bass1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597BAE0</tstamp>
+    </comp>
+    <comp ref="RV_Right_BPM1">
+      <value>R_POT</value>
+      <footprint>Potentiometer_THT:Potentiometer_Bourns_PTA4543_Single_Slide</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="R_POT" description="Potentiometer"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597BADA</tstamp>
+    </comp>
+    <comp ref="SW_Selector1">
+      <value>Rotary_Encoder_Switch</value>
+      <footprint>digikey-footprints:XDCR_PEC11R-4215F-S0024</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="Rotary_Encoder_Switch" description="Rotary encoder, dual channel, incremental quadrate outputs, with switch"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597C931</tstamp>
+    </comp>
+    <comp ref="SW_Left_Table_Control1">
+      <value>Rotary_Encoder_Switch</value>
+      <footprint>digikey-footprints:XDCR_PEC11R-4215F-S0024</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="Rotary_Encoder_Switch" description="Rotary encoder, dual channel, incremental quadrate outputs, with switch"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597D2A5</tstamp>
+    </comp>
+    <comp ref="SW_Right_Table_Control1">
+      <value>Rotary_Encoder_Switch</value>
+      <footprint>digikey-footprints:XDCR_PEC11R-4215F-S0024</footprint>
+      <datasheet>~</datasheet>
+      <libsource lib="Device" part="Rotary_Encoder_Switch" description="Rotary encoder, dual channel, incremental quadrate outputs, with switch"/>
+      <sheetpath names="/" tstamps="/"/>
+      <tstamp>6597DC98</tstamp>
+    </comp>
+  </components>
+  <libparts>
+    <libpart lib="Device" part="R_POT">
+      <description>Potentiometer</description>
+      <docs>~</docs>
+      <footprints>
+        <fp>Potentiometer*</fp>
+      </footprints>
+      <fields>
+        <field name="Reference">RV</field>
+        <field name="Value">R_POT</field>
+      </fields>
+      <pins>
+        <pin num="1" name="1" type="passive"/>
+        <pin num="2" name="2" type="passive"/>
+        <pin num="3" name="3" type="passive"/>
+      </pins>
+    </libpart>
+    <libpart lib="Device" part="Rotary_Encoder_Switch">
+      <description>Rotary encoder, dual channel, incremental quadrate outputs, with switch</description>
+      <docs>~</docs>
+      <footprints>
+        <fp>RotaryEncoder*Switch*</fp>
+      </footprints>
+      <fields>
+        <field name="Reference">SW</field>
+        <field name="Value">Rotary_Encoder_Switch</field>
+      </fields>
+      <pins>
+        <pin num="A" name="A" type="passive"/>
+        <pin num="B" name="B" type="passive"/>
+        <pin num="C" name="C" type="passive"/>
+        <pin num="S1" name="S1" type="passive"/>
+        <pin num="S2" name="S2" type="passive"/>
+      </pins>
+    </libpart>
+    <libpart lib="MCU_Module" part="Arduino_Leonardo">
+      <description>Arduino LEONARDO Microcontroller Module</description>
+      <docs>https://www.arduino.cc/en/Main/ArduinoBoardLeonardo</docs>
+      <footprints>
+        <fp>Arduino*UNO*R3*</fp>
+      </footprints>
+      <fields>
+        <field name="Reference">A</field>
+        <field name="Value">Arduino_Leonardo</field>
+        <field name="Footprint">Module:Arduino_UNO_R3</field>
+      </fields>
+      <pins>
+        <pin num="1" name="NC" type="NotConnected"/>
+        <pin num="2" name="IOREF" type="output"/>
+        <pin num="3" name="~RESET" type="input"/>
+        <pin num="4" name="3V3" type="power_out"/>
+        <pin num="5" name="+5V" type="power_out"/>
+        <pin num="6" name="GND" type="power_in"/>
+        <pin num="7" name="GND" type="power_in"/>
+        <pin num="8" name="VIN" type="power_in"/>
+        <pin num="9" name="A0" type="BiDi"/>
+        <pin num="10" name="A1" type="BiDi"/>
+        <pin num="11" name="A2" type="BiDi"/>
+        <pin num="12" name="A3" type="BiDi"/>
+        <pin num="13" name="A4" type="BiDi"/>
+        <pin num="14" name="A5" type="BiDi"/>
+        <pin num="15" name="D0/RX" type="BiDi"/>
+        <pin num="16" name="D1/TX" type="BiDi"/>
+        <pin num="17" name="D2/SDA" type="BiDi"/>
+        <pin num="18" name="D3/SCL" type="BiDi"/>
+        <pin num="19" name="D4" type="BiDi"/>
+        <pin num="20" name="D5" type="BiDi"/>
+        <pin num="21" name="D6" type="BiDi"/>
+        <pin num="22" name="D7" type="BiDi"/>
+        <pin num="23" name="D8" type="BiDi"/>
+        <pin num="24" name="D9" type="BiDi"/>
+        <pin num="25" name="D10" type="BiDi"/>
+        <pin num="26" name="D11" type="BiDi"/>
+        <pin num="27" name="D12" type="BiDi"/>
+        <pin num="28" name="D13" type="BiDi"/>
+        <pin num="29" name="GND" type="power_in"/>
+        <pin num="30" name="AREF" type="input"/>
+        <pin num="31" name="SDA/D2" type="BiDi"/>
+        <pin num="32" name="SCL/D3" type="BiDi"/>
+      </pins>
+    </libpart>
+    <libpart lib="Switch" part="SW_Push">
+      <description>Push button switch, generic, two pins</description>
+      <docs>~</docs>
+      <fields>
+        <field name="Reference">SW</field>
+        <field name="Value">SW_Push</field>
+      </fields>
+      <pins>
+        <pin num="1" name="1" type="passive"/>
+        <pin num="2" name="2" type="passive"/>
+      </pins>
+    </libpart>
+  </libparts>
+  <libraries>
+    <library logical="Device">
+      <uri>/usr/share/kicad/library/Device.lib</uri>
+    </library>
+    <library logical="MCU_Module">
+      <uri>/usr/share/kicad/library/MCU_Module.lib</uri>
+    </library>
+    <library logical="Switch">
+      <uri>/usr/share/kicad/library/Switch.lib</uri>
+    </library>
+  </libraries>
+  <nets>
+    <net code="1" name="Net-(ARDUINO1-Pad23)">
+      <node ref="SW_Left_Table_Control1" pin="S1"/>
+      <node ref="ARDUINO1" pin="23"/>
+    </net>
+    <net code="2" name="Net-(ARDUINO1-Pad26)">
+      <node ref="ARDUINO1" pin="26"/>
+      <node ref="SW_Left1" pin="2"/>
+    </net>
+    <net code="3" name="Net-(ARDUINO1-Pad28)">
+      <node ref="SW_Right1" pin="2"/>
+      <node ref="ARDUINO1" pin="28"/>
+    </net>
+    <net code="4" name="Net-(ARDUINO1-Pad13)">
+      <node ref="RV_Left_Mid1" pin="2"/>
+      <node ref="ARDUINO1" pin="13"/>
+    </net>
+    <net code="5" name="Net-(ARDUINO1-Pad14)">
+      <node ref="RV_Left_Treble1" pin="2"/>
+      <node ref="ARDUINO1" pin="14"/>
+    </net>
+    <net code="6" name="Net-(ARDUINO1-Pad25)">
+      <node ref="RV_Right_Bass1" pin="2"/>
+      <node ref="ARDUINO1" pin="25"/>
+    </net>
+    <net code="7" name="Net-(ARDUINO1-Pad21)">
+      <node ref="RV_Right_Mid2" pin="2"/>
+      <node ref="ARDUINO1" pin="21"/>
+    </net>
+    <net code="8" name="Net-(ARDUINO1-Pad27)">
+      <node ref="RV_Right_Treble1" pin="2"/>
+      <node ref="ARDUINO1" pin="27"/>
+    </net>
+    <net code="9" name="Net-(ARDUINO1-Pad15)">
+      <node ref="ARDUINO1" pin="15"/>
+      <node ref="SW_Selector1" pin="A"/>
+    </net>
+    <net code="10" name="Net-(ARDUINO1-Pad16)">
+      <node ref="ARDUINO1" pin="16"/>
+      <node ref="SW_Selector1" pin="B"/>
+    </net>
+    <net code="11" name="Net-(ARDUINO1-Pad18)">
+      <node ref="SW_Right_Table_Control1" pin="A"/>
+      <node ref="ARDUINO1" pin="18"/>
+    </net>
+    <net code="12" name="Net-(ARDUINO1-Pad17)">
+      <node ref="ARDUINO1" pin="17"/>
+      <node ref="SW_Left_Table_Control1" pin="A"/>
+    </net>
+    <net code="13" name="Net-(ARDUINO1-Pad19)">
+      <node ref="SW_Left_Table_Control1" pin="B"/>
+      <node ref="ARDUINO1" pin="19"/>
+    </net>
+    <net code="14" name="Net-(ARDUINO1-Pad20)">
+      <node ref="SW_Right_Table_Control1" pin="B"/>
+      <node ref="ARDUINO1" pin="20"/>
+    </net>
+    <net code="15" name="Net-(ARDUINO1-Pad22)">
+      <node ref="ARDUINO1" pin="22"/>
+      <node ref="SW_Selector1" pin="S1"/>
+    </net>
+    <net code="16" name="Net-(ARDUINO1-Pad24)">
+      <node ref="ARDUINO1" pin="24"/>
+      <node ref="SW_Right_Table_Control1" pin="S1"/>
+    </net>
+    <net code="17" name="Net-(ARDUINO1-Pad8)">
+      <node ref="ARDUINO1" pin="8"/>
+    </net>
+    <net code="18" name="Net-(ARDUINO1-Pad9)">
+      <node ref="RV_Crossfader1" pin="2"/>
+      <node ref="ARDUINO1" pin="9"/>
+    </net>
+    <net code="19" name="Net-(ARDUINO1-Pad7)">
+      <node ref="RV_Right_Mid2" pin="3"/>
+      <node ref="SW_Right1" pin="1"/>
+      <node ref="SW_Left1" pin="1"/>
+      <node ref="RV_Left_Mid1" pin="3"/>
+      <node ref="RV_Left_Bass1" pin="3"/>
+      <node ref="RV_Right_BPM1" pin="3"/>
+      <node ref="RV_Right_Bass1" pin="3"/>
+      <node ref="SW_Selector1" pin="S2"/>
+      <node ref="SW_Right_Table_Control1" pin="S2"/>
+      <node ref="ARDUINO1" pin="7"/>
+      <node ref="SW_Left_Table_Control1" pin="C"/>
+      <node ref="SW_Left_Table_Control1" pin="S2"/>
+      <node ref="RV_Crossfader1" pin="1"/>
+      <node ref="RV_Right_Treble1" pin="3"/>
+      <node ref="RV_Left_Treble1" pin="3"/>
+      <node ref="RV_Left_BPM1" pin="3"/>
+      <node ref="SW_Selector1" pin="C"/>
+      <node ref="SW_Right_Table_Control1" pin="C"/>
+    </net>
+    <net code="20" name="Net-(ARDUINO1-Pad10)">
+      <node ref="ARDUINO1" pin="10"/>
+      <node ref="RV_Left_BPM1" pin="2"/>
+    </net>
+    <net code="21" name="Net-(ARDUINO1-Pad11)">
+      <node ref="ARDUINO1" pin="11"/>
+      <node ref="RV_Right_BPM1" pin="2"/>
+    </net>
+    <net code="22" name="Net-(ARDUINO1-Pad2)">
+      <node ref="ARDUINO1" pin="2"/>
+    </net>
+    <net code="23" name="Net-(ARDUINO1-Pad29)">
+      <node ref="ARDUINO1" pin="29"/>
+    </net>
+    <net code="24" name="Net-(ARDUINO1-Pad3)">
+      <node ref="ARDUINO1" pin="3"/>
+    </net>
+    <net code="25" name="Net-(ARDUINO1-Pad30)">
+      <node ref="ARDUINO1" pin="30"/>
+    </net>
+    <net code="26" name="Net-(ARDUINO1-Pad31)">
+      <node ref="ARDUINO1" pin="31"/>
+    </net>
+    <net code="27" name="Net-(ARDUINO1-Pad32)">
+      <node ref="ARDUINO1" pin="32"/>
+    </net>
+    <net code="28" name="Net-(ARDUINO1-Pad4)">
+      <node ref="ARDUINO1" pin="4"/>
+    </net>
+    <net code="29" name="Net-(ARDUINO1-Pad5)">
+      <node ref="RV_Right_BPM1" pin="1"/>
+      <node ref="RV_Left_Treble1" pin="1"/>
+      <node ref="RV_Right_Mid2" pin="1"/>
+      <node ref="RV_Left_BPM1" pin="1"/>
+      <node ref="RV_Right_Bass1" pin="1"/>
+      <node ref="RV_Left_Bass1" pin="1"/>
+      <node ref="RV_Right_Treble1" pin="1"/>
+      <node ref="ARDUINO1" pin="5"/>
+      <node ref="RV_Left_Mid1" pin="1"/>
+      <node ref="RV_Crossfader1" pin="3"/>
+    </net>
+    <net code="30" name="Net-(ARDUINO1-Pad6)">
+      <node ref="ARDUINO1" pin="6"/>
+    </net>
+    <net code="31" name="Net-(ARDUINO1-Pad12)">
+      <node ref="RV_Left_Bass1" pin="2"/>
+      <node ref="ARDUINO1" pin="12"/>
+    </net>
+    <net code="32" name="Net-(ARDUINO1-Pad1)">
+      <node ref="ARDUINO1" pin="1"/>
+    </net>
+  </nets>
+</export>

+ 261 - 0
example configuration/Oloturia v10.midi.xml

@@ -0,0 +1,261 @@
+<?xml version='1.0' encoding='utf-8'?>
+<MixxxControllerPreset schemaVersion="1" mixxxVersion="">
+    <info>
+        <name>Oloturia v10</name>
+    </info>
+    <controller id="Arduino">
+        <scriptfiles/>
+        <controls>
+            <control>
+                <group>[EqualizerRack1_[Channel1]_Effect1]</group>
+                <key>parameter1</key>
+                <description>MIDI Learned from 28 messages.</description>
+                <status>0xB1</status>
+                <midino>0x01</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[EqualizerRack1_[Channel2]_Effect1]</group>
+                <key>parameter2</key>
+                <description>MIDI Learned from 111 messages.</description>
+                <status>0xB1</status>
+                <midino>0x02</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[EqualizerRack1_[Channel1]_Effect1]</group>
+                <key>parameter3</key>
+                <description>MIDI Learned from 139 messages.</description>
+                <status>0xB1</status>
+                <midino>0x03</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[EqualizerRack1_[Channel1]_Effect1]</group>
+                <key>parameter2</key>
+                <description>MIDI Learned from 141 messages.</description>
+                <status>0xB1</status>
+                <midino>0x04</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[EqualizerRack1_[Channel2]_Effect1]</group>
+                <key>parameter1</key>
+                <description>MIDI Learned from 114 messages.</description>
+                <status>0xB1</status>
+                <midino>0x05</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[EqualizerRack1_[Channel2]_Effect1]</group>
+                <key>parameter3</key>
+                <description>MIDI Learned from 110 messages.</description>
+                <status>0xB1</status>
+                <midino>0x06</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[Master]</group>
+                <key>crossfader</key>
+                <description>MIDI Learned from 498 messages.</description>
+                <status>0xB1</status>
+                <midino>0x07</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel1]</group>
+                <key>rate</key>
+                <description>MIDI Learned from 167 messages.</description>
+                <status>0xB1</status>
+                <midino>0x08</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel2]</group>
+                <key>rate</key>
+                <description>MIDI Learned from 193 messages.</description>
+                <status>0xB1</status>
+                <midino>0x09</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel1]</group>
+                <key>beatjump_0.03125_forward</key>
+                <description>MIDI Learned from 114 messages.</description>
+                <status>0xB1</status>
+                <midino>0x0A</midino>
+                <options>
+                    <selectknob/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel1]</group>
+                <key>beatjump_0.03125_backward</key>
+                <description>MIDI Learned from 93 messages.</description>
+                <status>0xB1</status>
+                <midino>0x0B</midino>
+                <options>
+                    <selectknob/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel2]</group>
+                <key>beatjump_0.03125_forward</key>
+                <description>MIDI Learned from 110 messages.</description>
+                <status>0xB1</status>
+                <midino>0x0C</midino>
+                <options>
+                    <selectknob/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel2]</group>
+                <key>beatjump_0.03125_backward</key>
+                <description>MIDI Learned from 138 messages.</description>
+                <status>0xB1</status>
+                <midino>0x0D</midino>
+                <options>
+                    <selectknob/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel2]</group>
+                <key>play</key>
+                <description>MIDI Learned from 2 messages.</description>
+                <status>0xB1</status>
+                <midino>0x0E</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel1]</group>
+                <key>reloop_toggle</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x0F</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel1]</group>
+                <key>play</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x10</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[Playlist]</group>
+                <key>LoadSelectedIntoFirstStopped</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x11</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[Playlist]</group>
+                <key>SelectNextTrack</key>
+                <description>MIDI Learned from 5 messages.</description>
+                <status>0xB1</status>
+                <midino>0x12</midino>
+                <options>
+                    <selectknob/>
+                </options>
+            </control>
+            <control>
+                <group>[Playlist]</group>
+                <key>SelectPrevTrack</key>
+                <description>MIDI Learned from 14 messages.</description>
+                <status>0xB1</status>
+                <midino>0x13</midino>
+                <options>
+                    <selectknob/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel2]</group>
+                <key>reloop_toggle</key>
+                <description>MIDI Learned from 2 messages.</description>
+                <status>0xB1</status>
+                <midino>0x14</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel1]</group>
+                <key>pfl</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x17</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[PreviewDeck1]</group>
+                <key>play</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x18</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+            <control>
+                <group>[Channel2]</group>
+                <key>pfl</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x19</midino>
+                <options>
+                    <button/>
+                </options>
+            </control>
+            <control>
+                <group>[PreviewDeck1]</group>
+                <key>LoadSelectedTrackAndPlay</key>
+                <description>MIDI Learned from 1 messages.</description>
+                <status>0xB1</status>
+                <midino>0x1A</midino>
+                <options>
+                    <normal/>
+                </options>
+            </control>
+        </controls>
+        <outputs>
+            <output>
+                <group></group>
+                <key></key>
+                <status>0x90</status>
+                <midino>0x09</midino>
+                <on>0x00</on>
+                <maximum>0</maximum>
+            </output>
+        </outputs>
+    </controller>
+</MixxxControllerPreset>