Advertisement
Guest User

Java Matrix Keypad code for use with Raspberry Pi

a guest
May 19th, 2015
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.24 KB | None | 0 0
  1. package application;
  2. import java.util.HashMap;
  3.  
  4. import com.pi4j.io.gpio.GpioController;
  5. import com.pi4j.io.gpio.GpioFactory;
  6. import com.pi4j.io.gpio.GpioPinDigitalMultipurpose;
  7. import com.pi4j.io.gpio.Pin;
  8. import com.pi4j.io.gpio.PinMode;
  9. import com.pi4j.io.gpio.PinPullResistance;
  10. import com.pi4j.io.gpio.PinState;
  11. import com.pi4j.io.gpio.RaspiPin;
  12. import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
  13. import com.pi4j.io.gpio.event.GpioPinListenerDigital;
  14.  
  15.  
  16. public class CopyOfRPi_4x4_Matrix {
  17.    
  18.    /** The Constant PINMAPPING. */
  19.    private static final HashMap<String, String> PINMAPPING = new HashMap<String, String>();
  20.  
  21.    /** The gpio. */
  22.    private final static GpioController gpio = GpioFactory.getInstance();
  23.    
  24.    /** The COLUMN pins */
  25.    private static final Pin COLUMN_1 = RaspiPin.GPIO_04;
  26.    private static final Pin COLUMN_2 = RaspiPin.GPIO_03;
  27.    private static final Pin COLUMN_3 = RaspiPin.GPIO_02;
  28.    private static final Pin COLUMN_4 = RaspiPin.GPIO_01;
  29.    
  30.    /** The Digital COLUMN 1. */
  31.    private static GpioPinDigitalMultipurpose theCOLUMN_1 = gpio
  32.            .provisionDigitalMultipurposePin(COLUMN_1, PinMode.DIGITAL_INPUT);
  33.  
  34.    /** The Digital COLUMN 2. */
  35.    private static GpioPinDigitalMultipurpose theCOLUMN_2 = gpio
  36.            .provisionDigitalMultipurposePin(COLUMN_2, PinMode.DIGITAL_INPUT);
  37.  
  38.    /** The Digital COLUMN 3. */
  39.    private static GpioPinDigitalMultipurpose theCOLUMN_3 = gpio
  40.            .provisionDigitalMultipurposePin(COLUMN_3, PinMode.DIGITAL_INPUT);
  41.  
  42.    /** The Digital COLUMN 4. */
  43.    private static GpioPinDigitalMultipurpose theCOLUMN_4 = gpio
  44.            .provisionDigitalMultipurposePin(COLUMN_4, PinMode.DIGITAL_INPUT);
  45.    
  46.    /** The Digital Column Array **/
  47.    private final static GpioPinDigitalMultipurpose theColumns[] = {
  48.            theCOLUMN_1,
  49.            theCOLUMN_2,
  50.            theCOLUMN_3,
  51.            theCOLUMN_4
  52.    };
  53.    
  54.    /** The ROW pins */
  55.    private static final Pin ROW_1 = RaspiPin.GPIO_08;
  56.    private static final Pin ROW_2 = RaspiPin.GPIO_07;
  57.    private static final Pin ROW_3 = RaspiPin.GPIO_06;
  58.    private static final Pin ROW_4 = RaspiPin.GPIO_05;
  59.    
  60.    /** The Digital ROW 1. */
  61.    private static GpioPinDigitalMultipurpose theROW_1 = gpio
  62.            .provisionDigitalMultipurposePin(ROW_1, PinMode.DIGITAL_INPUT);
  63.  
  64.    /** The Digital ROW 2. */
  65.    private static GpioPinDigitalMultipurpose theROW_2 = gpio
  66.             .provisionDigitalMultipurposePin(ROW_2, PinMode.DIGITAL_INPUT);
  67.  
  68.    /** The Digital ROW 3. */
  69.    private static GpioPinDigitalMultipurpose theROW_3 = gpio
  70.             .provisionDigitalMultipurposePin(ROW_3, PinMode.DIGITAL_INPUT);
  71.  
  72.    /** The Digital ROW 4. */
  73.    private static GpioPinDigitalMultipurpose theROW_4 = gpio
  74.             .provisionDigitalMultipurposePin(ROW_4, PinMode.DIGITAL_INPUT);
  75.    
  76.    /** The Digital Row Array **/
  77.    private final static GpioPinDigitalMultipurpose theRows[] = {
  78.            theROW_1,
  79.            theROW_2,
  80.            theROW_3,
  81.            theROW_4
  82.    };
  83.    
  84.    /** The RowId */
  85.    private static int rowVal;
  86.    
  87.    /** The ColId */
  88.    private static int colVal;
  89.    
  90.    
  91.    /**
  92.     * Get KEY
  93.     */
  94.     static void getKey() {
  95.         // Provisioning and Set all columns as output low
  96.         for (final GpioPinDigitalMultipurpose myTheCol : theColumns)
  97.         {
  98.             myTheCol.setMode(PinMode.DIGITAL_OUTPUT);
  99.             myTheCol.setState(PinState.LOW);
  100.         }
  101.         // Provisioning and Set all rows as input pull-up
  102.         for (final GpioPinDigitalMultipurpose myTheRow : theRows)
  103.         {
  104.             myTheRow.setMode(PinMode.DIGITAL_INPUT);
  105.             myTheRow.setPullResistance(PinPullResistance.PULL_UP);
  106.         }
  107.         // Scan rows for pushed key/button
  108.         // A valid key press should set "rowVal" between 0 and 3.
  109.         rowVal = -1;
  110.         for (int myR = 0; myR < theRows.length; myR++)
  111.         {
  112.             GpioPinDigitalMultipurpose tmpRead = theRows[myR];
  113.             if (tmpRead.isLow())
  114.             {
  115.                 rowVal = myR;
  116.             }
  117.         }
  118.         // if rowVal is not between 0 and 3 then no button was pressed and we can exit
  119.         if (rowVal < 0 || rowVal > 3)
  120.         {
  121.             exit();
  122.         }
  123.         // Convert columns to input pull-down
  124.         for (final GpioPinDigitalMultipurpose myTheCol : theColumns)
  125.         {
  126.             myTheCol.setMode(PinMode.DIGITAL_INPUT);
  127.             myTheCol.setPullResistance(PinPullResistance.PULL_DOWN);
  128.         }
  129.        
  130.         // Switch the i-th row found from scan to output
  131.         theRows[rowVal].setMode(PinMode.DIGITAL_OUTPUT);
  132.         theRows[rowVal].setState(PinState.HIGH);
  133.        
  134.         // Scan columns for still-pushed key/button
  135.         // A valid key press should set "colVal"  between 0 and 3.
  136.         colVal = -1;
  137.         for (int myC = 0; myC < theColumns.length; myC++)
  138.         {
  139.             GpioPinDigitalMultipurpose tmpRead = theColumns[myC];
  140.             if (tmpRead.isHigh())
  141.             {
  142.                 colVal = myC;
  143.             }
  144.         }
  145.         // if colVal is not between 0 and 3 then no button was pressed and we can exit
  146.         if (colVal < 0 || colVal > 3)
  147.         {
  148.             exit();
  149.         }
  150.        
  151.         // Print the value of the key pressed
  152.         exit();
  153.         System.out.println(PINMAPPING.get(String.valueOf(rowVal)+String.valueOf(colVal)));
  154.        
  155.        
  156.        
  157.     } // end getKey().
  158.    
  159.    
  160.      private static void exit() {
  161.          // Reinitialize all rows and columns as input at exit
  162.          for (final GpioPinDigitalMultipurpose myTheRow : theRows)
  163.             {
  164.                 myTheRow.setMode(PinMode.DIGITAL_INPUT);
  165.                 myTheRow.setPullResistance(PinPullResistance.PULL_UP);
  166.             }
  167.          for (final GpioPinDigitalMultipurpose myTheColumn : theColumns)
  168.             {
  169.                 myTheColumn.setMode(PinMode.DIGITAL_INPUT);
  170.                 myTheColumn.setPullResistance(PinPullResistance.PULL_UP);
  171.             }
  172.      }
  173.  
  174.  
  175.    /**
  176.     * Instantiates a new piezo keypad.
  177.     */
  178.    public CopyOfRPi_4x4_Matrix()
  179.    {
  180.       initMapping();
  181.    }
  182.  
  183.    /**
  184.         * Inits the mapping.
  185.         *
  186.         * Maps input/output line to key on keypad.
  187.         */
  188.        private void initMapping()
  189.        {
  190.           PINMAPPING.put("00", "1");
  191.           PINMAPPING.put("01", "2");
  192.           PINMAPPING.put("02", "3");
  193.           PINMAPPING.put("01", "A");
  194.           PINMAPPING.put("14", "4");
  195.           PINMAPPING.put("13", "5");
  196.           PINMAPPING.put("12", "6");
  197.           PINMAPPING.put("11", "B");
  198.           PINMAPPING.put("24", "7");
  199.           PINMAPPING.put("23", "8");
  200.           PINMAPPING.put("22", "9");
  201.           PINMAPPING.put("21", "C");
  202.           PINMAPPING.put("44", "*");
  203.           PINMAPPING.put("43", "0");
  204.           PINMAPPING.put("42", "#");
  205.           PINMAPPING.put("41", "D");
  206.        }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement