communication série entre deux Arduino

J'ai fait quelques essais.

Sur la carte Rx :

long val = 0x74CBB1;

Serial.print(0xff, BYTE); // la valeur envoyée est 0xFF
Serial.print((val >> 24) & 0xFF, BYTE); // la valeur envoyée est 0x0
Serial.print((val >> 16) & 0xFF, BYTE); // la valeur envoyée est 0x74
Serial.print((val >> 8) & 0xFF, BYTE); // la valeur envoyée est 0xCB
Serial.print(val & 0xFF, BYTE); // la valeur envoyée est 0xB1

Si je remplace BYTE par HEX, sur le moniteur série j'ai FF074CBB1, donc jusque là ça va.

Sur la carte Tx, je pensais qu'avec ce code j'arriverais à récupérer mes valeurs :

while (Serial.available() >= 5) {  //  5 = 1 octet pour FF + 4 octets
    if (Serial.read() == 0xff) { // le premier octet, équivalent à ton T
val = ((Serial.read() << 24) |(Serial.read() << 16))|((Serial.read() << 8) |(Serial.read())); 

Serial.println(val,DEC);

mais cela ne fonctionne pas, la valeur retournée est -19969.

Pour voir ce que j'avais dans le flux, j'ai essayé de faire :

Serial.println(serial.read(),HEX)

Les 100 premières lignes j'ai :

FF
74
CB
B1
FF
74
CB
B1
FF
74
CB

Et ensuite je n'ai plus qu'une valeur qui est retournée :

CB
CB
CB
CB
CB
CB
CB
CB
CB
CB
CB
CB