如果您总是以相同的速率发送所有输入/输出,您可以简单地将它们打包成“数据包”,这些数据包总是以一个或多个具有固定值的字节开头,这些字节形成“数据包头”。唯一的风险是,在您尝试开始接收字节但尚未同步时,传感器数据的一个字节可能与起始字节具有相同的值。您可以通过使标头更长,或者选择传感器非法输出的起始字节(通常为OxFF左右)来降低这种风险。
微控制器上的发送循环非常简单(伪代码):
while True:
measure_sensors()
serial.send(START_BYTE)
serial.send(temperature)
serial.send(voltage)
serial.send(current)
serial.send(photodiode)
end while
接收循环有点棘手,因为它需要首先同步:
while True:
data = serial.receive()
if data != START_BYTE:
print 'not synced'
continue #restart at top of while
end if
temperature = serial.receive()
voltage = serial.receive()
current = serial.receive()
photodiode = serial.receive()
do_stuff_with_measurements()
end while
这种相同的方案可以用于两个方向上的通信。