DIY Axe-Fx Foot Controller for $50 (Open Project)

I have fixed it for you. Removed all unwanted characters from the Constant Definitions
Sketch attached
 

Attachments

  • Axe3Controller_V6.13a.zip
    4 KB · Views: 35
Last edited:
thanks for the advice, bare in your mind that my coding knowledge is zero , just tell me what i need to delete exactly. "what's a macro?"

These are "Constant Definitions". They just give a name to a number

Code:
#define LooperRecord_CC 28
#define LooperPlay_CC 29
#define LooperOnce_CC 30
#define LooperDub_CC 31
#define LooperRev_CC 32
#define LooperBypass_CC 33

In this program, they can be useful to assign functions to the foot switches. e.g.: if you want to control the looper, you don't have to remember or consult which CC numbers you need for each function; you can use these user friendly texts instead


Now the first footswitch is used to call Scene 1
Code:
// Switch 1.                           
        case 0:
              MIDI.sendControlChange(SceneSelect_CC, 0, MIDICHAN);

If you wanted to use that footswitch to engage the looper recorder, you would change it like this:
Code:
// Switch 1.                           
        case 0:
              MIDI.sendControlChange(LooperRecord_CC, 0, MIDICHAN);

In otherwords. This:
Code:
MIDI.sendControlChange(LooperRecord_CC, 0, MIDICHAN);

Does exactly the same as this:
Code:
MIDI.sendControlChange(28, 0, MIDICHAN);

They both send CC number 28 to the Axe-FX

Have a look to this:
https://www.arduino.cc/reference/en/language/structure/further-syntax/define/
 
Last edited:
I thought I'd post my version of this, inspiration from Piing and a few other places. Main difference is I have a screen per switch so ended up writing the code from scratch (using Tysonit's lib though for axe control). You can find it on github under user kmcgain -> Pedalboard (couldn't post a link).

There's still feature ideas that I'll add over time but I've got it to the point where it's stable and time to share. Some points of difference:
  • Display of scene names against switches
  • Effect bypassing + name display on switches
  • Multiple layouts + switching between them, for me layout 1 is about scenes, layout 2 for effects
  • Tap tempo with flashing LED on board

If anyone wants to go down this route I'm happy to help out although perhaps in a different thread to avoid confusion. This is 1 Arduino Due controlling it rather than the Mega.

If I had my time again I would probably go with a master display that's larger for things like preset detail and live tuner + individual displays for switches. I'll probably get some 3d printed screen surrounds as well to hide the rough screen cutouts.
demo_layout_1.jpg
demo_layout_2.jpg
 
I thought I'd post my version of this, inspiration from Piing and a few other places. Main difference is I have a screen per switch so ended up writing the code from scratch (using Tysonit's lib though for axe control). You can find it on github under user kmcgain -> Pedalboard (couldn't post a link).

There's still feature ideas that I'll add over time but I've got it to the point where it's stable and time to share. Some points of difference:
  • Display of scene names against switches
  • Effect bypassing + name display on switches
  • Multiple layouts + switching between them, for me layout 1 is about scenes, layout 2 for effects
  • Tap tempo with flashing LED on board

If anyone wants to go down this route I'm happy to help out although perhaps in a different thread to avoid confusion. This is 1 Arduino Due controlling it rather than the Mega.

If I had my time again I would probably go with a master display that's larger for things like preset detail and live tuner + individual displays for switches. I'll probably get some 3d printed screen surrounds as well to hide the rough screen cutouts.
View attachment 73297
View attachment 73298
Congratulations for the build!

I am going to spend a lot of time learning from your program. Thank you for sharing it.
 
I thought I'd post my version of this, inspiration from Piing and a few other places. Main difference is I have a screen per switch so ended up writing the code from scratch (using Tysonit's lib though for axe control). You can find it on github under user kmcgain -> Pedalboard (couldn't post a link).

There's still feature ideas that I'll add over time but I've got it to the point where it's stable and time to share. Some points of difference:
  • Display of scene names against switches
  • Effect bypassing + name display on switches
  • Multiple layouts + switching between them, for me layout 1 is about scenes, layout 2 for effects
  • Tap tempo with flashing LED on board

If anyone wants to go down this route I'm happy to help out although perhaps in a different thread to avoid confusion. This is 1 Arduino Due controlling it rather than the Mega.

If I had my time again I would probably go with a master display that's larger for things like preset detail and live tuner + individual displays for switches. I'll probably get some 3d printed screen surrounds as well to hide the rough screen cutouts.
View attachment 73297
View attachment 73298
What kind of casing did you use to build this? A standard type? And the lcd, switches and so on. Looks great!
 
What kind of casing did you use to build this? A standard type? And the lcd, switches and so on. Looks great!

Case:
Hamond 1456RL1BKBU from mouser.com
Used dremmel to cut the screen holes after drilling the corners out. I don't have a friend with a CNC machine :)

Sourced pretty much everything else off aliexpress, I'll provide descriptions so hopefully a search will find the right things (in case my links don't work).
Switches: 1pcs SPST Momentary Soft Touch Push Button Stomp Foot Pedal Switch Electric Guitar Switch OFF-Momentary ON
Screens: 1.8" TFT SPI ST7735

