Przeglądaj źródła

Added support for GPIO joystick
Users can now simply test on their own pc without argument added to the launch file

jancoow 10 lat temu
rodzic
commit
9be062fcd9

+ 44 - 39
src/control/button/ButtonHandler.java

@@ -17,7 +17,7 @@ import com.pi4j.io.gpio.event.GpioPinListenerDigital;
 import main.Window;
 import control.LedHandler;
 
-public class ButtonHandler{
+public class ButtonHandler implements KeyListener{
 
 	List<ButtonListener> listeners;
 	static List<Button> buttons;
@@ -42,8 +42,13 @@ public class ButtonHandler{
 		{
 			b.setColor(new Color((int)(Math.random()*254+1),(int)(Math.random()*254+1),(int)(Math.random()*254+1)));
 		}
+		System.out.println(Window.ON_RASP);
+		if (Window.ON_RASP)
+			addGpioListeners();
 		
-		// create gpio controller
+	}
+	
+	private void addGpioListeners(){
 		ArrayList<GpioPinDigitalInput> inputpins = new ArrayList<GpioPinDigitalInput>();
         final GpioController gpio = GpioFactory.getInstance();
         
@@ -61,10 +66,10 @@ public class ButtonHandler{
                   @Override
                   public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent e) {
                 	  if(e.getState() == PinState.HIGH){
-                		  buttonPress(buttons.get(Integer.parseInt(e.getPin().getName())));
+                		  buttonRelease(buttons.get(Integer.parseInt(e.getPin().getName())));
                 		  System.out.println(e.getPin().getName() + " Released");
                 	  }else{
-                		  buttonRelease(buttons.get(Integer.parseInt(e.getPin().getName())));
+                		  buttonPress(buttons.get(Integer.parseInt(e.getPin().getName())));
                 		  System.out.println(e.getPin().getName() + " Pressed");
                 	  }
                   }                  
@@ -89,41 +94,41 @@ public class ButtonHandler{
 	}
 
 	
-//	@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;

+ 68 - 3
src/control/joystick/JoystickHandler.java

@@ -7,6 +7,17 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import main.Window;
+
+import com.pi4j.component.Component;
+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 control.joystick.Joystick.Position;
 
 public class JoystickHandler implements KeyListener{
@@ -20,6 +31,48 @@ public class JoystickHandler implements KeyListener{
 		listeners = new ArrayList<JoystickListener>();
 		keys = new HashSet<Integer>();
 		j = new Joystick();
+		if(Window.ON_RASP)
+			addGpioListeners();
+	}
+	
+	private void addGpioListeners(){
+		ArrayList<GpioPinDigitalInput> inputpins = new ArrayList<GpioPinDigitalInput>();
+        final GpioController gpio = GpioFactory.getInstance();
+        
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_04, "UP")); //button 1 to 6 + start button
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_05, "LEFT"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_11, "RIGHT"));
+        inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_10, "DOWN"));
+
+        
+        for(GpioPinDigitalInput p:inputpins){
+        	  p.addListener(new GpioPinListenerDigital() {
+                  @Override
+                  public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent e) {
+                	  if(e.getState() == PinState.HIGH){
+                		  keyReleased(new KeyEvent(
+                				  		new java.awt.Component(){}, 
+                				  		KeyEvent.KEY_RELEASED, 
+                				  		System.nanoTime(), 
+                				  		0, 
+                				  		stringToKeyevent(e.getPin().getName()), 
+                				  		KeyEvent.CHAR_UNDEFINED)
+                				  );
+                		  System.out.println(e.getPin().getName() + " Released");
+                	  }else{
+                		  keyPressed(new KeyEvent(
+          				  		new java.awt.Component(){}, 
+          				  		KeyEvent.KEY_PRESSED, 
+          				  		System.nanoTime(), 
+          				  		0, 
+          				  		stringToKeyevent(e.getPin().getName()), 
+          				  		KeyEvent.CHAR_UNDEFINED)
+          				  );
+                		  System.out.println(e.getPin().getName() + " Pressed");
+                	  }
+                  }                  
+              });
+        }
 	}
 
 	public void addJoystickListener(JoystickListener toAdd) {
@@ -73,14 +126,26 @@ public class JoystickHandler implements KeyListener{
 			j.setPosition(Position.CENTER);
 		}
 	}
-
+	
+	private int stringToKeyevent(String s){
+		switch(s){
+		case "UP":
+			return KeyEvent.VK_UP;
+		case "DOWN":
+			return KeyEvent.VK_DOWN;
+		case "LEFT":
+			return KeyEvent.VK_LEFT;
+		case "RIGHT":
+			return KeyEvent.VK_RIGHT;
+		}
+		return -1;
+	}
+	
 	@Override
 	public void keyPressed(KeyEvent e) {
-		System.out.println("Test " + e.getKeyCode());
 		if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
 		{
 			Set<Integer> keysCopy = new HashSet<Integer>(keys);
-			System.out.println("YES!");
 			keys.add(e.getKeyCode());
 			updateJoystickPosition();
 			

+ 5 - 3
src/main/Window.java

@@ -23,7 +23,7 @@ public class Window extends JFrame {
 		super("Arcade");
 		setSize(1280, 1024);
 		
-		this.ON_RASP = ON_RASP;
+		Window.ON_RASP = ON_RASP;
 		System.out.println(ON_RASP);
 		
 		//Set window close listener
@@ -56,8 +56,10 @@ public class Window extends JFrame {
 		setContentPane(view);
 		
 		//Create EventListeners
-		new GPIOListener();
-		addKeyListener(jsh);
+		if(!Window.ON_RASP){
+			addKeyListener(bth);
+			addKeyListener(jsh);
+		}
 		bth.addButtonListener(control);
 		jsh.addJoystickListener(control);