// INDICATE PANEL // Address 32 // 76543210 static uint8_t indicate_32 = 0b01011100; // Address 33 // 7XX43210 static uint8_t indicate_33 = 0b00000100; bool switch_1 = true, switch_2 = true, switch_4_5 = true; byte switch_3 = 3; // 2,3,4 bool flag_change_junc = false; // ---- Smart track algorithm if (flag_change_junc) { // Relays if (switch_1) { digitalWrite(RELAY_LINE1, HIGH); digitalWrite(RELAY_LINE2, LOW); } else { digitalWrite(RELAY_LINE1, LOW); digitalWrite(RELAY_LINE2, HIGH); } if (!switch_2 && switch_4_5) digitalWrite(RELAY_TRANSITION, HIGH); else digitalWrite(RELAY_TRANSITION, LOW); // Indicate Panel if (switch_1) { bitClear (indicate_32, 7); // Line 1 bitSet (indicate_32, 6); // Line 2 } else { bitSet (indicate_32, 7); // Line 1 bitClear (indicate_32, 6); // Line 2 } if (switch_2) { bitSet (indicate_32, 2); // Underline bitClear (indicate_33, 4); // Transition 1 if (switch_3 == 2) { bitClear (indicate_32, 1); // Line 4 bitClear (indicate_32, 3); // Line 5 bitSet (indicate_32, 0); // Line 6 bitClear (indicate_33, 2); // Line 7 } if (switch_3 == 3) { bitClear (indicate_32, 1); // Line 4 bitSet (indicate_32, 3); // Line 5 bitClear (indicate_32, 0); // Line 6 bitSet (indicate_33, 2); // Line 7 } if (switch_3 == 4) { bitSet (indicate_32, 1); // Line 4 bitClear (indicate_32, 3); // Line 5 bitClear (indicate_32, 0); // Line 6 bitSet (indicate_33, 2); // Line 7 } } else { bitClear (indicate_32, 2); // Underline bitSet (indicate_33, 4); // Transition 1 bitClear (indicate_32, 1); // Line 4 bitClear (indicate_32, 3); // Line 5 bitClear (indicate_32, 0); // Line 6 bitClear (indicate_33, 2); // Line 7 } if (switch_4_5) { bitSet (indicate_32, 4); // Line 3 bitClear (indicate_33, 1); // Yellow } else { bitClear (indicate_32, 4); // Line 3 bitSet (indicate_33, 1); // Yellow } if (switch_4_5 && !switch_2) { bitSet (indicate_32, 5); // Transition 2 bitSet (indicate_33, 0); // Transition 3 bitSet (indicate_33, 7); // Transition 4 bitSet (indicate_33, 3); // TP Line } else { bitClear (indicate_32, 5); // Transition 2 bitClear (indicate_33, 0); // Transition 3 if (switch_4_5) { bitClear (indicate_33, 3); // TP Line bitClear (indicate_33, 7); // Transition 4 } else { bitSet (indicate_33, 3); // TP Line bitSet (indicate_33, 7); // Transition 4 } } dataToI2C = indicate_32; addressI2C = 32; sendDataViaI2C(); delay(150); dataToI2C = indicate_33; addressI2C = 33; sendDataViaI2C(); flag_change_junc = false; }