]>
wolfpit.net Git - hardware/fuck_tomatoes/.git/blob - Printer.py
2 from settings
import frameSettings
3 from utils
import MatrixConversion
, Geometry
, Gcode
, PrinterUtils
6 def __init__(self
, PrinterCOM
, bedSize
):
8 self
.max_X
, self
.max_Y
= bedSize
10 self
.sendSpike
= False
11 self
.sendMovement
= True
12 self
.settings
= frameSettings
.frameSettings()
13 self
.coeffs
= MatrixConversion
.find_coeffs(self
.settings
.image_frame
.corners
, self
.settings
.laser_frame
.corners
)
14 try: self
.printerSerial
= serial
.Serial(PrinterCOM
, 115200, timeout
= 25)
15 except: print("Connection Failure")
18 def writePoint(self
, xy
):
22 command
= 'G0 F5000 X%d Y%d\n'%(x
, y
) + 'G4 P1000\n' + 'G0 F5000 X0 Y0\n'
24 if self
.printerSerial
is not None and Geometry
.pointWithinBounds(xy
, (self
.max_X
, self
.max_Y
)):
25 self
.printerSerial
.write(command
.encode())
30 def writePackage(self
, package
):
31 if self
.printerSerial
is not None:
32 self
.printerSerial
.write(package
.encode())
34 def adjustXY(self
, xy
):
35 printer_points
= [(self
.max_X
,self
.max_Y
), (0,self
.max_Y
), (0,0), (self
.max_X
,0)]
36 self
.coeffs
= MatrixConversion
.find_coeffs(self
.settings
.laser_frame
.corners
, printer_points
)
37 return MatrixConversion
.warped_xy((xy
), self
.coeffs
)
40 self
.writePoint(self
.adjustXY(xy
))
42 #Cannot send packages with over 4 locations at once,
43 #it overflows the printer's serial buffer because it's a peice of dog shit
44 def sendPackage(self
, points
):
45 if not self
.sendMovement
: return
46 if len(points
) > 4: points
= points
[:4]
47 adjustedPoints
= list(map(self
.adjustXY
, points
))
48 adjustedPoints
= PrinterUtils
.reverseBoundX(adjustedPoints
, self
.max_X
) #Reverse X bound
49 package
= Gcode
.buildGcodePackage(adjustedPoints
, (self
.max_X
, self
.max_Y
), self
.sendSpike
)
51 print('-----START PACKAGE------')
53 self
.writePackage(package
)
55 def packageIsExecuting(self
):
56 #Query the printer for position
57 self
.printerSerial
.reset_output_buffer()
58 self
.printerSerial
.write('M114'.encode())
60 while self
.printerSerial
.in_waiting
> 0:
61 printerData
+= str(self
.printerSerial
.readline())
62 if 'Count' in printerData
:
63 headPosition
= PrinterUtils
.parsePrinterXY(printerData
)
64 return not PrinterUtils
.isHomed(headPosition
)
68 self
.printerSerial
.write('G0 F5000 Z50\n'.encode())
71 self
.printerSerial
.write('G28\n'.encode())
74 self
.printerSerial
.write('G0 F5000 X0 Y0\n'.encode())
77 print(self
.printerSerial
.readline())