22
22
import processing .core .*;
23
23
24
24
import java .awt .*;
25
- import java .util .Date ;
25
+ import java .util .* ;
26
26
import java .awt .event .*;
27
27
import javax .swing .*;
28
28
import javax .swing .border .*;
40
40
import org .jfree .chart .plot .XYPlot ;
41
41
import org .jfree .chart .renderer .xy .XYLineAndShapeRenderer ;
42
42
import org .jfree .chart .renderer .xy .XYStepRenderer ;
43
- import org .jfree .data .time .Second ;
43
+ import org .jfree .data .time .Millisecond ;
44
44
import org .jfree .data .time .TimeTableXYDataset ;
45
45
public class GraphMonitor extends JFrame implements MessageConsumer {
46
46
private Serial serial ;
@@ -49,19 +49,23 @@ public class GraphMonitor extends JFrame implements MessageConsumer {
49
49
private JTextArea graphArea ;
50
50
private JScrollPane scrollPane ;
51
51
private JScrollPane graphScrollPane ;
52
-
52
+ private GraphToolbar toolbar ;
53
53
private JTextField textField ;
54
54
private JButton sendButton ;
55
55
private JCheckBox autoscrollBox ;
56
56
private JComboBox lineEndings ;
57
57
private JComboBox serialRates ;
58
58
private int serialRate ;
59
-
59
+ private boolean start =false ;
60
+ private long starttime ;
61
+ private LinkedList <Character > stringdata ;
62
+ private Graph graph ;
63
+ private int hz =1000 ;
60
64
public GraphMonitor (String port ) {
61
65
super (port );
62
66
63
67
this .port = port ;
64
-
68
+ graph = new Graph ();
65
69
addWindowListener (new WindowAdapter () {
66
70
public void windowClosing (WindowEvent e ) {
67
71
closeSerialPort ();
@@ -78,101 +82,29 @@ public void actionPerformed(ActionEvent e) {
78
82
}});
79
83
80
84
getContentPane ().setLayout (new BorderLayout ());
81
-
85
+ stringdata = new LinkedList < Character >();
82
86
Font font = Theme .getFont ("console.font" );
83
-
84
- textArea = new JTextArea (16 , 20 );
87
+ toolbar = new GraphToolbar ( this , null );
88
+ textArea = new JTextArea (16 , 10 );
85
89
textArea .setEditable (false );
86
90
textArea .setFont (font );
87
91
// don't automatically update the caret. that way we can manually decide
88
92
// whether or not to do so based on the autoscroll checkbox.
89
93
((DefaultCaret )textArea .getCaret ()).setUpdatePolicy (DefaultCaret .NEVER_UPDATE );
90
-
94
+ textField = new JTextField (40 );
95
+ textField .addActionListener (new ActionListener () {
96
+ public void actionPerformed (ActionEvent e ) {
97
+ hz =1000 /Integer .valueOf (textField .getText ()).intValue ();
98
+ }});
91
99
scrollPane = new JScrollPane (textArea );
92
- JPanel pane = new JPanel ();
100
+ JPanel pane = new JPanel ();
93
101
pane .setLayout (new BoxLayout (pane , BoxLayout .Y_AXIS ));
94
102
pane .setBorder (new EmptyBorder (4 , 4 , 4 , 4 ));
95
- pane .add (this .graph ());
96
- pane .add (scrollPane );
97
- getContentPane ().add (pane , BorderLayout .CENTER );
98
-
99
-
100
- pane = new JPanel ();
101
- pane .setLayout (new BoxLayout (pane , BoxLayout .X_AXIS ));
102
- pane .setBorder (new EmptyBorder (4 , 4 , 4 , 4 ));
103
-
104
- // textField = new JTextField(40);
105
- // textField.addActionListener(new ActionListener() {
106
- // public void actionPerformed(ActionEvent e) {
107
- // send(textField.getText());
108
- // textField.setText("");
109
- // }});
110
-
111
- // sendButton = new JButton("Send");
112
- // sendButton.addActionListener(new ActionListener() {
113
- // public void actionPerformed(ActionEvent e) {
114
- // send(textField.getText());
115
- // textField.setText("");
116
- // }});
117
-
118
- // pane.add(textField);
119
- // pane.add(Box.createRigidArea(new Dimension(4, 0)));
120
- // pane.add(sendButton);
121
- //
122
- // getContentPane().add(pane, BorderLayout.NORTH);
123
-
124
- // pane = new JPanel();
125
- // pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
126
- // pane.setBorder(new EmptyBorder(4, 4, 4, 4));
127
- //
128
- // autoscrollBox = new JCheckBox("Autoscroll", true);
129
- //
130
- // lineEndings = new JComboBox(new String[] { "No line ending", "Newline", "Carriage return", "Both NL & CR" });
131
- // lineEndings.addActionListener(new ActionListener() {
132
- // public void actionPerformed(ActionEvent event) {
133
- // Preferences.setInteger("serial.line_ending", lineEndings.getSelectedIndex());
134
- // }
135
- // });
136
- // if (Preferences.get("serial.line_ending") != null) {
137
- // lineEndings.setSelectedIndex(Preferences.getInteger("serial.line_ending"));
138
- // }
139
- // lineEndings.setMaximumSize(lineEndings.getMinimumSize());
140
- //
141
- // String[] serialRateStrings = {
142
- // "300","1200","2400","4800","9600","14400",
143
- // "19200","28800","38400","57600","115200"
144
- // };
145
- //
146
- // serialRates = new JComboBox();
147
- // for (int i = 0; i < serialRateStrings.length; i++)
148
- // serialRates.addItem(serialRateStrings[i] + " baud");
149
- //
150
- // serialRate = Preferences.getInteger("serial.debug_rate");
151
- // serialRates.setSelectedItem(serialRate + " baud");
152
- // serialRates.addActionListener(new ActionListener() {
153
- // public void actionPerformed(ActionEvent event) {
154
- // String wholeString = (String) serialRates.getSelectedItem();
155
- // String rateString = wholeString.substring(0, wholeString.indexOf(' '));
156
- // serialRate = Integer.parseInt(rateString);
157
- // Preferences.set("serial.debug_rate", rateString);
158
- // closeSerialPort();
159
- // try {
160
- // openSerialPort();
161
- // } catch (SerialException e) {
162
- // System.err.println(e);
163
- // }
164
- // }});
165
- //
166
- // serialRates.setMaximumSize(serialRates.getMinimumSize());
167
- //
168
- // pane.add(autoscrollBox);
169
- // pane.add(Box.createHorizontalGlue());
170
- // pane.add(lineEndings);
171
- // pane.add(Box.createRigidArea(new Dimension(8, 0)));
172
- // pane.add(serialRates);
173
- //
174
- // getContentPane().add(pane, BorderLayout.SOUTH);
175
-
103
+ pane .add (graph .panel ());
104
+ pane .add (scrollPane );
105
+ getContentPane ().add (toolbar ,BorderLayout .NORTH );
106
+ getContentPane ().add (pane , BorderLayout .CENTER );
107
+ getContentPane ().add (textField , BorderLayout .SOUTH );
176
108
pack ();
177
109
178
110
Dimension screen = Toolkit .getDefaultToolkit ().getScreenSize ();
@@ -238,27 +170,62 @@ public void closeSerialPort() {
238
170
}
239
171
240
172
public void message (final String s ) {
241
- SwingUtilities .invokeLater (new Runnable () {
173
+ //System.err.println(serial.readString());
174
+ SwingUtilities .invokeLater (new Runnable () {//TODO implement 2 arrays for x and y values
242
175
public void run () {
243
- textArea .append (s );
244
- if (autoscrollBox .isSelected ()) {
245
- textArea .setCaretPosition (textArea .getDocument ().getLength ());
176
+ if (start ) {
177
+ addtobuffer (s );
246
178
}
179
+ textArea .append (s );
180
+ textArea .setCaretPosition (textArea .getDocument ().getLength ());
247
181
}});
248
182
}
249
- public ChartPanel graph (){
250
- TimeTableXYDataset data = new TimeTableXYDataset ();
251
- Second second = new Second (new Date (System .currentTimeMillis () + 1000 ));
252
- data .add (second , 20.0 ,"a" );
253
- Second second2 = new Second (new Date (System .currentTimeMillis () + 2000 ));
254
- data .add (second2 , 30.8 ,"a" );
255
- Second second3 = new Second (new Date (System .currentTimeMillis () + 3000 ));
256
- data .add (second3 , 60.5 ,"a" );
257
- JFreeChart chart = ChartFactory .createXYLineChart (null , null , null ,
258
- data , PlotOrientation .VERTICAL ,
259
- false , false , false );
260
- ChartPanel panel = new ChartPanel (chart );
261
-
262
- return panel ;
183
+ public void addtobuffer (String s ){
184
+ for (int i =0 ; i ==(s .length ()-1 );i ++ ) {
185
+ stringdata .add (s .charAt (i ));
186
+ }
187
+
188
+ }
189
+ public void handleStart (){
190
+ start =true ;
191
+ starttime =System .currentTimeMillis ();
192
+ //serial.write("****");
193
+ //graph.reset();
194
+ if (textField .getText ()!="" ) {
195
+ hz =1000 /Integer .valueOf (textField .getText ()).intValue ();
196
+
197
+ }
198
+ }
199
+ public void handleStop (){
200
+ start =false ;
201
+
202
+ //serial.write("****");
203
+ parse ();
204
+ }
205
+ public void parse (){
206
+ graph .reset ();
207
+ int count =0 ;
208
+ String number ="" ;
209
+ char c ;
210
+ int isNumber =1 ;
211
+ while (stringdata .size ()!=0 ){
212
+ while (isNumber ==1 ){
213
+ c =stringdata .poll ();
214
+ if (Character .isDigit (c )){
215
+ number +=c ;
216
+ }else {
217
+ isNumber =0 ;
218
+ }
219
+ }
220
+ if (number .length ()>0 ){
221
+ int temp = Integer .valueOf ( number ).intValue ();
222
+ graph .add (new Millisecond (new Date (count *hz )),temp );
223
+ number ="" ;
224
+ count ++;
225
+ }
226
+ isNumber =1 ;
227
+ }
228
+ //textArea.append("====");
229
+
263
230
}
264
231
}
0 commit comments