• We would like to remind our members that this is a privately owned, run and supported forum. You are here at the invitation and discretion of the owners. As such, rules and standards of conduct will be applied that help keep this forum functioning as the owners desire. These include, but are not limited to, removing content and even access to the forum.

    Please give yourself a refresher on the forum rules you agreed to follow when you signed up.

Multi-Screen DIY controller

Axelman8

Experienced
Hey there

== Friday update ==

While playing guitar on the AxeFxIII I can easily forget about time, space and almost even to breath ... I really love it when I hit the zone, all warmed up and my hands are creating the sounds that my head has in mind.

Because of this state of mind, I forget about the wife, kids, job, bills etc. For this I found a solution to help me not to forget all these things ;)

I build in a DS3231 I2C active digital clock unit. It is very cheap and has a battery to hold the actual time month and year and some other stuff. really cool add-on for € 2,-

DS3231.jpg

For the digital clock I implemented the code in the V4.3 build, so now the 16 * 2 LCD is showing digital time on the bottom row.
Before i had several output written on the bottom row, but all that wasn't really necessary. The clock is a nice add-on to the screen. It updates only on every new second and does not slow down the peddleboard at all.

Using the timer to do stuff:
As for giving me a notice on a specific time, lets say 00:00, the code can do an action like load a next page that gives me a notice on each screen or something. Maby blinking screens or whatever lol, is it really a cool gadget to implement.
This add-on part i still have to develop but its a sure thing i will do. DIY is the best to be in control :)

20210618_131911.jpg




@Piing waiting for that sneak preview of your build dude :)



Have a great weekend all
Cheers
 
Last edited:

Piing

Axe-Master
@Piing waiting for that sneak preview of your build dude :)
Not much progress. At these pictures I note that it is already collecting dust 😅
02.jpg
01.jpg

I have space for a Nextion 3.5" touch display. But cutting the box now would be a challenge. Maybe I will install it outside in a 3D printed bezel, like I did at my previous built with a 4,3" Nextion. The external mount has the advantage that you can re-program it without opening the box (programming the Nextion requires to insert a micro SD card)
I hope that I can see it working soon
 

Axelman8

Experienced
Hey there @prongs_386

Quite some time that this thread had any update, but i have been developing on my programming in the meantime. (Just learning little features day by day and how to use them)

Just lately I have updated my program with some of your advice by using a loop for screen buildup. My goal is to reprogram the entire software so in the future i can create a Java GUI editor to manage the peddleboard buttons and screens instead of hard coding it. Long way to go, but sure is interesting getting there.

Using the loop functionality in the code brings some delay in the buildup of the screens (like very very little delay) but that points to me that the arduino does take some constructiontime with the read/write actions, longer than just typing out every single line without read/write but just write actions. (Like in my program)

To do something about this delay i am searching for memory management on the due and i found something very interesting. Thought of sharing it here, maby it is of any use for you also.

https://github.com/delsauce/ArduinoDueParallel/blob/master/Parallel.cpp

The library usage describes the folowing:
The library does allow connection to some of the lower resolution LCD controllers that used index addressing and can speed up read/write times considerably.
I have not tried this to implement at all but will get to it next week I hope.

The goal is to use this lib to speed things up with the buildup of the 15 TFT screens.. even to be a nanosecond faster is progress in my book, but hope for better results ;)

Cheers
 
That's good to hear you're iterating and still improving it.

Definitely keen to see if you can get that library to work.

In my solution I had a json file hold the configuration for the layouts, but I didn't implement reading it from an sd card or anything like that so I still need to compile and upload when changing a layout. Could be interesting to play with adding an SPI usb serial interface so you could plug into the computer to talk directly to your editor software. I guess you'd need to add some kind of non-volatile storage component in as well to keep the config file on.
 

Axelman8

Experienced
Hey there @prongs_386

I had the idea to save a config file on a external sd card and use that config as base for all screen/button settings and variables. The GUI interface will compile the config file and then it is just a matter of putting the file on the sd card.

The config image will only be read / loaded at startup and the global variables could be in the arduino code, but maby the usb works fast so the globals could be on the SD as well.

