2222import processing .core .*;
2323
2424import java .awt .*;
25- import java .util .Date ;
25+ import java .util .* ;
2626import java .awt .event .*;
2727import javax .swing .*;
2828import javax .swing .border .*;
4040import org .jfree .chart .plot .XYPlot ;
4141import org .jfree .chart .renderer .xy .XYLineAndShapeRenderer ;
4242import org .jfree .chart .renderer .xy .XYStepRenderer ;
43- import org .jfree .data .time .Second ;
43+ import org .jfree .data .time .Millisecond ;
4444import org .jfree .data .time .TimeTableXYDataset ;
4545public class GraphMonitor extends JFrame implements MessageConsumer {
4646 private Serial serial ;
@@ -49,19 +49,23 @@ public class GraphMonitor extends JFrame implements MessageConsumer {
4949 private JTextArea graphArea ;
5050 private JScrollPane scrollPane ;
5151 private JScrollPane graphScrollPane ;
52-
52+ private GraphToolbar toolbar ;
5353 private JTextField textField ;
5454 private JButton sendButton ;
5555 private JCheckBox autoscrollBox ;
5656 private JComboBox lineEndings ;
5757 private JComboBox serialRates ;
5858 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 ;
6064 public GraphMonitor (String port ) {
6165 super (port );
6266
6367 this .port = port ;
64-
68+ graph = new Graph ();
6569 addWindowListener (new WindowAdapter () {
6670 public void windowClosing (WindowEvent e ) {
6771 closeSerialPort ();
@@ -78,101 +82,29 @@ public void actionPerformed(ActionEvent e) {
7882 }});
7983
8084 getContentPane ().setLayout (new BorderLayout ());
81-
85+ stringdata = new LinkedList < Character >();
8286 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 );
8589 textArea .setEditable (false );
8690 textArea .setFont (font );
8791 // don't automatically update the caret. that way we can manually decide
8892 // whether or not to do so based on the autoscroll checkbox.
8993 ((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+ }});
9199 scrollPane = new JScrollPane (textArea );
92- JPanel pane = new JPanel ();
100+ JPanel pane = new JPanel ();
93101 pane .setLayout (new BoxLayout (pane , BoxLayout .Y_AXIS ));
94102 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 );
176108 pack ();
177109
178110 Dimension screen = Toolkit .getDefaultToolkit ().getScreenSize ();
@@ -238,27 +170,62 @@ public void closeSerialPort() {
238170 }
239171
240172 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
242175 public void run () {
243- textArea .append (s );
244- if (autoscrollBox .isSelected ()) {
245- textArea .setCaretPosition (textArea .getDocument ().getLength ());
176+ if (start ) {
177+ addtobuffer (s );
246178 }
179+ textArea .append (s );
180+ textArea .setCaretPosition (textArea .getDocument ().getLength ());
247181 }});
248182 }
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+
263230 }
264231}
0 commit comments