WIP: add stub for PWM driver using pyserial
This commit is contained in:
14
main.py
14
main.py
@@ -1,6 +1,7 @@
|
|||||||
#! /usr/bin/env python
|
#! /usr/bin/env python
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from gcode_parser import GCodeParser
|
from gcode_parser import GCodeParser
|
||||||
|
from pwm_driver import PWMDriver
|
||||||
from visualizer import Visualizer
|
from visualizer import Visualizer
|
||||||
|
|
||||||
# A4
|
# A4
|
||||||
@@ -12,12 +13,19 @@ if __name__ == "__main__":
|
|||||||
argparser.add_argument("-f", "--file", type=str)
|
argparser.add_argument("-f", "--file", type=str)
|
||||||
argparser.add_argument("-W", "--width", type=float, default=WIDTH_MM, required=False)
|
argparser.add_argument("-W", "--width", type=float, default=WIDTH_MM, required=False)
|
||||||
argparser.add_argument("-H", "--height", type=float, default=HEIGHT_MM, required=False)
|
argparser.add_argument("-H", "--height", type=float, default=HEIGHT_MM, required=False)
|
||||||
|
argparser.add_argument("-V", "--visualize", action="store_true", default=False, required=False)
|
||||||
|
argparser.add_argument("-P", "--port", type=str, default=None)
|
||||||
|
|
||||||
args = argparser.parse_args()
|
args = argparser.parse_args()
|
||||||
|
|
||||||
parser = GCodeParser(args.file)
|
parser = GCodeParser(args.file)
|
||||||
positions = parser.get_positions()
|
positions = parser.get_positions()
|
||||||
|
|
||||||
screen_dimensions = (1024*1.5, 1024*1.5 * HEIGHT_MM/WIDTH_MM)
|
if args.visualize:
|
||||||
visualizer = Visualizer(positions, screen_dimensions, (args.width, args.height))
|
screen_dimensions = (1024*1.5, 1024*1.5 * HEIGHT_MM/WIDTH_MM)
|
||||||
visualizer.visualize()
|
visualizer = Visualizer(positions, screen_dimensions, (args.width, args.height))
|
||||||
|
visualizer.visualize()
|
||||||
|
|
||||||
|
if args.port:
|
||||||
|
pwm = PWMDriver(positions, (args.width, args.height), args.port)
|
||||||
|
pwm.run()
|
||||||
43
pwm_driver.py
Normal file
43
pwm_driver.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
class PWMDriver():
|
||||||
|
def __init__(self, positions : list[tuple[float, float, float]], gcode_size : tuple[float, float], port : str, baudrate : int = 115200) -> None:
|
||||||
|
self.positions = positions
|
||||||
|
self.gcode_size = gcode_size
|
||||||
|
self.port = port
|
||||||
|
self.baudrate = baudrate
|
||||||
|
self._init_pwm()
|
||||||
|
|
||||||
|
def _init_pwm(self) -> None:
|
||||||
|
from serial import Serial
|
||||||
|
pass
|
||||||
|
#self.serial = Serial(self.port, self.baudrate)
|
||||||
|
|
||||||
|
def _send_position(self, pos : tuple[float, float, float]) -> None:
|
||||||
|
x, y, z = pos
|
||||||
|
# Convert coordinates to PWM values
|
||||||
|
precision = ((2 ** 16) - 1)
|
||||||
|
pwm_x : int = int(x / self.gcode_size[0] * precision)
|
||||||
|
pwm_y : int = int(y / self.gcode_size[1] * precision)
|
||||||
|
pen : int = 1 if z < 0 else 0
|
||||||
|
|
||||||
|
# Send PWM values to the serial port
|
||||||
|
print(f"Sending PWM values: X={pwm_x:<5}, Y={pwm_y:<5}, Pen={pen}")
|
||||||
|
#self.serial.write(f"{pwm_x},{pwm_y},{pen}\n".encode())
|
||||||
|
|
||||||
|
def _position_reached(self) -> bool:
|
||||||
|
# Check if the position has been reached
|
||||||
|
from time import sleep
|
||||||
|
sleep(0.5)
|
||||||
|
return True
|
||||||
|
# return self.serial.readline().decode().strip() == "OK"
|
||||||
|
|
||||||
|
def _wait_for_position(self) -> None:
|
||||||
|
# Wait until the position is reached
|
||||||
|
while not self._position_reached():
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self) -> None:
|
||||||
|
for pos in self.positions:
|
||||||
|
self._send_position(pos)
|
||||||
|
self._wait_for_position()
|
||||||
|
print("All positions sent successfully.")
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
pygame==2.6.1
|
pygame==2.6.1
|
||||||
pygcode==0.2.1
|
pygcode==0.2.1
|
||||||
colorama==0.4.6
|
colorama==0.4.6
|
||||||
|
pyserial
|
||||||
Reference in New Issue
Block a user