A nemůže být chyba tady ?
unsigned char teplota = (T_byte1 << 8 )| T_byte2;
unsigned char vlhkost = (RH_byte1 << 8 )| RH_byte2;
Jestli se nepletu, tak unsigned char má 8 bitů. Neměl bys tam mít unsigned int místo unsigned char ?
unsigned int teplota = (T_byte1 << 8 )| T_byte2;
unsigned int vlhkost = (RH_byte1 << 8 )| RH_byte2;