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