0% found this document useful (0 votes)
175 views6 pages

Processing Code CNC For Arduino Meg2560 or UnoR3

This document contains code for controlling a CNC machine via serial communication. It allows selecting a serial port, streaming G-code files to control machine movement, and sending individual gcode commands via keyboard inputs. The code opens the selected serial port, draws a GUI, and handles keyboard inputs to send gcode commands or select files for streaming gcode line-by-line to the serial port.

Uploaded by

Tushar Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
175 views6 pages

Processing Code CNC For Arduino Meg2560 or UnoR3

This document contains code for controlling a CNC machine via serial communication. It allows selecting a serial port, streaming G-code files to control machine movement, and sending individual gcode commands via keyboard inputs. The code opens the selected serial port, draws a GUI, and handles keyboard inputs to send gcode commands or select files for streaming gcode line-by-line to the serial port.

Uploaded by

Tushar Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

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(frame,

"Select the serial port that corresponds to your Arduino board.",

"Select serial port",

JOptionPane.QUESTION_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?

You might also like