Yeah, so for the HEX output, "80" is the start byte (Decimal - 128, Binary - 10000000) and "40" is the stop byte (Decimal - 64, Binary - 01000000). So a packet in HEX is:
[ 800000000220000300051500040000003F040000003F0000000040 ]
EDIT - Actually, you're right, the HEX output doesn't make any sense. Too many bytes of data for what a packet should be.
EDIT 2 - ACTUALLY, there is a few things going on here that I wasn't expecting, but I believe it's all correct (and kind of makes sense).
First, I only have two sensors, but I have two displays from the same company as well, and it appears that they are submitting their own packet of information to tell other displays down the line that they have already displayed the data for one of the sensors (so you could have two of the same sensor, and two displays showing that KIND of data, and they wouldn't mix the data up). So, a packet for a single sensor/display is 5 bytes, and we're receiving 5 sets of 5 bytes (2 sensors, 2 displays, and see next paragraph...).
Second, the extra data packet is because my second sensor captures vacuum AND pressure data, so it is (apparently) special and sends two sets of data, one for the vacuum side of the scale, the other for the pressure side of the scale (one or the other sends zero data, depending on what the sensor is reading). so that is where the "extra" set of data is coming from.
So while a lot of this isn't described in the protocol document I have (which isn't really that helpful), I think I get it.
The sensor with the MSB/LSB address of:
00 00
-is an oxygen sensor
00 03
-is a vacuum sensor
00 04
-is a pressure sensor (it's the same physical sensor as the vacuum sensor)
3F 04
-is the display showing the vacuum/pressure sensor data (this section of data might change between 3F 03 and 3F 04 depending on whether the sensor is reading Vacuum or Pressure at that moment)
3F 00
-is the display showing the oxygen sensor data
So overall, this program is going to be a little more work than I imagined. Also, I'm making this program to replace the displays that I currently have, so while this data is accepting a packet with 5 sets of data in it, I'll only be using it to collect 3 sets of data. I can collect data without the displays in-line, and would have if I had known they were adding their own information.
Either way, can still collect this data in the array and just parse out the desired information regardless of what other "data" is coming in the packet.