Is there a serial software library which supports parity-bits?


i need to communicate with 2400 baud and 8E1 (even parity) via a software serial (because my 328 had only one UART which i need for other things).

So, AFAIK "SoftwareSerial", "AltSoftSerial" und "NewSoftSerial" are not able to handle this.

Any alternatives?

Why not use hardware serial for the comms that needs parity and use SS for the other thing(s) ?

Can you just not add a parity bit?

If the other end will only read the most significant bit or least significant bit after the End Of String byte...then just send a parity bit as such:

If it is most significant read first:

byte even_p=0b10000000;
byte odd_p=0b00000000;

If it is least significant read first:

byte even_p=0b00000001;
byte odd_p=0b00000000;

On the arduino end, just grab the extra byte after the "END OF STRING" byte...

I have no idea if this will work, but yeah...may be worth exploring?

Can you just not add a parity bit

8E1 are nine bits, which is even less configurable.

I found a version of AltSoftSerial, which claims to support Parity and optionally 2 stopbits.

See attachment.
Feedback welcome. (Eventually to Paul Stoffregen, too) (18.7 KB)


thanks a lot! Firstly it seems to work, but i have issues with AltSoftSerial, even with the unmodified version of it.

in my test-setup i have connected pin 8 of Arduino with TX-Port of a separate USB to Serial converter. Then i emitt bytes from 0-255 from a PC via this converter to the Arduino. The bytes will be received from AltSoftSerial and send via it’s internal serial (USART0) to the USB port of the Arduino and shown on a terminal app on the same PC. So it’s kind of a loopback.

Then i try to send using 2400 8E1 with the following result:

00 FF FE 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 00
FF 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 00 FF
FF 01 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE FF
00 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB 00 FD FE 00

Some bytes are wrong. Then i tried to use it without parity, but it gives an equal result, mixed up bytes. Last i use the unpatched version of AltSoftSerial with seems to have the same issue. Using SoftwareSerial (without parity, also) everything works as expected.

So, whats wrong with AltSoftSerial?