Dual oled screens + more

Gotcha. If the multiplexer works, I may write up a “how-to” here for anyone else that wants to use the 128x32 oleds in this configuration…The multiplexer board itself isnt much larger than the proffieboard and may be able to fit into a saber install… I will know more and test on Wednesday. Again, I will post my results here then.
Thank you for all of your quick replies and knowledge!

I looked at one multiplexer, and it requres you to select which bus to send on before sending, each time you send. This would mean adding some code in ProffieOS to do that part. Not sure if there are other multiplexers that work differently though.

I was looking at this one… https://www.amazon.com/gp/product/B06XXG5G3L/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

so maybe instead of a multiplexer… I need to hunt down a screen that can change addresses then… looks like the 128x32 screens are not possible with this project :laughing:

That one seems to be more or less identical to the one I was looking at:

A screen where the address can be changed would make things easier.

So, according to the SSD1306 data sheet, there is a pin called D/C which specifies the last bit in the address, (so either 0x3c or 0x3d). However, looking the wiring from this product on amazon:

https://www.amazon.com/Display-SSD1306-3-3V-5V-Raspberry-ESP8266/dp/B09YY4RD26?th=1

It would seem that the D/C signal isn’t exposed on the flexible PCB edge. If that is the case for all of them, then finding one with a changeable address is going to be difficult.

Yes this is what I initially came across when I first started this thread. I was, more or less, wondering if there was a way to assign another screen to open available pins. However, through the conversations we are having, doing so would require you to write in some code in which wouldn’t be practical since the feature I am asking ( for saber sized oleds ) isn’t being asked for in a broad sense.
What would be more practical is to ( for blasters ) use an appropriate screen that has readdressing capable and for ( sabers ) wait until OS8 to use the TFT display as per your other thread as so to not overload you or continue to have you use valuable time in an already (over) loaded environment lol.
As of right now, I have two screens working , although they are both displaying the same thing, I could use them to do some general purpose animations to suit my project. :smiley:
Many many thanks for your insight and time!

I did get this error compiling with the latest including the CONFIG BOTTOM

error: conflicting declaration 'StandardDisplayController<128, long unsigned int, ByteArray<65, 47> > display_controller'
   52 | StandardDisplayController<128, uint32_t, STRTYPE("A/")> display_controller;

any ideas ?

Did you use ENABLE_SSD1306 or INCLUDE_SSD1306?
(The first one declares a display controller in ProffieOS.ino, which would cause a conflict.)

gotcha… I did use Enable. Let me switch it to include and try again…

ok here is my test config. I switched it from ENABLE to INCLUDE

#ifdef CONFIG_TOP
#include "proffieboard_v2_config.h"
#define NUM_BLADES 2
#define NUM_BUTTONS 1
#define VOLUME 1700
const unsigned int maxLedsPerStrip = 144;
#define CLASH_THRESHOLD_G 3.0
#define ENABLE_AUDIO
#define ENABLE_MOTION
#define ENABLE_WS2811
#define ENABLE_SD
#define ENABLE_SERIAL
#define INCLUDE_SSD1306
#define COLOR_CHANGE_DIRECT
#define DISABLE_DIAGNOSTIC_COMMANDS
#define IDLE_OFF_TIME 60*5*1000
#define SAVE_STATE
#define SPEAK_BLADE_ID
#endif


#ifdef CONFIG_PROP
#include "../props/saber_sa22c_buttons.h"
#endif


