ButtonHandler.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. if(Window.ON_RASP)
  65. {
  66. Color c = b.getColor().brighter().brighter();
  67. led.setLed(b.getLedID(), c.getGreen(), c.getRed(), c.getBlue());
  68. led.show();
  69. }
  70. ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
  71. for (ButtonListener bt : listeners)
  72. bt.buttonPressed(e);
  73. }
  74. public void buttonRelease(Button b) {
  75. if(Window.ON_RASP)
  76. {
  77. led.setLed(b.getLedID(), b.getColor().getGreen(), b.getColor().getRed(), b.getColor().getBlue());
  78. led.show();
  79. }
  80. ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
  81. for (ButtonListener bt : listeners)
  82. bt.buttonReleased(e);
  83. }
  84. @Override
  85. public void keyPressed(KeyEvent e) {
  86. switch(e.getKeyCode())
  87. {
  88. case KeyEvent.VK_0:
  89. buttonPress(buttons.get(0));
  90. break;
  91. case KeyEvent.VK_1:
  92. buttonPress(buttons.get(1));
  93. break;
  94. case KeyEvent.VK_2:
  95. buttonPress(buttons.get(2));
  96. break;
  97. case KeyEvent.VK_3:
  98. buttonPress(buttons.get(3));
  99. break;
  100. case KeyEvent.VK_4:
  101. buttonPress(buttons.get(4));
  102. break;
  103. case KeyEvent.VK_5:
  104. buttonPress(buttons.get(5));
  105. break;
  106. case KeyEvent.VK_6:
  107. buttonPress(buttons.get(6));
  108. break;
  109. case KeyEvent.VK_ESCAPE:
  110. if(!Window.ON_RASP)
  111. System.exit(0);
  112. break;
  113. }
  114. }
  115. public void keyReleased(KeyEvent e) {
  116. switch(e.getKeyCode())
  117. {
  118. case KeyEvent.VK_0:
  119. buttonRelease(buttons.get(0));
  120. break;
  121. case KeyEvent.VK_1:
  122. buttonRelease(buttons.get(1));
  123. break;
  124. case KeyEvent.VK_2:
  125. buttonRelease(buttons.get(2));
  126. break;
  127. case KeyEvent.VK_3:
  128. buttonRelease(buttons.get(3));
  129. break;
  130. case KeyEvent.VK_4:
  131. buttonRelease(buttons.get(4));
  132. break;
  133. case KeyEvent.VK_5:
  134. buttonRelease(buttons.get(5));
  135. break;
  136. case KeyEvent.VK_6:
  137. buttonRelease(buttons.get(6));
  138. break;
  139. }
  140. }
  141. public void keyTyped(KeyEvent arg0) {}
  142. public static List<Button> getButtons()
  143. {
  144. return buttons;
  145. }
  146. public static Button getButton(int id)
  147. {
  148. for(Button b : buttons)
  149. {
  150. if(b.getButtonID() == id)
  151. {
  152. return b;
  153. }
  154. }
  155. return null;
  156. }
  157. }