{"id":2130,"date":"2025-04-15T06:11:53","date_gmt":"2025-04-15T06:11:53","guid":{"rendered":"https:\/\/webprojects.cloud\/wordpress\/splatco\/?post_type=spl_knowledgebase&#038;p=2130"},"modified":"2025-06-10T10:35:16","modified_gmt":"2025-06-10T10:35:16","slug":"example-a-simple-menu-system-with-oblcd","status":"publish","type":"spl_knowledgebase","link":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/","title":{"rendered":"Example: A simple menu system with OBLCD"},"content":{"rendered":"\n<p>The purpose of a menu system is to allow a user to move through a range of alternatives and select one, in order to either change an operating parameter or initiate an action. Most people nowadays are familiar with the menu systems in cellular telephones. A menu system you might design for a SPLat with LCD is similar.<\/p>\n\n\n\n<p>The following example will assume that there are just 4 push buttons available. From top to bottom these are labeled:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Label<\/th><th>Name\/function<\/th><\/tr><tr><td>&lt;-<\/td><td>iLeftArrow<\/td><\/tr><tr><td>-&gt;<\/td><td>iRightArrow<\/td><\/tr><tr><td>Y<\/td><td>iAccept<\/td><\/tr><tr><td>N<\/td><td>iReject<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Essentially the arrow keys will be used to select and change choices, while accept and reject keys will help finalise decisions.<\/p>\n\n\n\n<p>The menu system will affect three memory variables:<\/p>\n\n\n\n<p><strong>WashTime<\/strong>. Duration of wash cycle, in minutes<\/p>\n\n\n\n<p><strong>PreWash<\/strong>. True or False, depending if a pre wash cycle is required<\/p>\n\n\n\n<p><strong>HotWash<\/strong>. If true, do a hot wash cycle, otherwise do a cold cycle.<\/p>\n\n\n\n<p>It is absolutely essential that you plan your menu system on paper before you start writing any program code. The following table is a plan for the menu for a washing machine. It gives a choice of hot or cold wash and allows setting of the wash time between 5 and 25 minutes. Each row of the table corresponds to one display on the LCD. We will start by analyzing this tabulated plan, then we will see how it translates into SPLat code.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>&nbsp;<\/th><th>Display<\/th><th>&lt;-<\/th><th>-&gt;<\/th><th>Y<\/th><th>N<\/th><\/tr><tr><td>0<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>[1]<\/td><td>&nbsp;<\/td><\/tr><tr><td>1<\/td><td><code>0123456789012345<\/code><code>Wash type: XXXX<\/code><code>Change?<\/code><\/td><td>[3]<\/td><td>[2]<\/td><td>Hot:[5] Cold:[4]<\/td><td>[0]<\/td><\/tr><tr><td>2<\/td><td><code>0123456789012345<\/code><code>Wash time: xx<\/code><code>Change?<\/code><\/td><td>[1]<\/td><td>[3]<\/td><td>[6]<\/td><td>[0]<\/td><\/tr><tr><td>3<\/td><td><code>0123456789012345<\/code><code>Pre-wash: Xxx<\/code><code>Y or N to change<\/code><\/td><td>[2]<\/td><td>[1]<\/td><td>Xxx=Yes Save<\/td><td>Xxx=No Save<\/td><\/tr><tr><td>4<\/td><td>&nbsp;<\/td><td>[5]<\/td><td>[5]<\/td><td>Save [2]<\/td><td>[2]<\/td><\/tr><tr><td>5<\/td><td>&nbsp;<\/td><td>[4]<\/td><td>[4]<\/td><td>Save [2]<\/td><td>[2]<\/td><\/tr><tr><td>6<\/td><td><code>0123456789012345<\/code><code>Change wash time<\/code><code> xx<\/code><\/td><td>Dec xx min 5<\/td><td>Inc xx max 25<\/td><td>Save [3]<\/td><td>[3]<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Each row of the table is numbered. We call the numbers &#8220;State Numbers&#8221; and the whole table we call a &#8220;State Transition Table&#8221; or just &#8220;State Table&#8221;. If you are familiar with SPLatMaps or bubble diagrams you may recognize this as an alternative way of representing a Finite State Machine.<\/p>\n\n\n\n<p>The State table has 6 columns. One is just for the state number. The second column is for the LCD display in that state. The final 4 columns specify what happens if the user presses each of the 4 available buttons. These are the &#8220;action columns&#8221;.<\/p>\n\n\n\n<p>In an action column a number in [square brackets] means go to that new state (row) and change the display accordingly. The action columns can contain other actions as well, such as &#8220;Save&#8221; or change a variable (I&#8217;ve used&nbsp;<a href=\"https:\/\/www.splatco.com\/skb\/352.htm#o3808\">X<\/a>&#8216;s as placeholders for variables both in the display column and in the action columns). I&#8217;ve also included a ruler line in the displays.<\/p>\n\n\n\n<p>Let&#8217;s go through the 6 states, one at a time:<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">State 0<\/h6>\n\n\n\n<p>This allows for the possibility of the LCD not always being &#8220;owned&#8221; by the menu system. Perhaps in this state the bottom line shows wash temperature. Pressing Y will take us into the menu system proper at state 1.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">State 1<\/h6>\n\n\n\n<p>Offers us the option to change the wash type. Pressing Y to accept the offer takes us to state 4 or 5, depending on the current wash type selection (hot or cold). Pressing an arrow key takes us to 2 or 3. If you study the arrow key actions for state 1, 2 and 3 you will discover that they form a loop, allowing you to scroll through these 3 &#8220;top level&#8221; menu choices. Pressing the N button takes us back to state 0, or notionally out of menu mode.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">State 2<\/h6>\n\n\n\n<p>Displays the current wash time and asks if we want to change it. If we accept (Y) we go to state 6, which allows the wash time to be changed.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">State 3<\/h6>\n\n\n\n<p>Lets us change the selection of the pre-wash.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">States 4 and 5<\/h6>\n\n\n\n<p>These work together as a pair to allow toggling between hot wash and cold wash. The arrow keys toggle between them, Y accepts the current selection by saving it and N exits back to the top level of the menu without changing the setting.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">State 6<\/h6>\n\n\n\n<p>Displays the wash time and allows us to change it using the arrow keys. Y saves the changed value while N rejects it. Notice that the table specifies that the value can only be incremented and decremented between the limits 5 to 25.<\/p>\n\n\n\n<p>A few notes on all this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When we exit states 4, 5 or 6, we don&#8217;t return to the state we came from but to the next state in the top level menu sequence. This is a small refinement that will assist the user by automatically moving on to the next decision that must be made.<\/li>\n\n\n\n<li>State 3 updates its parameter immediately, whereas states 4\/5 and 6 require the user to consciously accept or reject the change with Y or N. I&#8217;ve done this simply to illustrate for you the two different ways of operating. In a real world situation you should probably design for consistent behaviour.<\/li>\n\n\n\n<li>State 0 is rather poorly defined. In practice it would determine how this menu system meshes with other parts of the program that may also have claim to the buttons and the LCD.<\/li>\n\n\n\n<li>I called the arrow keys left and right rather than up and down, because the LCD can display left and right arrows. As it happens, I didn&#8217;t actually use them in the display!<\/li>\n<\/ul>\n\n\n\n<p>The menu system will affect three memory variables:<\/p>\n\n\n\n<p><em>HotWash:<\/em>&nbsp;True if the wash is to be hot, false if the wash is to be cold.<\/p>\n\n\n\n<p><em>WashTime:<\/em>&nbsp;A simple integer variable giving wash time in minutes ( range 5 to 25)<\/p>\n\n\n\n<p><em>PreWash:<\/em>&nbsp;True if a pre-wash cycle is required.<\/p>\n\n\n\n<p>The code for each state follows a consistent pattern, with the following elements:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On entering the state for the first time, creation of the display for that state.<\/li>\n\n\n\n<li>A loop to look for one of the allowable keys, with a jump to an action segment if a key is pressed<\/li>\n\n\n\n<li>One action segment for each key. This may be an update of a variable and\/or the display, or a jump to another state.<\/li>\n<\/ol>\n\n\n\n<p>Here we go with the program:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">;Sample menu system for washing machine<br><br>;Define keys<br>iLeftArrow    iEQU          12      ;top button on <a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/glossary-of-terms\/#o364\">MMi99<\/a><br>iRightArrow   iEQU          11<br>iAccept       iEQU          10<br>iReject       iEQU          9<br><br>;Define memory locations. <br>;These are in the PermStore area<br>HotWash       mEQU          6<br>WashTime      mEQU          7<br>PreWash       mEQU          8<br><br>;These are anywhere:<br>ScratchMem    mEQU          9       ;Temporary storage<br><br>;initialize: Check if Permanent memory is valid, <br>;            force defaults if not<br>          PermRecall<br>          GoIfZ         DataOK<br>          SetMem        WashTime,10    ;Default<br>          SetMem        PreWash,T      ;Default<br>          SetMem        HotWash,T      ;Default<br>          PermStore<br>          PermStore<br>DataOK<br>          OBLCD_Type    2<br><br>******** Menu system ***************************<br>;State 0 is easy: one message then wait for Y<br>SetMenu0<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Y for menu\"<br>Menu0<br>          GoIfInK       iAccept,SetMenu1<br>          GoTo          Menu0<br><br>;==============State 1========================<br>SetMenu1<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Wash type: \"<br>          GoSub         QryChange      ;display \"Change?\"<br>Menu1ShowType<br>          OBLCD_SetCur   0,11<br>          Recall         HotWash<br>          GoIfT          Menu1Hot<br>Menu1Cold<br>;                        0123456789012345<br>          OBLCD_Text               \"Cold \"<br>          GoTo           Menu1KeyIn<br>Menu1Hot<br>;                        0123456789012345<br>          OBLCD_Text               \"Hot  \"<br><br>;Wait for a key<br>Menu1KeyIn<br>          GoIfInK        iLeftArrow,Menu1Left<br>          GoIfInK        iRightArrow,Menu1Right<br>          GoIfInK        iAccept,Menu1Accept<br>          GoIfInK        iReject,Menu1Reject<br>          GoTo           Menu1KeyIn     ;Keep trying<br>Menu1Left<br>          GoTo           SetMenu3<br>Menu1Right<br>          GoTo           SetMenu2<br>Menu1Accept<br>          Recall         HotWash<br>          GoIfT          SetMenu5<br>          GoTo           SetMenu4<br>Menu1Reject<br>          GoTo           SetMenu0<br><br>;===========State 2========================<br>SetMenu2<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Wash time: \"<br>          GoSub          QryChange      ;display \"Change?\"<br>Menu2ShowTime<br>          OBLCD_SetCur   0,11<br>          Recall         WashTime<br>          OBLCD_UDecDispXVW<br>          OBLCD_Text     \"m \"<br><br>Menu2KeyIn<br>          GoIfInK        iLeftArrow,Menu2Left<br>          GoIfInK        iRightArrow,Menu2Right<br>          GoIfInK        iAccept,Menu2Accept<br>          GoIfInK        iReject,Menu2Reject<br>          GoTo           Menu2KeyIn<br><br>Menu2Left<br>          GoTo           SetMenu1<br>Menu2Right<br>          GoTo           SetMenu3<br>Menu2Accept<br>          GoTo           SetMenu6<br>Menu2Reject<br>          GoTo           SetMenu0<br><br>;===========State 3========================<br>SetMenu3<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Pre-wash: \"<br>          OBLCD_SetCur   1,0<br>          OBLCD_Text    \"Y or N to change\"<br>Menu3Show<br>          OBLCD_SetCur   0,11<br>          Recall         PreWash<br>          GoIfT          Menu3PWYes<br>Menu3PWNo<br>          OBLCD_Text     \"No \"<br>          GoTo           Menu3KeyIn<br>Menu3PWYes<br>          OBLCD_Text     \"Yes\"<br>Menu3KeyIn<br>          GoIfInK        iLeftArrow,Menu3Left<br>          GoIfInK        iRightArrow,Menu3Right<br>          GoIfInK        iAccept,Menu3Accept<br>          GoIfInK        iReject,Menu3Reject<br>          GoTo           Menu3KeyIn<br><br>Menu3Left<br>          GoTo           SetMenu2<br>Menu3Right<br>          GoTo           SetMenu1<br>Menu3Accept<br>          SetMem         PreWash,T<br>          PermStore<br>          GoTo           Menu3Show<br>Menu3Reject<br>          SetMem         PreWash,F<br>          PermStore<br>          GoTo           Menu3Show<br><br>;======= State 4 =======================<br>SetMenu4<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Hot wash\"<br>Menu4KeyIn<br>          GoIfInK        iLeftArrow,Menu4Left<br>          GoIfInK        iRightArrow,Menu4Right<br>          GoIfInK        iAccept,Menu4Accept<br>          GoIfInK        iReject,Menu4Reject<br>          GoTo           Menu4KeyIn<br><br>Menu4Left<br>          GoTo           SetMenu5<br>Menu4Right<br>          GoTo           SetMenu5<br>Menu4Accept<br>          SetMem         HotWash,T<br>          PermStore<br>Menu4Reject<br>          GoTo           SetMenu2<br><br><br>;======= State 5 =======================<br>SetMenu5<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Cold wash\"<br>Menu5KeyIn<br>          GoIfInK        iLeftArrow,Menu5Left<br>          GoIfInK        iRightArrow,Menu5Right<br>          GoIfInK        iAccept,Menu5Accept<br>          GoIfInK        iReject,Menu5Reject<br>          GoTo           Menu5KeyIn<br><br>Menu5Left<br>          GoTo           SetMenu4<br>Menu5Right<br>          GoTo           SetMenu4<br>Menu5Accept<br>          SetMem         HotWash,F<br>          PermStore<br>Menu5Reject<br>          GoTo           SetMenu2<br><br><br>;===========State 6========================<br>SetMenu6<br>          OBLCD_Cls<br>;                        0123456789012345<br>          OBLCD_Text    \"Change wash time\"<br>          Recall         WashTime<br>Menu6Show<br>          Store          ScratchMem<br>          OBLCD_SetCur   1,6<br>          Recall         ScratchMem<br>          OBLCD_UDecDispXVW<br>          OBLCD_Text     \"m \"<br><br>Menu6KeyIn<br>          GoIfInK        iLeftArrow,Menu6Left<br>          GoIfInK        iRightArrow,Menu6Right<br>          GoIfInK        iAccept,Menu6Accept<br>          GoIfInK        iReject,Menu6Reject<br>          GoTo           Menu6KeyIn<br>Menu6Left<br>          Recall         ScratchMem<br>          Push<br>          GoIfXGE        25,Menu6KeyIn<br>          IncX<br>          GoTo           Menu6Show<br>Menu6Right<br>          Recall         ScratchMem<br>          Push<br>          GoIfXLE        5,Menu6KeyIn<br>          DecX<br>          GoTo           Menu6Show<br>Menu6Accept<br>          Recall         ScratchMem<br>          Store          WashTime<br>          PermStore<br>Menu6Reject<br>          GoTo           SetMenu3<br><br>;===============================================<br>;Subroutine to display \"Change?\" (clears to EOL)<br>QryChange<br>          OBLCD_SetCur   1,0<br>;                         0123456789012345<br>          OBLCD_Text     \"Change?         \"<br>          Return<br>;============ End of program ================<\/pre>\n\n\n\n<p>Some notes about this code:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Notice the very tidy factoring into one block of code per state. Notice also that all sections are essentially identical in layout. This uniformity makes the code easier to read. It is also a result of using a lot of copy\/paste operations, saving a lot of typing.<\/li>\n\n\n\n<li>In each section there is the same sequence of testing each key and jumping if it has been pressed. Following that are the 4 action addresses and the code for each. In many cases the code at each action is just another jump to a new state. That means each state change uses two jumps to get there. I could have saved code and memory by jumping to the new state straight after the key test, but that would have made the program a little less regular and therefore more error prone. The only deviation from this&nbsp;<em>schema<\/em>&nbsp;is state 0, which is a little different in intent and function.<\/li>\n\n\n\n<li>I used a subroutine to display &#8220;Change?&#8221;, because that operation occurs twice. A very modest saving in memory, perhaps, but it usually pays to place repeated operations into subroutines.<\/li>\n\n\n\n<li>I have used very few comments. This is in part to leave to you to discover how the code works. Also, it is an unfortunate fact that the code for a state machine tends to obscure the logic, so making intelligible comments can be difficult. You really need access to the underlying plan, in this case the state transition table. Of course, the table could be included as a huge comment!<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The purpose of a menu system is to allow a user to move through a range of alternatives and select one, in order to either&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2126,"menu_order":4,"template":"","class_list":["post-2130","spl_knowledgebase","type-spl_knowledgebase","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Example: A simple menu system with OBLCD - SPLat Controls<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Example: A simple menu system with OBLCD - SPLat Controls\" \/>\n<meta property=\"og:description\" content=\"The purpose of a menu system is to allow a user to move through a range of alternatives and select one, in order to either...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/\" \/>\n<meta property=\"og:site_name\" content=\"SPLat Controls\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-10T10:35:16+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/\",\"name\":\"Example: A simple menu system with OBLCD - SPLat Controls\",\"isPartOf\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website\"},\"datePublished\":\"2025-04-15T06:11:53+00:00\",\"dateModified\":\"2025-06-10T10:35:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Product documentation\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Product documentation: Onboard peripherals\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Onboard LCD\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"OBLCD: Programming\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"OBLCD: Examples\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/\"},{\"@type\":\"ListItem\",\"position\":7,\"name\":\"Example: A simple menu system with OBLCD\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\",\"name\":\"SPLat Controls\",\"description\":\"OEM Embedded Machine Controllers\",\"publisher\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization\",\"name\":\"SPLat Controls\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg\",\"contentUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg\",\"caption\":\"SPLat Controls\"},\"image\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Example: A simple menu system with OBLCD - SPLat Controls","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Example: A simple menu system with OBLCD - SPLat Controls","og_description":"The purpose of a menu system is to allow a user to move through a range of alternatives and select one, in order to either...","og_url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/","og_site_name":"SPLat Controls","article_modified_time":"2025-06-10T10:35:16+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/","name":"Example: A simple menu system with OBLCD - SPLat Controls","isPartOf":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website"},"datePublished":"2025-04-15T06:11:53+00:00","dateModified":"2025-06-10T10:35:16+00:00","breadcrumb":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/example-a-simple-menu-system-with-oblcd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/"},{"@type":"ListItem","position":2,"name":"Product documentation","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/"},{"@type":"ListItem","position":3,"name":"Product documentation: Onboard peripherals","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/"},{"@type":"ListItem","position":4,"name":"Onboard LCD","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/"},{"@type":"ListItem","position":5,"name":"OBLCD: Programming","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/"},{"@type":"ListItem","position":6,"name":"OBLCD: Examples","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/product-documentation\/product-documentation-onboard-peripherals\/onboard-lcd\/oblcd-programming\/oblcd-examples\/"},{"@type":"ListItem","position":7,"name":"Example: A simple menu system with OBLCD"}]},{"@type":"WebSite","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/","name":"SPLat Controls","description":"OEM Embedded Machine Controllers","publisher":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webprojects.cloud\/wordpress\/splatco\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization","name":"SPLat Controls","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg","contentUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg","caption":"SPLat Controls"},"image":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/spl_knowledgebase\/2130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/spl_knowledgebase"}],"about":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/types\/spl_knowledgebase"}],"author":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/users\/1"}],"up":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/spl_knowledgebase\/2126"}],"wp:attachment":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/media?parent=2130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}