#ifdef CONFIG_PRESETS
Preset presets[] = {
   
{ "EE3burst", "tracks/Ascension.wav",
StylePtr<Layers<RgbArg<BASE_COLOR_ARG,Rgb<0,0,0>>,AlphaL<RgbArg<EMITTER_COLOR_ARG,Rgb<255,97,0>>,SmoothStep<IntArg<EMITTER_SIZE_ARG,-662>,Int<-6000>>>,TransitionEffectL<TrConcat<TrJoin<TrDelay<100>,TrFade<300>>,Pulsing<RgbArg<SWING_COLOR_ARG,Rgb<50,50,50>>,Mix<Int<16384>,Black,RgbArg<SWING_COLOR_ARG,Rgb<50,50,50>>>,3000>,TrFade<300>>,EFFECT_FORCE>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<0>>,TrInstant>,Stripes<5000,-2500,RgbArg<RETRACTION_COLOR_ARG,Rgb<50,50,50>>,Mix<Int<7710>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<50,50,50>>>,Mix<Int<3855>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<50,50,50>>>>,TrFade<800>>,EFFECT_RETRACTION>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,97,0>>,Scale<WavLen<>,Int<100>,Int<400>>,Int<100>,Scale<WavLen<>,Int<100>,Int<400>>,Scale<BladeAngle<>,Int<1>,Int<1>>>,EFFECT_BLAST>,TransitionEffectL<TrConcat<TrJoin<TrDelay<30>,TrInstant>,RgbArg<CLASH_COLOR_ARG,Rgb<255,97,0>>,TrFade<300>>,EFFECT_CLASH>,LockupTrL<TransitionEffect<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrJoin<TrDelay<8000>,TrInstant>,TrFade<3000>,EFFECT_LOCKUP_BEGIN>,TrConcat<TrJoin<TrDelay<50>,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrFade<300>>,TrConcat<TrInstant,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<0,0,0>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<0,0,0>>,Int<300>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrFade<4000>>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL<AlphaL<Remap<Scale<RampF,Int<65536>,Int<0>>,StaticFire<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>,Mix<TwistAngle<>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>,RotateColorsX<Int<3000>,Mix<Int<12000>,Black,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>>,0,3,5,3000,10>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrConcat<TrWipeIn<100>,AlphaL<RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrJoin<TrDelay<4000>,TrFade<300>>,AlphaL<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrFade<4000>>,TrWipe<200>,SaberBase::LOCKUP_MELT>,InOutTrL<TrInstant,TrFadeX<RetractionTime<0>>,Black>,TransitionEffectL<TrConcat<TrFadeX<Mult<Int<8192>,WavLen<EFFECT_PREON>>>,AlphaL<HumpFlickerL<RgbArg<PREON_COLOR_ARG,Rgb<255,97,0>>,10>,SmoothStep<IntArg<PREON_SIZE_ARG,-1781>,Int<-4000>>>,TrFadeX<Mult<Int<8192>,WavLen<EFFECT_PREON>>>,AlphaL<HumpFlickerL<RgbArg<PREON_COLOR_ARG,Rgb<255,97,0>>,15>,SmoothStep<Sum<Int<2000>,IntArg<PREON_SIZE_ARG,-1781>>,Int<-4000>>>,TrFadeX<Mult<Int<8192>,WavLen<EFFECT_PREON>>>,AlphaL<HumpFlickerL<RgbArg<PREON_COLOR_ARG,Rgb<255,97,0>>,20>,SmoothStep<Sum<Int<4000>,IntArg<PREON_SIZE_ARG,-1781>>,Int<-4000>>>,TrBoingX<Mult<Int<8192>,WavLen<EFFECT_PREON>>,3>>,EFFECT_PREON>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,Bump<BatteryLevel,Int<10000>>>,TrFade<300>>,EFFECT_BATTERY_LEVEL>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<IntArg<EMITTER_SIZE_ARG,-662>,Int<-4000>>>,TrFade<300>>,EFFECT_BOOT>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<IntArg<EMITTER_SIZE_ARG,-662>,Int<-4000>>>,TrFade<300>>,EFFECT_NEWFONT>>>(),

StylePtr<Layers<TransitionLoop<Black,TrConcat<TrWipe<200>,RgbArg<BASE_COLOR_ARG,Rgb<255,68,0>>,TrWipe<200>>>,InOutTrL<TrInstant,TrInstant,TransitionLoop<Black,TrConcat<TrWipeIn<1000>,RgbArg<OFF_COLOR_ARG,Rgb<255,68,0>>,TrWipeIn<1000>>>>,TransitionEffectL<TrConcat<TrInstant,AlphaL<Mix<Trigger<EFFECT_PREON,Mult<Int<16384>,WavLen<EFFECT_PREON>>,Mult<Int<10922>,WavLen<EFFECT_PREON>>,Mult<Int<5462>,WavLen<EFFECT_PREON>>>,BrownNoiseFlicker<Black,RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>,100>,RandomPerLEDFlicker<RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>,Rgb<50,50,50>>,BrownNoiseFlicker<Mix<NoisySoundLevel,RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>,RotateColorsX<Int<4000>,RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>>>,White,50>>,SmoothStep<Scale<NoisySoundLevel,Int<-10000>,Int<36000>>,Int<-4000>>>,TrDelayX<WavLen<EFFECT_PREON>>>,EFFECT_PREON>>>(), "EE3"},

};


