]>
Commit | Line | Data |
---|---|---|
673c0f35 | 1 | import serial, time |
dcd7df75 | 2 | from settings import frameSettings |
673c0f35 | 3 | from utils import MatrixConversion, Geometry, Gcode, PrinterUtils |
e99251ce | 4 | |
5 | class Printer(): | |
3aae658b | 6 | def __init__(self, PrinterCOM, bedSize): |
97af21ad | 7 | self.COM = PrinterCOM |
5d2f6093 | 8 | self.max_X, self.max_Y = bedSize |
e99251ce | 9 | self.position = (0,0) |
16703c8e | 10 | self.sendSerial = False |
dcd7df75 MR |
11 | self.settings = frameSettings.frameSettings() |
12 | self.coeffs = MatrixConversion.find_coeffs(self.settings.image_frame.corners, self.settings.laser_frame.corners) | |
673c0f35 | 13 | try: self.printerSerial = serial.Serial(PrinterCOM, 115200, timeout = 25) |
3aae658b | 14 | except: print("Connection Failure") |
e99251ce | 15 | |
97af21ad | 16 | |
5d2f6093 | 17 | def writePoint(self, xy): |
e99251ce | 18 | x,y = xy |
5e014f1f | 19 | x = self.max_X - x |
e99251ce | 20 | self.position = xy |
dcd7df75 | 21 | command = 'G0 F5000 X%d Y%d\n'%(x, y) + 'G4 P1000\n' + 'G0 F5000 X0 Y0\n' |
e99251ce | 22 | |
97af21ad MR |
23 | if self.printerSerial is not None and Geometry.pointWithinBounds(xy, (self.max_X, self.max_Y)): |
24 | self.printerSerial.write(command.encode()) | |
5e014f1f | 25 | return 1 |
e99251ce | 26 | else: |
5e014f1f | 27 | return 0 |
e99251ce | 28 | |
5d2f6093 | 29 | def writePackage(self, package): |
97af21ad | 30 | if self.printerSerial is not None: |
97af21ad | 31 | self.printerSerial.write(package.encode()) |
e99251ce | 32 | |
5d2f6093 MR |
33 | def adjustXY(self, xy): |
34 | printer_points = [(self.max_X,self.max_Y), (0,self.max_Y), (0,0), (self.max_X,0)] | |
35 | self.coeffs = MatrixConversion.find_coeffs(self.settings.laser_frame.corners, printer_points) | |
36 | return MatrixConversion.warped_xy((xy), self.coeffs) | |
37 | ||
38 | def write(self, xy): | |
39 | self.writePoint(self.adjustXY(xy)) | |
40 | ||
5d2f6093 | 41 | def sendPackage(self, points): |
97af21ad | 42 | package = Gcode.buildGcodePackage(list(map(self.adjustXY, points))) |
5d2f6093 MR |
43 | self.writePackage(package) |
44 | ||
97af21ad | 45 | def packageIsExecuting(self): |
3aae658b | 46 | #Query the printer for position |
673c0f35 MR |
47 | self.printerSerial.reset_input_buffer() |
48 | self.printerSerial.write('M114'.encode()) | |
49 | printerData = '' | |
50 | while self.printerSerial.in_waiting > 0: | |
51 | printerData += str(self.printerSerial.readline()) | |
97af21ad | 52 | |
673c0f35 MR |
53 | if 'Count' in printerData: |
54 | x, y = PrinterUtils.parsePrinterXY(printerData) | |
55 | if x == 0 and y == 0: return False | |
56 | return True | |
57 | ||
5d2f6093 | 58 | def raiseZ(self): |
97af21ad | 59 | self.printerSerial.write('G0 F5000 Z50\n'.encode()) |
5d2f6093 | 60 | |
5e014f1f | 61 | def callibrate(self): |
97af21ad | 62 | self.printerSerial.write('G28\n'.encode()) |
5e014f1f MR |
63 | |
64 | def home(self): | |
97af21ad | 65 | self.printerSerial.write('G0 F5000 X0 Y0\n'.encode()) |
5e014f1f | 66 | |
e99251ce | 67 | def read(self): |
97af21ad | 68 | print(self.printerSerial.readline()) |