-import serial
+import serial, time
from settings import frameSettings
-from utils import MatrixConversion, Geometry, Gcode
+from utils import MatrixConversion, Geometry, Gcode, PrinterUtils
class Printer():
- def __init__(self, PrinterCOM, SensorCOM, bedSize):
+ def __init__(self, PrinterCOM, bedSize):
self.COM = PrinterCOM
self.max_X, self.max_Y = bedSize
self.position = (0,0)
+ self.sendSerial = False
self.settings = frameSettings.frameSettings()
self.coeffs = MatrixConversion.find_coeffs(self.settings.image_frame.corners, self.settings.laser_frame.corners)
- # try:
- # self.printerSerial = serial.Serial(PrinterCOM, 115200, timeout = 1)
- # self.sensorSerial = serial.Serial(SensorCOM, 9600, timeout = 25)
- # except:
- # print("Connection Failure")
+ try: self.printerSerial = serial.Serial(PrinterCOM, 115200, timeout = 25)
+ except: print("Connection Failure")
def writePoint(self, xy):
return 0
def writePackage(self, package):
- #Send signal to execution sensor
-
if self.printerSerial is not None:
- self.sensorSerial.write('1'.encode())
self.printerSerial.write(package.encode())
def adjustXY(self, xy):
def write(self, xy):
self.writePoint(self.adjustXY(xy))
+ #Cannot send packages with over 3 locations at once,
+ #it overflows the printer's serial buffer because it's a peice of dog shit
def sendPackage(self, points):
- package = Gcode.buildGcodePackage(list(map(self.adjustXY, points)))
+ package = Gcode.buildGcodePackage(list(map(self.adjustXY, points)), (self.max_X, self.max_Y))
self.writePackage(package)
def packageIsExecuting(self):
- if self.sensorSerial.in_waiting > 0:
- status = self.sensorSerial.read()
- if status is not None:
- self.sensorSerial.write('0'.encode())
- #Might have to add delay here depending on how quick that shit writes
- self.sensorSerial.reset_input_buffer()
- return False
+ #Query the printer for position
+ #self.printerSerial.reset_input_buffer()
+ self.printerSerial.write('M114'.encode())
+ printerData = ''
+ while self.printerSerial.in_waiting > 0:
+ printerData += str(self.printerSerial.readline())
+ if 'Count' in printerData:
+ headPosition = PrinterUtils.parsePrinterXY(printerData)
+ return not PrinterUtils.isHomed(headPosition)
return True
def raiseZ(self):