Przeglądaj źródła

Changed button handler to work with GPIO pins on Rpi

jancoow 10 lat temu
rodzic
commit
3bf8280f79
2 zmienionych plików z 74 dodań i 37 usunięć
  1. 72 36
      src/control/button/ButtonHandler.java
  2. 2 1
      src/main/Window.java

+ 72 - 36
src/control/button/ButtonHandler.java

@@ -6,10 +6,18 @@ import java.awt.event.KeyListener;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.pi4j.io.gpio.GpioController;
+import com.pi4j.io.gpio.GpioFactory;
+import com.pi4j.io.gpio.GpioPinDigitalInput;
+import com.pi4j.io.gpio.PinState;
+import com.pi4j.io.gpio.RaspiPin;
+import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
+import com.pi4j.io.gpio.event.GpioPinListenerDigital;
+
 import main.Window;
 import control.LedHandler;
 
-public class ButtonHandler implements KeyListener{
+public class ButtonHandler{
 
 	List<ButtonListener> listeners;
 	static List<Button> buttons;
@@ -34,6 +42,34 @@ public class ButtonHandler implements KeyListener{
 		{
 			b.setColor(new Color((int)(Math.random()*254+1),(int)(Math.random()*254+1),(int)(Math.random()*254+1)));
 		}
+		
+		// create gpio controller
+		ArrayList<GpioPinDigitalInput> inputpins = new ArrayList<GpioPinDigitalInput>();
+        final GpioController gpio = GpioFactory.getInstance();
+        
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, "1")); //button 1 to 6 + start button
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_03, "2"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_13, "3"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_14, "4"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_00, "5"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_12, "6"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_06, "0"));
+
+        
+        for(GpioPinDigitalInput p:inputpins){
+        	  p.addListener(new GpioPinListenerDigital() {
+                  @Override
+                  public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent e) {
+                	  if(e.getState() == PinState.HIGH){
+                		  buttonPress(buttons.get(Integer.parseInt(e.getPin().getName())));
+                		  System.out.println(e.getPin().getName() + " Released");
+                	  }else{
+                		  buttonRelease(buttons.get(Integer.parseInt(e.getPin().getName())));
+                		  System.out.println(e.getPin().getName() + " Pressed");
+                	  }
+                  }                  
+              });
+        }
 	}
 
 	public void addButtonListener(ButtonListener toAdd) {
@@ -53,41 +89,41 @@ public class ButtonHandler implements KeyListener{
 	}
 
 	
-	@Override
-	public void keyPressed(KeyEvent e) {
-		switch(e.getKeyCode())
-		{
-		case KeyEvent.VK_0:
-			buttonPress(buttons.get(0));
-			break;
-		case KeyEvent.VK_1:
-			buttonPress(buttons.get(1));
-			break;
-		case KeyEvent.VK_2:
-			buttonPress(buttons.get(2));
-			break;
-		case KeyEvent.VK_3:
-			buttonPress(buttons.get(3));
-			break;
-		case KeyEvent.VK_4:
-			buttonPress(buttons.get(4));
-			break;
-		case KeyEvent.VK_5:
-			buttonPress(buttons.get(5));
-			break;
-		case KeyEvent.VK_6:
-			buttonPress(buttons.get(6));
-			break;
-		case KeyEvent.VK_ESCAPE:
-			if(!Window.ON_RASP)
-				System.exit(0);
-			break;
-		}
-	}
-
-	public void keyReleased(KeyEvent arg0) {}
-	public void keyTyped(KeyEvent arg0) {}
-	
+//	@Override
+//	public void keyPressed(KeyEvent e) {
+//		switch(e.getKeyCode())
+//		{
+//		case KeyEvent.VK_0:
+//			buttonPress(buttons.get(0));
+//			break;
+//		case KeyEvent.VK_1:
+//			buttonPress(buttons.get(1));
+//			break;
+//		case KeyEvent.VK_2:
+//			buttonPress(buttons.get(2));
+//			break;
+//		case KeyEvent.VK_3:
+//			buttonPress(buttons.get(3));
+//			break;
+//		case KeyEvent.VK_4:
+//			buttonPress(buttons.get(4));
+//			break;
+//		case KeyEvent.VK_5:
+//			buttonPress(buttons.get(5));
+//			break;
+//		case KeyEvent.VK_6:
+//			buttonPress(buttons.get(6));
+//			break;
+//		case KeyEvent.VK_ESCAPE:
+//			if(!Window.ON_RASP)
+//				System.exit(0);
+//			break;
+//		}
+//	}
+//
+//	public void keyReleased(KeyEvent arg0) {}
+//	public void keyTyped(KeyEvent arg0) {}
+//	
 	public static List<Button> getButtons()
 	{
 		return buttons;

+ 2 - 1
src/main/Window.java

@@ -7,6 +7,7 @@ import javax.swing.JFrame;
 
 import model.GameModel;
 import view.GameView;
+import control.GPIOListener;
 import control.GameControl;
 import control.LedHandler;
 import control.button.ButtonHandler;
@@ -55,7 +56,7 @@ public class Window extends JFrame {
 		setContentPane(view);
 		
 		//Create EventListeners
-		addKeyListener(bth);
+		new GPIOListener();
 		addKeyListener(jsh);
 		bth.addButtonListener(control);
 		jsh.addJoystickListener(control);