BladeConfig blades[] = {
 { 0, WS281XBladePtr<132, bladePin, Color8::GRB, PowerPINS<bladePowerPin2> >(),
      WS281XBladePtr<3,   blade4Pin, Color8::GRB, PowerPINS<bladePowerPin5> >()
 , CONFIGARRAY(presets) }
};
#endif

#ifdef CONFIG_BUTTONS
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");

#endif

#ifdef CONFIG_BOTTOM
StandardDisplayController<128, uint32_t, STRTYPE("A/")> display_controller;
SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display(&display_controller);

StandardDisplayController<128, uint32_t, STRTYPE("B/")> display_controller2;
SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display2(&display_controller2, 0x3D);
#endif

and here is the error

sketch/config/testamban.h:52:32: error: 'DISPLAY_POWER_PINS' was not declared in this scope
   52 | SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display(&display_controller);
      |                                ^~~~~~~~~~~~~~~~~~
sketch/config/testamban.h:52:50: error: template argument 3 is invalid
   52 | SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display(&display_controller);
      |                                                  ^
sketch/config/testamban.h:52:60: error: invalid conversion from 'StandardDisplayController<128, long unsigned int, ByteArray<65, 47> >*' to 'int' [-fpermissive]
   52 | SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display(&display_controller);
      |                                                            ^~~~~~~~~~~~~~~~~~~
      |                                                            |
      |                                                            StandardDisplayController<128, long unsigned int, ByteArray<65, 47> >*
sketch/config/testamban.h:55:32: error: 'DISPLAY_POWER_PINS' was not declared in this scope
   55 | SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display2(&display_controller2, 0x3D);
      |                                ^~~~~~~~~~~~~~~~~~
sketch/config/testamban.h:55:50: error: template argument 3 is invalid
   55 | SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display2(&display_controller2, 0x3D);
      |                                                  ^
sketch/config/testamban.h:55:87: error: expression list treated as compound expression in initializer [-fpermissive]
   55 | SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display2(&display_controller2, 0x3D);
      |                                                                                       ^
exit status 1
Error compiling for board Proffieboard V2.

Oh, I think you can just remove the DISPLAY_POWER_PINS (and the comma that precedes it.)

for some reason it didnt show …

#ifdef CONFIG_TOP
#include "proffieboard_v2_config.h"
#define NUM_BLADES 2
#define NUM_BUTTONS 1
#define VOLUME 1700
const unsigned int maxLedsPerStrip = 144;
#define CLASH_THRESHOLD_G 3.0
#define ENABLE_AUDIO
#define ENABLE_MOTION
#define ENABLE_WS2811
#define ENABLE_SD
#define ENABLE_SERIAL
#define INCLUDE_SSD1306
#define COLOR_CHANGE_DIRECT
#define DISABLE_DIAGNOSTIC_COMMANDS
#define IDLE_OFF_TIME 60*5*1000
#define SAVE_STATE
#define SPEAK_BLADE_ID
#endif


