OSDN Git Service

lejos_NXJ_win32_0_5_0beta.zip
[nxt-jsp/lejos_nxj.git] / nxtOSEK / lejos_nxj / src / java / classes / lejos / util / ButtonCounter.java
diff --git a/nxtOSEK/lejos_nxj/src/java/classes/lejos/util/ButtonCounter.java b/nxtOSEK/lejos_nxj/src/java/classes/lejos/util/ButtonCounter.java
new file mode 100644 (file)
index 0000000..42fe73c
--- /dev/null
@@ -0,0 +1,124 @@
+package lejos.util;
+import lejos.nxt.*;
+
+/**
+This is class is for data entry using the NXT keyboard.
+Counts number of presses of left and right buttons <br>
+Press ENTER together with together with LEFT  or RIGHT to decrease the count. 
+Press ESCAPE or ENTER alone to end counting. 
+Displays the count as it is entered, and makes a sound with each button press.
+Stores the count in public fields
+
+@author Roger Glassey 8/20/07
+*/
+public class ButtonCounter
+
+{
+/**
+       Output only not used in calculations ; use this value after count() returns;
+ */
+       public int _rightCount= 0;
+
+       /**
+       Output only not used in calculations; use after count() returns;
+        */
+       public int _leftCount= 0;
+
+/**
+ * identifies the ENTER button
+ */
+       static final byte ENTER=0x01;
+/**
+ * identifies the left button
+ */
+       static final byte LEFT=0x02;
+ /**
+ * identifies the right button
+ */
+       static final byte RIGHT = 0x04;
+       /**
+        * identifies  escape button
+        */
+       static final byte ESC = 0x08;
+       static final String BLANK = "                ";
+/**
+ * Use this method after counting is complete;
+ * @return value of right count.
+ */    
+       public int  getRightCount() { return _rightCount; }
+       /**
+        * Use this method after counting is complete;
+        * @return value of left count.
+        */ 
+       public int  getLeftCount() { return _leftCount; }
+       private boolean _reset = true;
+
+/**
+Start counting; parameter string is displayed; use it to identify this  particular call <br>
+returns when ESC or ENTER button is pressed <br>
+Hold Enter and left or right to decrease count,  otherwise it increases <br>
+counters are reset when this method is called.
+*/
+       public void count(String s)
+       {
+          LCD.drawString(BLANK, 0, 0);
+          LCD.drawString(s,0,0);
+          _reset = true;
+          count();
+       }
+/**
+ * called by count( string) 
+ */    
+       public void count()
+       {
+       if(_reset)       
+       {
+           _rightCount = 0;
+           _leftCount = 0;
+       }
+          while(Button.readButtons() > 0);// wait for release
+               boolean counting = true;
+               show();
+               while(counting)
+               {
+            int b = Button.waitForPress();
+            try {Thread.sleep(80);} catch (InterruptedException ie) {}
+            b = Button.readButtons();          
+                       Sound.playTone(880 + 100*b,200);
+                   if( b == ESC || b == ENTER)counting = false;
+                       else
+                       {
+                               if(b == LEFT) _leftCount++;
+                               if(b == RIGHT) _rightCount++;
+                               if(b == LEFT + ENTER) _leftCount--;
+                               if(b == RIGHT + ENTER) _rightCount--;                   
+                       }
+                       show(); 
+               }//end while when ESC is pressed
+       }
+/**
+ * Initializes values of left count and right count.
+ * Displays parameter   s   ; sets _leftcount = left,  _rightCount = right
+ */
+       public void count(String s, int left,int right)
+       {
+               LCD.drawString(BLANK, 0, 0);
+               LCD.drawString(s,0,0);
+               this._reset = false;
+               _leftCount = left;
+               _rightCount = right;
+               count();
+       }
+
+       private void show()
+       {
+       LCD.drawString(BLANK,0, 1);
+       LCD.drawInt(_leftCount,4,0,1);
+       LCD.drawInt(_rightCount,4, 8, 1);    
+       }
+
+
+
+}