ButtonHandler.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package control.button;
  2. import java.awt.Color;
  3. import java.awt.event.KeyEvent;
  4. import java.awt.event.KeyListener;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import main.Window;
  8. import com.pi4j.io.gpio.GpioController;
  9. import com.pi4j.io.gpio.GpioFactory;
  10. import com.pi4j.io.gpio.GpioPinDigitalInput;
  11. import com.pi4j.io.gpio.PinState;
  12. import com.pi4j.io.gpio.RaspiPin;
  13. import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
  14. import com.pi4j.io.gpio.event.GpioPinListenerDigital;
  15. import control.LedHandler;
  16. public class ButtonHandler implements KeyListener{
  17. List<ButtonListener> listeners;
  18. static List<Button> buttons;
  19. LedHandler led;
  20. public ButtonHandler(LedHandler led)
  21. {
  22. this.led = led;
  23. listeners = new ArrayList<ButtonListener>();
  24. buttons = new ArrayList<Button>();
  25. buttons.add(new Button(0, -1, led));
  26. buttons.add(new Button(1, 2, led));
  27. buttons.add(new Button(2, 1, led));
  28. buttons.add(new Button(3, 0, led));
  29. buttons.add(new Button(4, 3, led));
  30. buttons.add(new Button(5, 4, led));
  31. buttons.add(new Button(6, 5, led));
  32. if (Window.ON_RASP)
  33. addGpioListeners();
  34. }
  35. private void addGpioListeners(){
  36. ArrayList<GpioPinDigitalInput> inputpins = new ArrayList<GpioPinDigitalInput>();
  37. final GpioController gpio = GpioFactory.getInstance();
  38. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, "1")); //button 1 to 6 + start button
  39. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_03, "2"));
  40. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_13, "3"));
  41. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_14, "4"));
  42. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_00, "5"));
  43. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_12, "6"));
  44. inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_06, "0"));
  45. for(GpioPinDigitalInput p:inputpins){
  46. p.addListener(new GpioPinListenerDigital() {
  47. @Override
  48. public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent e) {
  49. if(e.getState() == PinState.HIGH){
  50. buttonRelease(buttons.get(Integer.parseInt(e.getPin().getName())));
  51. System.out.println(e.getPin().getName() + " Released");
  52. }else{
  53. buttonPress(buttons.get(Integer.parseInt(e.getPin().getName())));
  54. System.out.println(e.getPin().getName() + " Pressed");
  55. }
  56. }
  57. });
  58. }
  59. }
  60. public void addButtonListener(ButtonListener toAdd) {
  61. listeners.add(toAdd);
  62. }
  63. public void buttonPress(Button b) {
  64. ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
  65. for (ButtonListener bt : listeners)
  66. bt.buttonPressed(e);
  67. }
  68. public void buttonRelease(Button b) {
  69. ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
  70. for (ButtonListener bt : listeners)
  71. bt.buttonReleased(e);
  72. }
  73. @Override
  74. public void keyPressed(KeyEvent e) {
  75. switch(e.getKeyCode())
  76. {
  77. case KeyEvent.VK_0:
  78. buttonPress(buttons.get(0));
  79. break;
  80. case KeyEvent.VK_1:
  81. buttonPress(buttons.get(1));
  82. break;
  83. case KeyEvent.VK_2:
  84. buttonPress(buttons.get(2));
  85. break;
  86. case KeyEvent.VK_3:
  87. buttonPress(buttons.get(3));
  88. break;
  89. case KeyEvent.VK_4:
  90. buttonPress(buttons.get(4));
  91. break;
  92. case KeyEvent.VK_5:
  93. buttonPress(buttons.get(5));
  94. break;
  95. case KeyEvent.VK_6:
  96. buttonPress(buttons.get(6));
  97. break;
  98. case KeyEvent.VK_ESCAPE:
  99. if(!Window.ON_RASP)
  100. System.exit(0);
  101. break;
  102. }
  103. }
  104. public void keyReleased(KeyEvent e) {
  105. switch(e.getKeyCode())
  106. {
  107. case KeyEvent.VK_0:
  108. buttonRelease(buttons.get(0));
  109. break;
  110. case KeyEvent.VK_1:
  111. buttonRelease(buttons.get(1));
  112. break;
  113. case KeyEvent.VK_2:
  114. buttonRelease(buttons.get(2));
  115. break;
  116. case KeyEvent.VK_3:
  117. buttonRelease(buttons.get(3));
  118. break;
  119. case KeyEvent.VK_4:
  120. buttonRelease(buttons.get(4));
  121. break;
  122. case KeyEvent.VK_5:
  123. buttonRelease(buttons.get(5));
  124. break;
  125. case KeyEvent.VK_6:
  126. buttonRelease(buttons.get(6));
  127. break;
  128. }
  129. }
  130. public void keyTyped(KeyEvent arg0) {}
  131. public static List<Button> getButtons()
  132. {
  133. return buttons;
  134. }
  135. public static Button getButton(int id)
  136. {
  137. for(Button b : buttons)
  138. {
  139. if(b.getButtonID() == id)
  140. {
  141. return b;
  142. }
  143. }
  144. return null;
  145. }
  146. }