import java.awt.*; import java.awt.event.*; import java.io.InputStream; import java.util.Arrays; import javax.comm.CommPortIdentifier; import javax.comm.SerialPort; public class GraphicReader extends Frame { private static final int BUFFER_SIZE = 20; private static final int CANVAS_WIDTH = 400; private static final int CANVAS_HEIGHT = 400; public static void main(String[] args) { try { GraphicReader window = new GraphicReader(); CommPortIdentifier id = CommPortIdentifier.getPortIdentifier("COM2"); SerialPort port = (SerialPort) id.open("Reader", /*timeout=*/ 20000); port.setSerialPortParams(/*baudrate=*/ 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); InputStream in = port.getInputStream(); while (true) window.addValue(in.read()); } catch (Exception e) { e.printStackTrace(System.out); } } private PlotCanvas fCanvas = new PlotCanvas(); GraphicReader() { super("Graphic Reader"); addWindowListener(new CloseHandler()); setResizable(false); add(fCanvas); pack(); show(); } void addValue(int value) { int x = (value & 0x0F) * (CANVAS_WIDTH / 16); int y = ((value & 0xF0) >> 4) * (CANVAS_HEIGHT / 16); fCanvas.addPoint(x, y); } class PlotCanvas extends Canvas { private int[] fPointX = new int[BUFFER_SIZE]; private int[] fPointY = new int[BUFFER_SIZE]; PlotCanvas() { setSize(CANVAS_WIDTH, CANVAS_HEIGHT); } void addPoint(int x, int y) { for (int index = 0; index < BUFFER_SIZE-1; index++) { fPointX[index] = fPointX[index+1]; fPointY[index] = fPointY[index+1]; } fPointX[BUFFER_SIZE-1] = x; fPointY[BUFFER_SIZE-1] = y; repaint(); } public void paint(Graphics g) { ((Graphics2D) g).setStroke(new BasicStroke(3.0f)); g.setColor(Color.blue); g.drawPolyline(fPointX, fPointY, BUFFER_SIZE); } } class CloseHandler extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } }