Initial commit
This commit is contained in:
BIN
Absorbance96-Serial-Interface.pdf
Normal file
BIN
Absorbance96-Serial-Interface.pdf
Normal file
Binary file not shown.
80
abs96serial.py
Normal file
80
abs96serial.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import argparse
|
||||
import serial
|
||||
|
||||
|
||||
def send_command(ser, command):
|
||||
"""Sends a command to the serial device and returns the response."""
|
||||
full_command = f"!{command}\r\n"
|
||||
ser.write(full_command.encode("utf-8"))
|
||||
|
||||
lines = []
|
||||
# Determine the expected end marker
|
||||
end_marker = f"#{command.split('(')[0]}()"
|
||||
if command.startswith("RPF"):
|
||||
end_marker = "#RP()"
|
||||
|
||||
while True:
|
||||
line = ser.readline().decode("utf-8").strip()
|
||||
if line == end_marker:
|
||||
break
|
||||
if line and line != f"!{command}":
|
||||
lines.append(line)
|
||||
return lines
|
||||
|
||||
|
||||
def execute_commands(ser, commands):
|
||||
"""Executes a list of commands and checks for errors."""
|
||||
for command in commands:
|
||||
print(f"--- {command} ---")
|
||||
response_lines = send_command(ser, command)
|
||||
for line in response_lines:
|
||||
print(line)
|
||||
if command == "ERROR()":
|
||||
if not response_lines or not response_lines[-1].endswith("0"):
|
||||
print("Error: Device reported an error. Exiting.")
|
||||
exit(1)
|
||||
|
||||
|
||||
def main():
|
||||
# Parse command-line arguments
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Open a serial device at a specified port."
|
||||
)
|
||||
parser.add_argument(
|
||||
"port", type=str, help="The serial port to open (e.g., /dev/ttyUSB0)."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--channel",
|
||||
type=int,
|
||||
default=0,
|
||||
help="LED channel (default: 0).",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Open the serial port
|
||||
try:
|
||||
with serial.Serial(port=args.port, baudrate=115200, timeout=1) as ser:
|
||||
print(f"Successfully opened serial port {args.port} at 115200 baud.")
|
||||
|
||||
commands1 = [
|
||||
"SN()",
|
||||
"GETFILT()",
|
||||
"TEMP()",
|
||||
f"CALIBRATE({args.channel},-1)",
|
||||
"ERROR()",
|
||||
]
|
||||
commands2 = [
|
||||
f"RPF({args.channel},-1)",
|
||||
"ERROR()",
|
||||
]
|
||||
|
||||
execute_commands(ser, commands1)
|
||||
input("Insert plate and press Enter to continue...")
|
||||
execute_commands(ser, commands2)
|
||||
|
||||
except serial.SerialException as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
pyserial>=3,<4
|
||||
Reference in New Issue
Block a user