- error_state = ~((PIND & 0x40)>>3 | (PINB & 0x07)) & 0xf;
-
- // if error and running: stop
- if (bit_is_set(error_state, 0) && m1_old != 0) motor1 = 0;
- if (bit_is_set(error_state, 1) && m2_old != 0) motor2 = 0;
- if (bit_is_set(error_state, 2) && m3_old != 0) motor3 = 0;
- if (bit_is_set(error_state, 3) && m4_old != 0) motor4 = 0;
-
- // if we start motor in error state: start with full power
- if (bit_is_set(error_state, 0) && m1_old == 0 && motor1 != 0) motor1 = 255;
- if (bit_is_set(error_state, 1) && m2_old == 0 && motor2 != 0) motor2 = 255;
- if (bit_is_set(error_state, 2) && m3_old == 0 && motor3 != 0) motor3 = 255;
- if (bit_is_set(error_state, 3) && m4_old == 0 && motor4 != 0) motor4 = 255;
+ error_state &= 0xf0; // clear lower bits
+ error_state |= ~((PIND & 0x40)>>3 | (PINB & 0x07)) & 0xf;