You can use this info and code: Hamming(8,4) with Arduino.
There's a PDF with documentation about the process of creating a class that implements hamming(8,4) and a link to the source code.
You can use any class that derives from Stream (like Serial or SoftwareSerial).
Edit: If you want to implement a Hamming ECC in a Arduino it would be useful to precompute all the possible message values (you'll find more info at the link above). In a Hamming(8,4) your message is 1byte = 4bits + parity 4 bits; so you must divide your bytes in nibbles. It would be better to put all that stuff (code, decode, manage the upper/lower part of the byte, etc...) in a class. An example using the Hamming class from the link above:
Tx:
#include <hamming.h>
Hamming hamming(&Serial);
char message[] = "Hello World!!";
void setup()
{
Serial.begin(9600);
delay(100);
}
void loop()
{
hamming.write(message);
delay(1000);
}
Rx:
#include <hamming.h>
Hamming hamming(&Serial);
char message[Hamming::SIZE];
void setup()
{
Serial.begin(9600);
delay(100);
}
void loop()
{
if(hamming.isMessageReady())
{
hamming.read(message);
Serial.println(message);
}
}
If you need to send other kind of info: a float, integer... you can do it, but I think it's a better idea to tokenize/detokenize your information and handle it like a "string".
P.S. You can use any kind of physical layer insofar as it's a child of Stream: Serial, SoftwareSerial...But I've only tested over Serial.