package org.reprap.devices; import org.reprap.comms.GCodeReaderAndWriter; import org.reprap.utilities.Debug; import org.reprap.Printer; import org.reprap.Preferences; public class GCodeExtruder extends GenericExtruder { GCodeReaderAndWriter gcode; /** * @param prefs * @param extruderId */ public GCodeExtruder(GCodeReaderAndWriter writer, int extruderId, Printer p) { super(extruderId, p); es.setSpeed(0); gcode = writer; } /** * Zero the extruded length * */ public void zeroExtrudedLength(boolean really) throws Exception { //if(es.length() > 0) //{ super.zeroExtrudedLength(really); if(really) { String s = "G92 E0"; if(Debug.d()) s += " ; zero the extruded length"; gcode.queue(s); } //} } public void setTemperature(double temperature, boolean wait) throws Exception { String s; if(wait) { s = "M109 S" + temperature; if(Debug.d()) s += " ; set temperature and wait"; } else { s = "M104 S" + temperature; if(Debug.d()) s += " ; set temperature and return"; } gcode.queue(s); super.setTemperature(temperature, wait); } public void setHeater(int heat, double maxTemp) {} public double getTemperature() throws Exception { String s = "M105"; if(Debug.d()) s += " ; get temperature"; gcode.queue(s); es.setCurrentTemperature(gcode.getETemp()); return es.currentTemperature(); } public void setExtrusion(double speed, boolean reverse) throws Exception { if(getExtruderSpeed() < 0) return; String s; if (speed < Preferences.tiny()) { if(!fiveD) { s = "M103"; if(Debug.d()) s += " ; extruder off"; gcode.queue(s); } } else { if(!fiveD) { if (speed != es.speed()) { s = "M108 S" + speed; if(Debug.d()) s += " ; extruder speed in RPM"; gcode.queue(s); } if (es.reverse()) { s = "M102"; if(Debug.d()) s += " ; extruder on, reverse"; gcode.queue(s); } else { s = "M101"; if(Debug.d()) s += " ; extruder on, forward"; gcode.queue(s); } } } super.setExtrusion(speed, reverse); } //TODO: make these real G codes. public void setCooler(boolean coolerOn, boolean really) throws Exception { if(really) { String s; if (coolerOn) { s = "M106"; if(Debug.d()) s += " ; cooler on"; gcode.queue(s); } else { s = "M107"; if(Debug.d()) s += " ; cooler off"; gcode.queue(s); } } } public void setValve(boolean valveOpen) throws Exception { if(valvePulseTime <= 0) return; String s; if (valveOpen) { s = "M126 P" + valvePulseTime; if(Debug.d()) s += " ; valve open"; gcode.queue(s); } else { s = "M127 P" + valvePulseTime; if(Debug.d()) s += " ; valve closed"; gcode.queue(s); } } public boolean isEmpty() { return false; } }