Ist eigentlich garantiert, dass comm immer im erlaubten
Bereich liegt?
Wenn ja, koenntest Du mal ueberlegen, die erste if-then-else
Leiter (oder den switch) durch einen Array Zugriff zu ersetzen.
limitswitch = limitswitches[comm];
motor_1 = motors_1[comm];
motor_2 = motors_2[comm];
mit geeignet initialisierten Arrays
volatile uint8_t* motors_1[] = { 0, &OCR0A, &OCR1A, &OCR2A };
volatile uint8_t* motors_2[] = { 0, &OCR0B, &OCR1B, &OCR1B };
unsigned char limitiswitsches[] = { 0, END_1, END_2, END_3 };
Oder man koennte eine struct, bestehend aus motor_1, motor_2 und
limitswitch machen und davon wieder ein Array, ...