-import serial
-from settings import frameSettings
-from utils import MatrixConversion, Geometry, Gcode
+import serial, time
+from settings import printerSettings
+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.settings = frameSettings.frameSettings()
+ self.sendSpike = False
+ self.sendMovement = True
+ self.settings = printerSettings.PrinterSettings()
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 4 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)))
+ if not self.sendMovement: return
+ if len(points) > 4: points = points[:4]
+ adjustedPoints = list(map(self.adjustXY, points))
+ adjustedPoints = PrinterUtils.addOffsets(adjustedPoints, (self.settings.xOffset, self.settings.yOffset))
+ adjustedPoints = PrinterUtils.reverseBoundX(adjustedPoints, self.max_X) #Reverse X bound
+ package = Gcode.buildGcodePackage(adjustedPoints, (self.max_X, self.max_Y), self.sendSpike)
+
+ print('-----START PACKAGE------')
+ print(package)
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_output_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):