#ifdef CONFIG_PROP
#include "../props/saber_sa22c_buttons.h"
#endif


#ifdef CONFIG_PRESETS
Preset presets[] = {
   
{ "EE3burst", "tracks/Ascension.wav",
StylePtr<Layers<RgbArg<BASE_COLOR_ARG,Rgb<0,0,0>>,AlphaL<RgbArg<EMITTER_COLOR_ARG,Rgb<255,97,0>>,SmoothStep<IntArg<EMITTER_SIZE_ARG,-662>,Int<-6000>>>,TransitionEffectL<TrConcat<TrJoin<TrDelay<100>,TrFade<300>>,Pulsing<RgbArg<SWING_COLOR_ARG,Rgb<50,50,50>>,Mix<Int<16384>,Black,RgbArg<SWING_COLOR_ARG,Rgb<50,50,50>>>,3000>,TrFade<300>>,EFFECT_FORCE>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<0>>,TrInstant>,Stripes<5000,-2500,RgbArg<RETRACTION_COLOR_ARG,Rgb<50,50,50>>,Mix<Int<7710>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<50,50,50>>>,Mix<Int<3855>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<50,50,50>>>>,TrFade<800>>,EFFECT_RETRACTION>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,97,0>>,Scale<WavLen<>,Int<100>,Int<400>>,Int<100>,Scale<WavLen<>,Int<100>,Int<400>>,Scale<BladeAngle<>,Int<1>,Int<1>>>,EFFECT_BLAST>,TransitionEffectL<TrConcat<TrJoin<TrDelay<30>,TrInstant>,RgbArg<CLASH_COLOR_ARG,Rgb<255,97,0>>,TrFade<300>>,EFFECT_CLASH>,LockupTrL<TransitionEffect<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrJoin<TrDelay<8000>,TrInstant>,TrFade<3000>,EFFECT_LOCKUP_BEGIN>,TrConcat<TrJoin<TrDelay<50>,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrFade<300>>,TrConcat<TrInstant,RgbArg<LOCKUP_COLOR_ARG,Rgb<0,0,0>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<0,0,0>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<0,0,0>>,Int<300>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrFade<4000>>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL<AlphaL<Remap<Scale<RampF,Int<65536>,Int<0>>,StaticFire<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>,Mix<TwistAngle<>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>,RotateColorsX<Int<3000>,Mix<Int<12000>,Black,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>>,0,3,5,3000,10>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrConcat<TrWipeIn<100>,AlphaL<RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrJoin<TrDelay<4000>,TrFade<300>>,AlphaL<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrFade<4000>>,TrWipe<200>,SaberBase::LOCKUP_MELT>,InOutTrL<TrInstant,TrFadeX<RetractionTime<0>>,Black>,TransitionEffectL<TrConcat<TrFadeX<Mult<Int<8192>,WavLen<EFFECT_PREON>>>,AlphaL<HumpFlickerL<RgbArg<PREON_COLOR_ARG,Rgb<255,97,0>>,10>,SmoothStep<IntArg<PREON_SIZE_ARG,-1781>,Int<-4000>>>,TrFadeX<Mult<Int<8192>,WavLen<EFFECT_PREON>>>,AlphaL<HumpFlickerL<RgbArg<PREON_COLOR_ARG,Rgb<255,97,0>>,15>,SmoothStep<Sum<Int<2000>,IntArg<PREON_SIZE_ARG,-1781>>,Int<-4000>>>,TrFadeX<Mult<Int<8192>,WavLen<EFFECT_PREON>>>,AlphaL<HumpFlickerL<RgbArg<PREON_COLOR_ARG,Rgb<255,97,0>>,20>,SmoothStep<Sum<Int<4000>,IntArg<PREON_SIZE_ARG,-1781>>,Int<-4000>>>,TrBoingX<Mult<Int<8192>,WavLen<EFFECT_PREON>>,3>>,EFFECT_PREON>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,Bump<BatteryLevel,Int<10000>>>,TrFade<300>>,EFFECT_BATTERY_LEVEL>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<IntArg<EMITTER_SIZE_ARG,-662>,Int<-4000>>>,TrFade<300>>,EFFECT_BOOT>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<IntArg<EMITTER_SIZE_ARG,-662>,Int<-4000>>>,TrFade<300>>,EFFECT_NEWFONT>>>(),

StylePtr<Layers<TransitionLoop<Black,TrConcat<TrWipe<200>,RgbArg<BASE_COLOR_ARG,Rgb<255,68,0>>,TrWipe<200>>>,InOutTrL<TrInstant,TrInstant,TransitionLoop<Black,TrConcat<TrWipeIn<1000>,RgbArg<OFF_COLOR_ARG,Rgb<255,68,0>>,TrWipeIn<1000>>>>,TransitionEffectL<TrConcat<TrInstant,AlphaL<Mix<Trigger<EFFECT_PREON,Mult<Int<16384>,WavLen<EFFECT_PREON>>,Mult<Int<10922>,WavLen<EFFECT_PREON>>,Mult<Int<5462>,WavLen<EFFECT_PREON>>>,BrownNoiseFlicker<Black,RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>,100>,RandomPerLEDFlicker<RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>,Rgb<50,50,50>>,BrownNoiseFlicker<Mix<NoisySoundLevel,RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>,RotateColorsX<Int<4000>,RgbArg<PREON_COLOR_ARG,Rgb<255,255,255>>>>,White,50>>,SmoothStep<Scale<NoisySoundLevel,Int<-10000>,Int<36000>>,Int<-4000>>>,TrDelayX<WavLen<EFFECT_PREON>>>,EFFECT_PREON>>>(), "EE3"},

};