Can provide full shopping list / breakdown (like DIN, TRS, dc sockets) if you do want comprehensive build breakdown.

Also I built a custom midi+power box - standard midi in/out + 9v in, 7 pin midi out. Made a custom cable so I can send input,output and power all through 1. I couldn't find good options to buy off the shelf in Australia, at least not at a reasonable price.. the box was probably the easiest part of the whole project (just a cheap plastic enclosure), but it's certainly painful trying to reliably solder a 7 pin midi cable.

Cable management inside the box was a bit of a nightmare - each screen is 8 wires, 1 is unique, the rest shared. But at 15 screens this gets messy pretty quickly.
 
Case:
Hamond 1456RL1BKBU from mouser.com
Used dremmel to cut the screen holes after drilling the corners out. I don't have a friend with a CNC machine :)

Sourced pretty much everything else off aliexpress, I'll provide descriptions so hopefully a search will find the right things (in case my links don't work).
Switches: 1pcs SPST Momentary Soft Touch Push Button Stomp Foot Pedal Switch Electric Guitar Switch OFF-Momentary ON
Screens: 1.8" TFT SPI ST7735

Can provide full shopping list / breakdown (like DIN, TRS, dc sockets) if you do want comprehensive build breakdown.

Also I built a custom midi+power box - standard midi in/out + 9v in, 7 pin midi out. Made a custom cable so I can send input,output and power all through 1. I couldn't find good options to buy off the shelf in Australia, at least not at a reasonable price.. the box was probably the easiest part of the whole project (just a cheap plastic enclosure), but it's certainly painful trying to reliably solder a 7 pin midi cable.

Cable management inside the box was a bit of a nightmare - each screen is 8 wires, 1 is unique, the rest shared. But at 15 screens this gets messy pretty quickly.
👍 This information is good enough for me. Thx! Well... maybe a little more info on your power-midi box.
 
I have fixed it for you. Removed all unwanted characters from the Constant Definitions
Sketch attached

Thanks a lot
the sketch was successfully uploaded, i will try the FC with the axe fx and let you know if everything is working smoothly.
is there any settings need to be adjusted in the i/o midi menu of the axe fx before connecting the FC ?
also is there any way of powering the FC via usb? , im not comfortable with using a 12 V DC power adapter.
 
