from utils import MatrixConversion
from User_Interface import BoxFrame, Draw, MouseManager
-cap = cv2.VideoCapture(0)
+cap = cv2.VideoCapture(1)
ret, frame = cap.read()
cv2.namedWindow('image')
image_frame = BoxFrame.BoxFrame(image_corners)
coeffs = MatrixConversion.find_coeffs(image_corners, galvo_corners)
-printer = Printer.Printer('COM5', coeffs)
+printer = Printer.Printer('COM3', coeffs)
printer.begin()
mouse = MouseManager.MouseManager(laser_frame, image_frame, printer)
while(True):
ret, frame = cap.read()
- Draw.drawImage(frame, laser_frame,coeffs, printer.position, enableDots)
+ Draw.drawImage(frame, laser_frame, coeffs, printer, enableDots)
cv2.imshow('image', frame)
command = cv2.waitKey(10) & 0xFF
if command == ord('q'):
+ printer.home()
break
elif command == ord('d'):
enableDots = not enableDots
+ elif command == ord('f'):
+ printer.sendSerial = not printer.sendSerial
+ elif command == ord('h'):
+ printer.home()
+ elif command == ord('c'):
+ printer.callibrate()
cap.release()
cv2.destroyAllWindows()
\ No newline at end of file
-import serial
+import serial, time
from utils import MatrixConversion
class Printer():
self.max_Y = 200
self.ser = None
self.position = (0,0)
+ self.sendSerial = False
def begin(self):
print("Connecting")
try:
- pass
- #self.ser = serial.Serial('COM5', 9600, timeout=1)
- #time.sleep(3)
+ self.ser = serial.Serial(self.COM, 115200, timeout = 1)
except:
print("Connection Fail")
def writeRaw(self, xy):
x,y = xy
+ x = self.max_X - x
self.position = xy
- command = 'G0 F5000 X%d Y%d'%(x, y)
+ command = 'G0 F5000 X%d Y%d\n'%(x, y) + 'G0 F5000 X0 Y0\n'
- if self.withinBounds(xy):
+ if self.sendSerial and self.ser is not None and self.withinBounds(xy):
print(command)
+ self.ser.write(command.encode())
+ return 1
else:
- print('out of bounds')
- # if self.ser not None:
- # #self.ser.write(command.encode())
- # return 1
- # else:
- # return 0
+ return 0
def write(self, xy, laser_frame):
galvo_points = [(self.max_X,self.max_Y), (0,self.max_Y), (0,0), (self.max_X,0)]
new_x, new_y = MatrixConversion.warped_xy( (xy), self.coeffs)
self.writeRaw((new_x, new_y))
+ def callibrate(self):
+ self.ser.write('G28\n'.encode())
+
+ def home(self):
+ self.ser.write('G0 F5000 X0 Y0\n'.encode())
+
def read(self):
- print(ser.readline())
\ No newline at end of file
+ print(self.ser.readline())
\ No newline at end of file
#Mark TopLeft corner with white dot
cv2.circle(image,points[0], 2, (255,255,255),-1)
-def drawImage(frame, laser_frame, coeffs, printerPosition ,enableDots):
+def drawImage(frame, laser_frame, coeffs, printer, enableDots):
drawBox(frame, laser_frame.corners, (255, 255, 255), 1)
if enableDots == True:
- drawDots(frame, laser_frame.corners, 10, (0, 0, 255), -1)
+ drawDots(frame, laser_frame.corners, 10, (255, 0, 0), -1)
x,y = laser_frame.getCenter()
- cv2.circle(frame, (int(x),int(y)), 4, (0, 255, 0), 1)
- cv2.putText(frame, str(laser_frame.corners), (20, 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255))
- cv2.putText(frame, str(laser_frame.getCenter()), (450, 450), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255))
- cx,cy = printerPosition
+ cv2.circle(frame, (int(x), int(y)), 4, (0, 255, 0), 1)
+ cx,cy = printer.position
cv2.putText(frame, str((round(cx),round(cy))), (20, 450), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255))
+ if printer.sendSerial:
+ cv2.circle(frame, (150, 450), 10, (0, 255, 0), 25)
+ else:
+ cv2.circle(frame, (150, 450), 10, (0, 0, 255), 25)
+