import java.awt.event.KeyEvent; import javax.swing.JOptionPane; import processing.serial.*; Serial port = null; String portname = "/dev/tty.usbmodem1412401"; // on my Mac OS X boolean streaming = false; float speed = 3200.0; String[] gcode; int i = 0; void openSerialPort() { if (portname == null) return; if (port != null) port.stop(); port = new Serial(this, portname, 115200); port.bufferUntil('\n'); } void setup() { size(500, 300); openSerialPort(); } void draw() { background(10,255,0); fill(0); int y = 24, dy = 12; text("A! Cutter GRBL Controller", 22, y); y += dy; text("1: set speed to 3200 mms (1 mil) per jog", 12, y); y += dy; text("2: set speed to 3000 mms (10 mil) per jog", 12, y); y += dy; text("3: set speed to 2500 mms (100 mil) per jog", 12, y); y += dy; text("arrow keys: jog in x-y plane", 12, y); y += dy; text("page up & page down: jog in z axis", 12, y); y += dy; text("$: display grbl settings", 12, y); y+= dy; text("h: go home", 12, y); y += dy; text("0: zero machine (set home to the current location)", 12, y); y += dy; text("g: stream a g-code file", 12, y); y += dy; text("x: stop streaming g-code (this is NOT immediate)", 12, y); y += dy; y = height - dy; text("current jog speed: " + speed + " mms per step", 12, y); y -= dy; text("current serial port: " + portname, 12, y); y -= dy; } void keyPressed() { if (key == '1') speed = 3200; if (key == '2') speed = 3000; if (key == '3') speed = 2500; if (!streaming) { if (keyCode == LEFT) port.write("$J=G21G91X3200F900" + " Y0.000 Z0.000\n"); if (keyCode == RIGHT) port.write("$J=G21G91X-3200F900" + " Y0.000 Z0.000\n"); if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + speed + " Z0.000\n"); if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + speed + " Z0.000\n"); if (keyCode == KeyEvent.VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + speed + "\n"); if (keyCode == KeyEvent.VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + speed + "\n"); if (key == 'h') port.write("G90\nG20\nG00 X0.000 Y0.000 Z0.000\n"); if (key == 'v') port.write("$0=75\n$1=74\n$2=75\n"); //if (key == 'v') port.write("$0=100\n$1=74\n$2=75\n"); if (key == 's') port.write("$3=10\n"); if (key == 'e') port.write("$16=1\n"); if (key == 'd') port.write("$16=0\n"); if (key == '0') openSerialPort(); if (key == '$') port.write("$$\n"); } if (!streaming && key == 'g') { gcode = null; i = 0; File file = null; println("Loading file..."); selectInput("Select a file to process:", "fileSelected", file); } if (key == 'x') streaming = false; } void fileSelected(File selection) { if (selection == null) { println("Window was closed or the user hit cancel."); } else { println("User selected " + selection.getAbsolutePath()); gcode = loadStrings(selection.getAbsolutePath()); if (gcode == null) return; streaming = true; stream(); } } void stream() { if (!streaming) return; while (true) { if (i == gcode.length) { streaming = false; return; } if (gcode[i].trim().length() == 0) i++; else break; } println(gcode[i]); port.write(gcode[i] + '\n'); i++; } void serialEvent(Serial p) { String s = p.readStringUntil('\n'); println(s.trim()); if (s.trim().startsWith("ok")) stream(); if (s.trim().startsWith("error")) stream(); // XXX: