Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 47 additions & 12 deletions examples/arduino_serial.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,21 @@

import time

from robust_serial import write_order, Order, write_i8, write_i16, read_i8, read_order
from robust_serial import (
write_order,
Order,
write_i8,
write_i16,
read_i8,
read_order,
read_i16,
)
from robust_serial.utils import open_serial_port


if __name__ == '__main__':
if __name__ == "__main__":
try:
serial_file = open_serial_port(baudrate=115200, timeout=None)
serial_file = open_serial_port(baudrate=115200, timeout=1)
except Exception as e:
raise e

Expand All @@ -21,21 +29,48 @@
if not bytes_array:
time.sleep(2)
continue
byte = bytes_array[0]
if byte in [Order.HELLO.value, Order.ALREADY_CONNECTED.value]:
# byte = bytes_array[0]
# print(byte)
# if byte in [Order.HELLO.value, Order.ALREADY_CONNECTED.value]:
# is_connected = True
receive_order: Order = read_order(serial_file)
if receive_order in [Order.HELLO, Order.ALREADY_CONNECTED]:
is_connected = True

print("Connected to Arduino")

motor_speed = -56

# Equivalent to write_i8(serial_file, Order.MOTOR.value)
write_order(serial_file, Order.MOTOR)
write_i8(serial_file, motor_speed)

write_order(serial_file, Order.SERVO)
write_i16(serial_file, 120)
write_order(serial_file, Order.STOP)

for _ in range(10):
order = read_order(serial_file)
print("Ordered received: {:?}", order)
for i in range(10):
try:
receive_order: Order = read_order(serial_file)

# code = read_i16(serial_file)

print(f"time: {time.time()} | receive_order: {receive_order}")
except Exception as e:
print(e)

# while True:
# write_order(serial_file, Order.SERVO)
# write_i16(serial_file, 120)

# for _ in range(4):
# order: Order = read_order(serial_file)
# if order in [
# Order.HELLO,
# Order.STOP,
# Order.ALREADY_CONNECTED,
# Order.RECEIVED,
# ]:
# print(f"time: {time.time()} | Ordered received:", order)

# else:
# code = read_i8(serial_file)
# print(
# f"time: {time.time()} | Ordered received: {order} | value: {code}"
# )
16 changes: 9 additions & 7 deletions robust_serial/robust_serial.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,35 +18,37 @@ class Order(Enum):
RECEIVED = 5
STOP = 6


def read_order(f):
"""
:param f: file handler or serial file
:return: (Order Enum Object)
"""
return Order(read_i8(f))


def read_i8(f):
"""
:param f: file handler or serial file
:return: (int8_t)
"""
return struct.unpack('<b', bytearray(f.read(1)))[0]
return struct.unpack("<b", bytearray(f.read(1)))[0]


def read_i16(f):
"""
:param f: file handler or serial file
:return: (int16_t)
"""
return struct.unpack('<h', bytearray(f.read(2)))[0]
return struct.unpack("<h", bytearray(f.read(2)))[0]


def read_i32(f):
"""
:param f: file handler or serial file
:return: (int32_t)
"""
return struct.unpack('<l', bytearray(f.read(4)))[0]
return struct.unpack("<l", bytearray(f.read(4)))[0]


def write_i8(f, value):
Expand All @@ -55,7 +57,7 @@ def write_i8(f, value):
:param value: (int8_t)
"""
if -128 <= value <= 127:
f.write(struct.pack('<b', value))
f.write(struct.pack("<b", value))
else:
print("Value error:{}".format(value))

Expand All @@ -73,15 +75,15 @@ def write_i16(f, value):
:param f: file handler or serial file
:param value: (int16_t)
"""
f.write(struct.pack('<h', value))
f.write(struct.pack("<h", value))


def write_i32(f, value):
"""
:param f: file handler or serial file
:param value: (int32_t)
"""
f.write(struct.pack('<l', value))
f.write(struct.pack("<l", value))


def decode_order(f, byte, debug=False):
Expand Down Expand Up @@ -119,4 +121,4 @@ def decode_order(f, byte, debug=False):
print(msg)
except Exception as e:
print("Error decoding order {}: {}".format(byte, e))
print('byte={0:08b}'.format(byte))
print("byte={0:08b}".format(byte))