It is a easy plan.. hope to get it to work.
First i will get the program ready so it is configurable. Still working on that one. Hope that the arduino's memory can handle it.

To be able to see what amount of memory is used and what remains, i am searching for a solution to implement and show the memory on the 16x2 i2c screen somehow.

It is a great project. Once getting started the possibilitys seem endless...
The solution is allready there, Just need to find it and implement ;)

Cheers
 
Last edited:

Axelman8

Experienced
Hey there,

=== Friday update ====

Free memory is available to print on a screen. I added it to the 16*2 on the top row so i can see what every page / function is using in the amount of RAM memory (bytes)

To make this possible, I make use of this libriary: https://github.com/mpflaga/Arduino-MemoryFree

In my program i only added the folowing:
#include <MemoryFree.h>;

/*=========================================================
16*2 LCD text: RAM MEMORY CALCULATION
=========================================================*/
void availablememory()
{
lcd.setCursor(0, 0); lcd.print("Free RAM: "); lcd.print(freeMemory());
}


In the various screens i call the function for that screen:
void preset_LCD_text() // "preset" could be "scene", "effect", "numbers"
{
lcd.clear(); availablememory(); digitalClockDisplay();
}

20210917_094030.jpg

I added this just for testing.. it gives me the info i need that the program will be stable when adding a lot of new variables.


PLUS:
I followed this guide to manually create a file that shows what the global variables are using in bytes:
https://forum.arduino.cc/t/arduino-due-ram-usage-information/642555
During compiling you get an additional line telling what amount off bytes is used by the global variables.

Cheers and good weekend
 

Axelman8

Experienced
Hey there @prongs_386

I got a question:
Today i finally came to porting your tuner in my center screen. Man this tuner is looking awesome and is working pretty good. I just wonder how you got it to work on the full width of the screen. My setup is an exact copy of your setup, but somehow the screen width is 128 instead of 160, so the tuner on the screen is cut of on 1/6th of the screen. It is not a major problem, it still looks amazing, but i cannot figure out how to correct it.

Screenshot_20211101-001120_Gallery.jpg


The setup.h has the width and height mixed up, but changing this will screw up all screens.
Today i changed allmost every configuration I could find in the bodmer libriary and I am working on this all day but did not find the solution.

It's working so that is a great step forward, but still curious how you did it.



Cheers
 

Axelman8

Experienced
Hey there @prongs_386

I fixed the screen in a very dirty way, but i got my goal eventually.
I just write a second fillRect outside of the tunerNoteCanvas->fillRect(0, tft_h-53,160, 2, TFT_YELLOW);
This one goes to the end of the screen and is not updated so will stay there: tft.fillRect(0, tft_h-53,160, 2, TFT_YELLOW);

Also, i try to develop some other effects in the Sprite and placed a pyramid instead of the circle. It works the same way as the circle, only now it show a pyramid. Great stuff programming with this Sprite option, I really like it :)

20211101_224725.jpg

20211101_224914.jpg

I will add this tuner with the following options to my program:
  • Show tuner in screen 8: Yes / No
  • Show circle as tuner: Yes / No
  • If circle is No, then automaticly show pyramid as tuner.
I am designing the config so that even when the 3 extra buttons and the extra 16*2 lcd are not available, the peddleboard will still work properly.

Anyway, bunch of new stuff to learn from your original peddleboard program :)

Cheers
 
Nice work! Well done on getting around it.

If there was any performance issue with the extra draw you've added I would:
  • find all screen_h and screen_w in the tuner code and change to tuner_screen_h and tuner_screen_h
  • define tuner_screen_h and tuner_screen_w to be 128, 160

Then you'll just avoid messing up the rest of your code and it should draw correctly. Not sure there's anything going on with the bodmer library, it'll just be to do with the rotation applied to the screen and I'm guessing your other draw logic has a different rotation to mine.
 

Axelman8

Experienced
Hey there @prongs_386

