bz26:
Do you think it's not possible with my setup to achieve my desired output?
Yes, it's possible to use two hardware serial ports and one software serial port. As long as the SoftwareSerial baud rate is not more than 2 times slower than the hardware serial baud rate, it should work. With all 3 ports running at 9600, you should not lose any characters.
It would be better to use AltSoftSerial on pins 5 and 13, if you could change connections. SoftwareSerial is very inefficient, because it disables interrupts for long periods of time. It's not a problem for the sketch you have shown us, so foar. If you add more to your sketch, SoftwareSerial could eventually interfere with other parts of your sketch, or with other libraries.
The second best choice is my NeoSWSerial. It can be used on your current pins 8 & 9, at 9600.
Both AltSoftSerial and NeoSWSerial are available from the Arduino Library Manager, under the IDE menu Sketch -> Include Library -> Manage Libraries.
Your current problem is that you are not emptying the characters from the Paro sensor. Your sketch is losing characters because the input buffer is overflowing, not because there is some problem using 2 hardware serial ports and one software serial port. PaulS' suggestion would work if you prevented the input buffer overflow.
Here's what's happening:
The Serial1 input buffer has room for 64 characters. When a Paro message is ready, no more characters are read from Serial1 until the Honeywell has sent a complete message. Let's say that your sketch has read Paro message "000114.6601". I'll number each Paro message sequentially.
Now, while waiting for the 1st Honeywell message, the Serial1 input buffer continues to fill with 4 complete Paro messages. With 13 characters per Paro message, there will be 52 characters remaining in the input buffer. Here is the Serial1 input buffer, waiting to be read:
000114.6602
000114.6603
000114.6604
000114.6605
When the 1st Honeywell message is received, only one Paro message has been read from the Serial1 input buffer (114.6601). Then loop clears the newData flats, and one more Paro message is read from the Serial1 input buffer (114602). There are still 3 other Paro messages.
000114.6603
000114.6604
000114.6605
Then you wait for the 2nd Honeywell message. During that time, the 6th Paro message (13 characters) is sent, but there is only room for 12 characters. One character gets lost:
000114.6603
000114.6604
000114.6605
000114.660 <-- character '6' dropped
Then the 7th, 8th, 9th and 10th messages are completely ignored.
When the 2nd Honeywell message finally arrives, readParo pulls only one Paro message from the Serial1 input buffer 114.6603), leaving 2 complete messages plus one incomplete message in the input buffer (last character was dropped). There should be 38 characters (2*13 + 12) in the buffer:
000114.6604
000114.6605
000114.660
Now, when the 11th Paro message starts arriving, it can fit (38+13 = 51). But look at the input buffer contents:
000114.6604
000114.6605
000114.660000114.6611
As your program runs, various parts of a Paro message run together with the next message.
I would suggest emptying the Paro input buffer every time you have both messages:
void loop(){
readParo();
readHoney();
if (newParoData and newHoneyData) {
Serial.println(paroChars);
Serial.println(honeyChars);
newParoData = false;
newHoneyData = false;
// throw away ~4 Paro messages received while waiting for Honeywell
while (Serial1.available())
Serial1.read();
}
}