No announcement yet.

Using the uLCD-90DCT to navigate a large/multi-level list

  • Filter
  • Time
  • Show
Clear All
new posts

  • Using the uLCD-90DCT to navigate a large/multi-level list


    My plan is to use the ULCD-90DCT display as a touch panel to configure MIDI sound modules which normally consists of multiple sound banks (woodwind, strings piano, etc), and then sound patches per bank (~128 different instruments per bank). The patches would be assigned to MIDI channels and eventually be stored into presets and songs. We could use a repeating pattern, as you will notice with the 16 Winbuttons below. However, the captions would have to be dynamically assigned to reflect sound banks, patch list, presets, etc.

    I assumed that the button caption is an attribute that I can set and overwrite with a Teensy via the serial port, but from what I see tonight, 'caption' is available in the IDE only which leaves me with a challenge.

    I am new to 4D displays, and I see references to dynamic strings, inherent buttons, etc. but am now wondering if there is a good solution, or what the option would be to dynamically generate a list read from SD card on the Teensy, and sending captions for 16 buttons (or e.g. strings on top of an image or button) per page. I have no problem using multiple forms for the categories of functionality, but of course predefining objects for >5000 sounds from a sound module is not an option. The Teensy would read and track from the SD card, and forward 16 patch names at a time as we page through.

    Of course I used Visi Genie for a quick start. Would one of the other options (Serial or Visi) that requires more coding enable me to do the above?

    This display will also be used for real-time keyboard plan and configuration changes along with hardware encoders and switches.

    Open to alternatives and welcome any suggestions you may have.

    Appreciate your advice.


    Click image for larger version  Name:	SoundModuleMenu.png Views:	0 Size:	28.2 KB ID:	73551
    Last edited by aminnie; 9 September 2020, 01:34 PM.

  • #2

    You cannot dynamically change image and text in real time with the Buttons.

    One option that you can do is to create all the possible combinations of your text and icons and load it to the user button. You will need all possible states (Up, down) for each set. Each set can then be called by the host when needed. You can use this application note as a guide for creating a User button with multiple sets/blocks:

    Another option will be to use those dynamic strings over a button grid background layout, then place Blank User buttons on top for handling touch events. Keep in mind that pressing the button will hide the string below due to the nature of the user button will copy the background; one trick to do to negate this is after a button press you can update the string immediately to put it back on top again.

    I hope this helps,
    Best Regards,


    • #3
      Hi Jerson,

      Thank you for the guidance provided. I briefly tested the dynamic strings over a single fancy button (without blank user button) and with a blank button only. I notice the string hiding effect, and it is an option to just write the string back to display as we know which button changed. In fact that click may actually open the next layer of buttons in my application resulting in all dynamic strings needing to be updated for every button 'caption'. I read up on and will keep the button set/blocks in mind.

      I also noticed that if I want full control over button creation and captions I should be using a Serial project type - similar to the Bigdemo example. Related questions if you don't mind:

      1) To monitor the touch on a e.g. the array of Display.gfx_Button generated buttons above, do you poll for touch events by checking the reported touch X,Y coordinates against all 'touchable' objects and their respective coordinates. Not sure if I read this correctly in the doumentation, but have indeed had to do this in the past with displays.

      2) An onchange/changed button event generated by the display would have been nice. Is there anyway to create a 4DGL touch event on a button created via the serial library?

      Thank you again!



      • #4

        You can use img_Touched function to return to you which image was touched.
        You can check the 4Duino buttons examples in Workshop4 under File>Samples> 4Duino>Extended Graphics (Check out the Fancy Buttons or User Buttons for reference).

        Best Regards,


        • #5
          Hi Jason,

          Thank you for the response. I have had a somewhat frustrating few days attempting to get a Teensy 4.1 to connect to the uLCD-90DCT display running the above Visi Genie project via a gen4-PA. I eventually decded to try this Visi example: Sure enough I was able to get the Teensy and display to exchange data over COM1 after modifying the example. Good news since I know the display, the Teensy and connectivity is now functional.

          However, the Visi Genie project still refuses to communicate using the same exact configuration after adjustig the Options/Serial menu to use COM1 over PA12/13 (same as the Visi example settings). Really have not been able to find the issue with the Visi Genie project.

          Any ideas why a working Visi configuration will not work for Visi Genie with the Options/Serial COM1 and PA pins configured the same? I can provide more information of course...



          • #6
            I am still not able to get reliable communications going with the display. Followed the instructions Serial Project, ran the SPE Load, and splash screen is up with Comms 19200. Obviously communications via the gen4-PA is there, but with Serial Commander I get a command timedout on any action.

            Any recommendation as to what I should try next?

            Click image for larger version

Name:	serialcommander.png
Views:	74
Size:	176.5 KB
ID:	73742
            Attached Files


            • #7
              Good day,

              You might have mixed up your settings for the COM ports. In order to change the COM ports for ViSi-genie, you should change it in File>Options>ViSi-genie not in the File>Options>Serial (This will change the default Serial port for the Serial Environment, thus giving you the timeouts).

              Best Regards,


              • #8

                Additionally the settings under the File>Options for the default serial port, default ViSi-genie port etc, will only apply to new projects and not the current ones as they have now their own settings.
                If you have the current project open in ViSi-genie, you can change its COM port settings located in the Projects tab in which this setting will only apply for the current project.

                Best Regards,