147 lines
4.0 KiB
Java
147 lines
4.0 KiB
Java
import java.awt.event.KeyEvent;
|
|
import javax.swing.JOptionPane;
|
|
import processing.serial.*;
|
|
|
|
Serial port = null;
|
|
|
|
// select and modify the appropriate line for your operating system
|
|
// leave as null to use interactive port (press 'p' in the program)
|
|
String portname = null;
|
|
//String portname = Serial.list()[0]; // Mac OS X
|
|
//String portname = "/dev/ttyUSB0"; // Linux
|
|
//String portname = "COM6"; // Windows
|
|
|
|
boolean streaming = false;
|
|
float speed = 0.001;
|
|
String[] gcode;
|
|
int i = 0;
|
|
|
|
void openSerialPort()
|
|
{
|
|
if (portname == null) return;
|
|
if (port != null) port.stop();
|
|
|
|
port = new Serial(this, portname, 9600);
|
|
|
|
port.bufferUntil('\n');
|
|
}
|
|
|
|
void selectSerialPort()
|
|
{
|
|
String result = (String) JOptionPane.showInputDialog(this,
|
|
"Select the serial port that corresponds to your Arduino board.",
|
|
"Select serial port",
|
|
JOptionPane.PLAIN_MESSAGE,
|
|
null,
|
|
Serial.list(),
|
|
0);
|
|
|
|
if (result != null) {
|
|
portname = result;
|
|
openSerialPort();
|
|
}
|
|
}
|
|
|
|
void setup()
|
|
{
|
|
size(500, 250);
|
|
openSerialPort();
|
|
}
|
|
|
|
void draw()
|
|
{
|
|
background(0);
|
|
fill(255);
|
|
int y = 24, dy = 12;
|
|
text("INSTRUCTIONS", 12, y); y += dy;
|
|
text("p: select serial port", 12, y); y += dy;
|
|
text("1: set speed to 0.001 inches (1 mil) per jog", 12, y); y += dy;
|
|
text("2: set speed to 0.010 inches (10 mil) per jog", 12, y); y += dy;
|
|
text("3: set speed to 0.100 inches (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 + " inches per step", 12, y); y -= dy;
|
|
text("current serial port: " + portname, 12, y); y -= dy;
|
|
}
|
|
|
|
void keyPressed()
|
|
{
|
|
if (key == '1') speed = 0.001;
|
|
if (key == '2') speed = 0.01;
|
|
if (key == '3') speed = 0.1;
|
|
|
|
if (!streaming) {
|
|
if (keyCode == LEFT) port.write("G91\nG20\nG00 X-" + speed + " Y0.000 Z0.000\n");
|
|
if (keyCode == RIGHT) port.write("G91\nG20\nG00 X" + speed + " 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 == 'p') selectSerialPort();
|
|
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: really?
|
|
}
|
|
|