BladeConfig blades[] = {
 { 0, WS281XBladePtr<132, bladePin, Color8::GRB, PowerPINS<bladePowerPin2> >(),
      WS281XBladePtr<3,   blade4Pin, Color8::GRB, PowerPINS<bladePowerPin5> >()
 , CONFIGARRAY(presets) }
};
#endif

#ifdef CONFIG_BUTTONS
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");

#endif

#ifdef CONFIG_BOTTOM
StandardDisplayController<128, uint32_t, STRTYPE("A/")> display_controller;
SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display(&display_controller);

StandardDisplayController<128, uint32_t, STRTYPE("B/")> display_controller2;
SSD1306Template<128, uint32_t, DISPLAY_POWER_PINS> display2(&display_controller2, 0x3D);
#endif

ok so this?

#ifdef CONFIG_BOTTOM
StandardDisplayController<128, uint32_t, STRTYPE("A/")> display_controller;
SSD1306Template<128, uint32_t> display(&display_controller);

StandardDisplayController<128, uint32_t, STRTYPE("B/")> display_controller2;
SSD1306Template<128, uint32_t> display2(&display_controller2, 0x3D);
#endif

Indubitably

:laughing: Fantastic word! HA!

Posts have to be 10 characters or longer… :slight_smile:

Compiled and uploaded perfectly. Thank you!
I do have a question about the A and B folders. are the images in there random? Or do I need to define the names ( on.bpm, boot.bmp, hum.bmp, etc ) Additionally, is it expected to now move all bmps to either of the two folders ( per font) ?

The files will need to be moved/copied to A, B or both (inside the font folder).
Other than that, they will work exactly the same, using the same filenames etc.

1 Like

Works beautifully. I cant thank you enough. How does one buy you a coffee? :smiley:

I generally ask people to pay it forward, meaning help someone else, document something, or help with testing. There is always stuff to do.
(And I don’t drink coffee.)