Здесь:
uint8_t temperature ;
//checks the sum and gets the temperature
if (bits[0] + bits[1] + bits[2] + bits[3] == bits[4]) {
temperature = bits[2];
}
printf("temperature : %d\n", temperature );
Если bits[0] + bits[1] + bits[2] + bits[3] == bits[4]
равно false
, то температура инициализируется (и может иметь любое значение - включая ноль или 15, одно из этих значений является нежелательным).
Возможно:
static uint8_t temperature = 0 ;
Так что, когда bits[0] + bits[1] + bits[2] + bits[3] != bits[4]
, будет использоваться последняя действительная температура.
Или, проще, если temperature
не будет использоваться в другом месте:
//checks the sum and gets the temperature
if (bits[0] + bits[1] + bits[2] + bits[3] == bits[4])
{
printf( "temperature : %d\n", bits[2] ) ;
}
То, что я представляю себе, происходит здесь, однако неинициализированное значение temperature
получилось равным 15, и вы печатаете его, после чего bits[0] + bits[1] + bits[2] + bits[3] == bits[4]
становится true
, а биты [2] всегда равны нулю,В этом случае ошибка находится на входе, а значения помещаются в bits[]
, и это решение приведет к тому, что значение всегда будет равно нулю.