Page 139 - The Unofficial Guide to Lego Mindstorms Robots
P. 139

128


          BUTTON_INIT ( -- )
          This word initializes pbFORTH's button-handling system. Make sure to call it once before you try to call BUTTON_GET.

          B UTTON_GET (address -- )
          This word places the curren t button state into the variable address. pbFORTH provides a variable, RCX_BUTTON, that you
          ca n use for this purpose. The value placed in the variable tells which buttons are pressed and is a combination (boolean OR) of
          the values shown in Table  6-4.

          Table 6-4. BUTTON_GET Return Values

          Button Name      Value

          R un             1

          V iew            2

          P rgm            4

          F or example, if the Run and Prgm buttons are pressed simultaneously, the flags returned from BUTTON_GET will be 5.

          H ere's a word definition that retrieves the button state and places it on the top of the stack:

              : buttonState RCX_BUTTON DUP BUTTON_GET @ ;

          B uilding on this, here's a handy word definition that tests if the Run button is pressed:

              : isRunButtonPressed buttonState 1 AND ;

          R emember, you have to call BUTTON_INIT  before you use this word; otherwise is won't work.

          To test the state of the  On-Off button, you'll need to use the POWER_GET  word, described later in this chapter.

          LCD Display Words

          pbFORTH provides direct control of the RCX's display. This is exciting ne ws because you can display the results of your
          programs or even intermediate values. Every segment of the LCD disp lay can be controlled individually; this includes the
          "little man," the input and output arrows, the datalog indicators (which  you might never have seen otherwise), and the large
          numbers in the center. Figure 6-3 shows the display with most of its seg ments lit up.

          pbFORTH offers words that show and hide individual segments, displ ay numbers, or clear the entire display. For changes to
          actually take effect, however, you must call LCD_REFRESH:
   134   135   136   137   138   139   140   141   142   143   144