Last edited:
that looks cool!! cant wait to build the binder folder version of this one with all the flashy screens.
when you have the time make your own thread with a step by step guide with code and everything.
i'm pretty sure everyone would love to try it.
I thought I'd post my version of this, inspiration from Piing and a few other places. Main difference is I have a screen per switch so ended up writing the code from scratch (using Tysonit's lib though for axe control). You can find it on github under user kmcgain -> Pedalboard (couldn't post a link).

There's still feature ideas that I'll add over time but I've got it to the point where it's stable and time to share. Some points of difference:
  • Display of scene names against switches
  • Effect bypassing + name display on switches
  • Multiple layouts + switching between them, for me layout 1 is about scenes, layout 2 for effects
  • Tap tempo with flashing LED on board

If anyone wants to go down this route I'm happy to help out although perhaps in a different thread to avoid confusion. This is 1 Arduino Due controlling it rather than the Mega.

If I had my time again I would probably go with a master display that's larger for things like preset detail and live tuner + individual displays for switches. I'll probably get some 3d printed screen surrounds as well to hide the rough screen cutouts.
View attachment 73297
View attachment 73298
 
@Piing when i connect the FC to the Axe FX II XL+ there's a signal going through but only the scene switches work (switch 1,2,3,4,6,7,8,9)
but the preset up and down switches does not work (switches 5 and 10) also the op 5 switches for tuner, record and play and undo do not work as well.
however, when i press switch 10 for (preset up) then press any of the top switches ( 11,12,13,14,15) the preset change 5 presets up.
another thing is that the LCD is on, but no characters are displayed.
 
Switches 5 and 10 are for moving a "bank" up and down. I call "bank" a group of 5 presets. Since you can only select 5 presets from the switches, that function jumps 5 presets up or down. You can see the definitions here:


Code:
// Switch 5.                         Bank Down
        case 4:
         //PresetNumb=PresetNumb-95;
         if (PresetNumb<5) PresetNumb=95; else if (PresetNumb=PresetNumb-5);
         flashPin( leds[currentSwitch], pedalActiveFlash );
         lcd.clear();lcd.setCursor(0,0); lcd.print(PresetNumb); lcd.print("-");lcd.print(PresetNumb+4);
         flashPin(LED5, 500);
         //Serial.println("Switch-5");
          break;


Code:
// Switch 10.                       Bank UP
        case 9:
         if (PresetNumb>94) PresetNumb=0; else if (PresetNumb=PresetNumb+5);
         flashPin( leds[currentSwitch], pedalActiveFlash );
         lcd.clear(); lcd.setCursor(0,0); lcd.print(PresetNumb); lcd.print("-");lcd.print(PresetNumb+4);
         flashPin(LED10, 500);
          //Serial.println("Switch-10 ");
          break;

That was convenient for me, but you can personalize all the switch functions as you like.

For the issue with the LCD, have you tried testing it with a simple "hello world" sketch?

Also verify that the connections are like this:
Code:
/* LCD definition
* lcd(RS, Enable, D4, D5, D6, D7, BL)
* KEY pin to analogl pin 0
*/
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
 
@Piing i tried the Hello World sketch in the examples of the aruino software, but nothing was displayed i even tried to adjust the contrast meter of the lcd but still nothing.
for the connections, i checked the code in the Axe controller sketch and they were as you mentioned above.

Code:
/* LCD definition
 * lcd(RS, Enable, D4, D5, D6, D7, BL)
 * KEY pin to analogl pin 0
 */
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
//LiquidCrystal lcd2(8, 10, 9, 4, 5, 6); //Strange characters on Lcd1 when defining lcd2. Pending debug

however, keep in mind that im using and I2C LCD with four pins only (GND,VCC,SDA,SCL)
 
I2C LCD has different pins. Make a search of your particular model, to find how it is connected and the library that you may need

https://www.instructables.com/How-to-Connect-I2C-Lcd-Display-to-Arduino-Uno/

@Piing THANKS, that helped a lot.
even though i have zero experience on how to code these things but i managed to make things work only for the Helloworld example.
at first i tried to upload the sketch in the link above with the included library "LiquidCrystal_I2C". and the LCD displayed the output in the Sketch.
then i checked the Helloworld example in the Arduino IDE and found that it calls a different LCD Library, so i switched the Library to "LiquidCrystal_I2C" and also had to amend the highlight part shown in in the attached screenshot which i think it has something to do with where the LCD rows and columns starts or maybe about the connections i dont know. anyway the Helloworld2 example worked on the LCD.
I didn't try anything with Axe control sketch yet, so do you think i only have to change the LCD library and leave everything as it is ?
Thanks again
Screen Shot 2020-10-26 at 8.47.14 PM.png
 
@Piing THANKS, that helped a lot.
even though i have zero experience on how to code these things but i managed to make things work only for the Helloworld example.
at first i tried to upload the sketch in the link above with the included library "LiquidCrystal_I2C". and the LCD displayed the output in the Sketch.
then i checked the Helloworld example in the Arduino IDE and found that it calls a different LCD Library, so i switched the Library to "LiquidCrystal_I2C" and also had to amend the highlight part shown in in the attached screenshot which i think it has something to do with where the LCD rows and columns starts or maybe about the connections i dont know. anyway the Helloworld2 example worked on the LCD.
I didn't try anything with Axe control sketch yet, so do you think i only have to change the LCD library and leave everything as it is ?
Thanks again
View attachment 74359

Congratulations on your first "Hello World"! You are on the right track

I remember my first "Hello World". It was a joy, after few days experimenting with libraries, pinouts and configurations.

Try replacing this:
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

With this:
LiquidCrystal_I2C lcd(0x27, 16, 2)

I am not sure if it would be necessary to modify the void setup(). You already have the lcd.begin(16, 2). At your example it is blank, but that is the default of 16 columns x 2 rows)