Your solution is simple, will try that thnx. Took me a loooooong time trying to get this function to work properly. This workaround is a good one for my learning curve.
The Sprite option is cool, gives me idea's to add to my program Because screen updating can be done more efficiently and way faster than the standard screen buildup. It does take +/- 25K bites of RAM memory for the tuner functionality only, so i will have to empty the memory Sprite uses after each Sprite function ends.

Yesterday I had a go with changing my presetUp and presetDown screens. I changed the text, so now it shows the next/previous presetNumber and presetName in that screen. That got me busy for a while, because my program design did not let me re-use existing variables without destroying other pedalboard output.
Now I understand that my program is created bit-by-bit and not easy adjustable, one for the learning curve too 😅.

Have a great weekend
Cheers
 
Last edited:

Axelman8

Experienced
Hey there

Today got around to finish some improvements on my project for the peddle board.

  1. Latest improvement is the MKII support up to 1024 presets (0-1023) and import of 1024 presetnames. Hopefully Santa will have the TURBO under the Christmas tree this year so this will be great to have already whoaaaaaaaa :)
  2. Tuner ported from the official release from @prongs_386 and placed it on the center-screen and is working perfectly. Option to choose for a circle or pyramid tuner symbol in the configuration ...... Extra fun to have.
  3. Preset Up / Down screens are showing previous and next preset number and preset name in the screens. Why not ;)
20211110_172650.jpg


Next on the menu is to create a GUI to make it more user friendly to adjust screen placements and colors for the screens. The software is adjusted so now it is possible for a GUI configuration.
SD support is also on the menu: With an SD card, flashing on the Arduino is not needed when changing configurations or updating preset names. Flashing new firmware will be limited to using a .hex file so no troubles with Arduino IDE.


@prongs_386
The software is also usable with 15 buttons / screens configuration. If you want to try it out, it's possible ;)

Cheers all
Stay safe
 

Axelman8

Experienced
Hey there @prongs_386 how are you doing?

These days i have been exploring the options of the sprite in the bodmer library. It got me developing some new flash options for my peddleboard (Man I love DIY)

The program gives the ability to change the coloring in the screens and also of the sprite, nice to see other options / versions.
These are .gif so it doesnt sync up, but it works very good.

Cheers 🍻

20220222_163749_1.gif

20220222_163136_1.gif
 

Attachments

  • 20220222_163749_1.gif
    20220222_163749_1.gif
    644.4 KB · Views: 2
Hey that's awesome.

I kind of got into consumer mode and now just use it rather than tweak it further although definitely more that can be done. Work overtook things a bit to be honest.

I have been tinkering with LoRa and ESP32 with things like garage door controllers, fun but not as much as this project.
 

Axelman8

Experienced
Hey there

Thats good to hear you are still using the peddleboard. I would like to change the enclosure one day, but maby build a new one like @Piing and get the screens up all the way to the surface. Definitely going to explore the use of a "custom" pcb to connect the screens.

Your reply got me triggered haha, LoRa <- had no clue what that i, but now I Do 😀
ESP32 that one i knew and the specs are amazing... I think you just got me started on a new journey/quest sir lol.

Cheers 🍻
 

Axelman8

Experienced
Hey there @prongs_386

I am going to build a new peddleboard, new screens , new switches and use a new microcontroller. This time I will use the Teensy 4.1

Seeing the specs of the 4.1 , this will be a huge step forward.

Processor benchmark:
coremark_barchart_t41_small.png

Cool addition about the teensy 4.1: it should work with the same .ino program as the Due
  1. Build in microSD slot
  2. Build in Clock
  3. Ethernet PHY
  4. USB-hostport

Now the next thing is have temperature control. I guess this time I have to make a box for the controller that has airflow and a temperature control like a fan. The Arduino due didnt need that.

This build will have much less soldering as I am going to use daisy chain ribbon and connectors for the screens this time.

The build will start next month when the items arrive. The Teensy will drop in this week so I can start exploring right away.


Cheers
 
Last edited:
Nice, definitely keen to hear how this goes but looks like you should have no trouble using this board.

It would be interesting to see if you could get python working on this as it would make development a lot easier!
 
Top Bottom