ButtonHandler.java 4.7 KB

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