Try only with that first line
 
For those of you who may be interested BMC is now available and out of beta, BMC is an all in one midi controller library that doesnt require you to write code, it comes with a desktop editor to create a config file and to edit the behavior of buttons, pots, encoders, leds etc, BMC also has full fractal sync for the axe fx 2 and AX8, you can do things like change scenes, presets, xy/bypass blocks and even control block parameters, all is done via the editor app and all data is stored in eeprom

the library is open source and is available only for Teensy boards. Requires arduino and teensyduino.

To get the library go to
https://github.com/neroroxxx/BMC
 
Is there construction instructions? Sorry if I missed them

All Arduino constructions follow the same methodology, and this project is not different. You can refer to any of the many tutorials that are available. Just google "arduino tutorial"

  • Connect footswitches and LEDs to to digital inputs/outputs
  • Connect LCD display
  • Connect MIDI to TX/RX terminals
  • Upload the sketch.
That's all. As simple as that

I would suggest that you start connecting just one switch and one LED in a protoboard, like at this tutorial, to play with a simple sketch and get familiar with it. Although Anese directly grabbed the bull by the horns and started with the full construction 🤠
 
Last edited:
Once you start with Arduino, it can become a very interesting and useful hobby. Some of the other builds that I’ve made are a MIDI Bass Pedal, a Smart Card reader/writer to clone the card to access the door and lifts of my condo, a Particle Pollution (PM2.5) monitor, Temperature/Humidity Wi-Fi monitors…

Here is the PM2.5 monitor, with the reading in ug/m3 and a text indicating the hazard level
PM2.5 arduino.jpg

And a keyboard I made with some scrap switches, to test the program for the MIDI Bass pedal


18423139_10209195046133845_6974822044365293908_o.jpg

18489683_10209195044133795_220966044863901923_o.jpg
 
Last edited:
YES!! it's finally working. Thanks alot !!
I replaced the line as suggested, also i had to replace lcd.begin(16, 2) with lcd.begin( )
the only thing the i need to do now is rotate the LCD display by 180 degree. i know i can do that physically but that would mess the wire connections. so i have to do it by coding.

Congratulations on your first "Hello World"! You are on the right track

I remember my first "Hello World". It was a joy, after few days experimenting with libraries, pinouts and configurations.

Try replacing this:
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

With this:
LiquidCrystal_I2C lcd(0x27, 16, 2)

I am not sure if it would be necessary to modify the void setup(). You already have the lcd.begin(16, 2). At your example it is blank, but that is the default of 16 columns x 2 rows)

Try only with that first line
 
Back
Top Bottom