1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.demos.servotrack;
31
32 import jssc.SerialPort;
33
34 import org.openimaj.hardware.serial.SerialDevice;
35
36 public class PTServoController {
37 private SerialDevice device;
38 private int currentTilt = 90;
39 private int currentPan = 90;
40
41 public PTServoController(String dev) throws Exception {
42 device = new SerialDevice(dev, 9600, SerialPort.DATABITS_8,
43 SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
44
45 this.setPan(currentPan);
46 this.setTilt(currentTilt);
47 }
48
49 public void setTilt(int angle) {
50 if (angle > 0 && angle < 180) {
51 currentTilt = angle;
52 sendCommand("t", currentTilt);
53 }
54 }
55
56 public void setPan(int angle) {
57 if (angle > 0 && angle < 180) {
58 currentPan = angle;
59 sendCommand("p", currentPan);
60 }
61 }
62
63 public void changePanBy(int angle) {
64 setPan(angle + currentPan);
65 }
66
67 public void changeTiltBy(int angle) {
68 setTilt(angle + currentTilt);
69 }
70
71 public int getTilt() {
72 return currentTilt;
73 }
74
75 public int getPan() {
76 return currentPan;
77 }
78
79 private void sendCommand(String servo, int angle) {
80 try {
81 device.getOutputStream().write((servo + " " + angle + "\n").getBytes("US-ASCII"));
82 Thread.sleep(60);
83 } catch (final Exception e) {
84 throw new RuntimeException(e);
85 }
86 }
87
88 public static void main(String[] args) throws Exception {
89 final PTServoController controller = new PTServoController("/dev/tty.usbmodemfd121");
90
91 for (int i = 0; i < 100; i++) {
92 controller.setPan(i);
93 controller.setTilt(60 + i);
94 }
95
96 System.exit(0);
97 }
98 }