No announcement yet.

genieArduino Library WaitForIdle() function purpose and speed optimisation.

  • Filter
  • Time
  • Show
Clear All
new posts

  • genieArduino Library WaitForIdle() function purpose and speed optimisation.

    I am using a uLCD-70DT screen with a arduino Mega. Within my code I utilize the genieArduino Library to communicate with the screen. I am using the arduino to complete time sensitive, fast paced sampling. In between sampling I update some features on the screen to display my new readings. My issue is that calling the WriteObject() or WriteStr() commands takes a significant amount of time, approx 70ms to update 10 elements on the screen. This is caused by the WaitForIdle() function used within both the WriteObject() and WriteStr() functions. I was hoping someone could explain the purpose of this function, my first guess is that is used to ensure the RX buffer of the screen doesn't become overrun. I really need to increase the speed of the screen update process, anyone have any ideas how to do this?

  • #2
    Hi joelmar,

    Welcome to the forum!

    As commented in the library, the waitForIdle() function is for "waiting for the link to become idle or for the timeout period". This is to ensure that the communication will not be messed up.

    The pixel size of the objects is one factor that can affect the time to update. The smaller the objects, the faster the update. You may read more about this in this forum post:

    Hope this helps and Best Regards,


    • #3
      I need help with my Gen4-uLCD-50DCT-CLB screen. My issue is that calling the WriteObject() or WriteStr() commands takes a significant amount of time : typically the value of default TIMEOUT_PERIOD e.g. 1000 ms.
      So every call to WriteObject() or WriteStr() takes 1000 ms. It seems that my screen never returns to GENIE_LINK_IDLE state and wait for timeout every time.
      Could you please help me to resolve this problem or understand what is the cause?


      • #4
        Hi Eran,
        Thanks for your reply mate.

        I used the 7 day trial to implement some Visi-Genie magic objects which has allowed me to send the data for all my onscreen elements in one message. The code base examples were very helpful in writing this code. I also have implemented a function which only checks if the screen is idle once, so as to not get stuck within the while loop. This allows me to continue with my time sensitive code and I will only send my next screen command when the screen is ready. I would maybe recommend that 4D systems release their own version of this function, This will give Arduino users an option to check to see if they can write to the screen and they don't just get stuck waiting for the screen to be ready. Possibly even some sort of command buffer with full indicators etc.

        All in all, glad to have my project running as it should be. Will be purchasing the pro version soon, well worth it having the time saving layout generation of Visi-Genie with the ability to expand its capabilities by dipping your toes into the 4DGL code.

        Cheers for the help.


        • #5
          Hi Lorenz,

          We are glad that you have resolved your issue.

          If you have other inquiries, feel free to open a ticket here 4D Systems helpdesk or a new forum post.

          Have a great day!

          Best regards