Nice! I know it’s been a while but have you documented your work anywhere?I am still 100% stoked about the library.
I still use my FBV into arduino to play my Axe3 every day. I can make this thing act exactly how I want it to act. I'm working on incorporating my 2nd FBV into my setup.
FC12 would be neato, but this gives me absolute control. I can choose at a granular level what every button does in every context.
I have 1200 lines of code in my thingy. I think tysonlt has half that in his library to do 10x the shit. He's the man.
Can you post your code? Hard to help otherwiseI have a few question
I registered connection call back and define function to response callback already , to get connected true or false. After call begin() i don't get callback connection.
I want to check connection and display connecting info on screen. But i don't get callback to check it
How i do it . Or i mistake something.
Thank you.
And i have a few request, i want to get effect name or effect name tag when fxid is not in current preset
I have fxid , want know effect name or tag only.
I haven't. But I do have the docs from the guys who figured out the FBV protocol and wiring.Nice! I know it’s been a while but have you documented your work anywhere?
For some reason the file looks corrupted and I'm not able to open it.I haven't. But I do have the docs from the guys who figured out the FBV protocol and wiring.
change the filetype to .xlsFor some reason the file looks corrupted and I'm not able to open it.
Can you post your code? Hard to help otherwise
void setup()
{
Serial.begin(115200);
pinMode(SwitchInput_Int_Pin, INPUT);
Axe_Setup();
}
void Axe_Setup()
{
Serial.println("- Axe System Setup -> Begin");
//register a callback so we know when preset details are available
Axe.registerConnectionStatusCallback(onConnection);
Axe.registerPresetChangingCallback(onPresetChanging);
Axe.registerPresetChangeCallback(onPresetChange);
Axe.registerSceneNameCallback(onSceneName);
Axe.registerSystemChangeCallback(onSystemChange);
Axe.registerConnectionStatusCallback(onConnection);
Axe.registerEffectsReceivedCallback(onEffectReceived);
Axe.setMidiChannel(midi_channel);
Axe.begin(Serial2);
Axe.setStartupDelay(1000);
Axe.requestFirmwareVersion();
Axe.fetchEffects(true);
//delay(500);
Axe.requestPresetDetails();
Serial.println("- Axe System Setup -> End");
}
void onConnection(const bool Connected)
{
Serial.println("\n+++++++++++Call Connection Change +++++++++++++\n\n");
connection = Connected;
Serial.println("\n+++++++++++End Call Connection Change +++++++++++++\n\n");
}
void onSystemChange()
{
}
void onPresetChange(AxePreset preset)
{
}
void onPresetChanging(const PresetNumber number)
{
}
void onSceneName(const SceneNumber number, const char* name, const byte length)
{
}
void onEffectReceived(PresetNumber number, AxePreset preset)
{
}
void loop()
{
Axe.update();
}
#include <AxeFxControl.h>
AxeSystem Axe;
midi_channel
. If you leave that off it will revert to OMNI.Plus:Is that the whole file? I don't see you including headers or declaring the Axe variable, like:
C++:#include <AxeFxControl.h> AxeSystem Axe;
Apart from that it looks ok, except I can't see where you've declaredmidi_channel
. If you leave that off it will revert to OMNI.
Try this example and see if that works: https://github.com/tysonlt/AxeFxControl/blob/main/examples/PresetDetails/PresetDetails.ino
If it's still not working I'd check how you've wired up Serial2.
#include <AxeFxControl.h>
#define SwitchInput_Int_Pin 14
AxeSystem Axe;
static byte midi_channel = 0;
bool connection = false;
void setup()
{
Serial.begin(115200);
pinMode(SwitchInput_Int_Pin, INPUT);
Axe_Setup();
}
void Axe_Setup()
{
Serial.println("- Axe System Setup -> Begin");
//register a callback so we know when preset details are available
Axe.registerConnectionStatusCallback(onConnection);
Axe.registerPresetChangingCallback(onPresetChanging);
Axe.registerPresetChangeCallback(onPresetChange);
Axe.registerSceneNameCallback(onSceneName);
Axe.registerSystemChangeCallback(onSystemChange);
Axe.registerConnectionStatusCallback(onConnection);
Axe.registerEffectsReceivedCallback(onEffectReceived);
//Axe.setMidiChannel(midi_channel);
Axe.begin(Serial2);
//Axe.setStartupDelay(1000);
//when i comment this while loop to skip this loop it working. but when i put this loop it not pass to next code. because connection it false not change to true
while(1)
{
if(connection)
{
break;
}
}
Axe.requestFirmwareVersion();
Axe.fetchEffects(true);
//delay(500);
Axe.requestPresetDetails();
Serial.println("- Axe System Setup -> End");
}
void onConnection(const bool Connected)
{
Serial.println("\n+++++++++++Call Connection Change +++++++++++++\n\n");
connection = Connected;
Serial.println("\n+++++++++++End Call Connection Change +++++++++++++\n\n");
}
void onSystemChange()
{
}
void onPresetChange(AxePreset preset)
{
}
void onPresetChanging(const PresetNumber number)
{
}
void onSceneName(const SceneNumber number, const char* name, const byte length)
{
}
void onEffectReceived(PresetNumber number, AxePreset preset)
{
}
void loop()
{
//Input switch part
.
.
.
Axe.update();
}
Use the bodmer eSPI libriary in combination with a Teensy and a big screen tft (or 15 screens ) and it will work perfectly with this libriary. Very little limitations what is possible to show on your screen. If you know arduino and CPP, your good to go.Hi tysonlt, I was told by Axelman8 about your very nice project.
Please have a look on my wish here:
https://forum.fractalaudio.com/thre...geting-setlists-presets-targeting-too.205057/
Since I don't know whether and when FAS will ever do it (hope soon),
the idea could be to use your code to get from FM9 the bank No. I am targeting with INC/DEC buttons (with no auto preset load),
and show it on an external display,
in order to be sure "where I am" before selecting the final preset inside that bank.
Currently FM9 show targeted bank with little fonts (I added a lens to make it bigger... ):
View attachment 139736
I already have an Arduino board connected to FM9 (inside the alluminum bar),
and I can even drive the LED display to show the BANK:
View attachment 139750
That Arduino can send and receive already MIDI comands to/from FM9, it also "merges" (stupid merge...) internal MIDI with external one.
Do you think it's possible ?
Thanks!Hi tysonlt, I was told by Axelman8 about your very nice project.
the idea could be to use your code to get from FM9 the bank No. I am targeting with INC/DEC buttons (with no auto preset load),
and show it on an external display,
in order to be sure "where I am" before selecting the final preset inside that bank.
Then you're halfway there. The library in this thread will help you get the preset names, which is really the only thing missing.That Arduino can send and receive already MIDI comands to/from FM9, it also "merges" (stupid merge...) internal MIDI with external one.
Yep, with a bit of sneaky coding. You can know the current preset number, then on your device you just ask for all preset names in that range (ie 20-29 if we're on preset 23), then bank up = ++10, load all names, etc. Then you just commit by sending a preset change command.Do you think it's possible ?
Hey there @tysonltNew version 1.4 adds the bank size change and the ability to listen for all present names. Thanks everyone for helping make it better!
https://github.com/tysonlt/AxeFxControl/releases/tag/v1.4
Hmm, I really need to set up a new midi rig so I can check it out.Hey there @tysonlt
Finally I got the time to implement V1.4
Unfortunately the function to listen to all present names doesn't work. At least not for me. I replaces the libriary with V1.4.
what happens:
When on preset 1, it stops after copying preset 0
When on preset 1023, it runs all preset names up till 1022.
Any ideas?
EDIT:
LOL, what it does, it gets all even presetnumber names, all uneven presetnumbers the names are empty.
Cheers
Its working when 1023 is selected. But.... Would be awesome if it would work strait out of the boxHmm, I really need to set up a new midi rig so I can check it out.
Yeah it should work, it will be something stupid I’ve done… I’ll try to find my arduino stuff after the move, it’s in a box somewhereIts working when 1023 is selected. But.... Would be awesome if it would work strait out of the box