le16toh() returns an unsigned type, which keeps the number as positive when cast to float. It needs to be explictly converted to a signed number first. Tested with real hardware.