Programar dos sensores infrarrojos en arduino UNO R3

No te publico todo el código porque las salidas al display son las mismas.

int A = 2;
int B = 3;
int C = 4;
int D = 5;
int sensor_entrada = 8;
int sensor_salida = 10;
int entrada, entradaAnt = 0;
int salida, salidaAnt  = 0;
int contador = 0;

void setup()
{
    pinMode(A, OUTPUT);
    pinMode(B, OUTPUT);
    pinMode(C, OUTPUT);
    pinMode(D, OUTPUT);
    pinMode(sensor_entrada, INPUT);
    pinMode(sensor_salida, INPUT);
    contador = 0;
    Serial.begin(9600);
}

void loop() {

    entrada = digitalRead(sensor_entrada);
    if (entrada == LOW && entradaAnt == HIGH) {
        contador++;
        if (contador > 9) contador = 0;
    }
    entradaAnt = entrada;

    salida = digitalRead(sensor_salida);
    if (salida == LOW && salidaAnt == HIGH)  {
        contador--;
        if (contador < 0) contador = 0;
    }
    salidaAnt = salida;
    
    switch (contador)    {
        case 0:
            cero();
            break;
        case 1:
            uno();
            break;
        case 2:
            dos();
            break;
        case 3:
            tres();
            break;
        case 4:
            cuatro();
            break;
        case 5:
            cinco();
            break;
        case 6:
            seis();
            break;
        case 7:
            siete();
            break;
        case 8:
            ocho();
            break;
        case 9:
            nueve();
            break;
    }
}

Yo uso flacos no el sistema entreverado que preguntar el estado y luego el while si no se no ha cambiado.
El flanco asegura que solo se incrementa en ese caso. Tmb las condiciones del contador las consulto donde corresponde, no en el loop general porque nunca contador será menor que sero si lo incrementas y nunca sera mayor a 9 si lo decrementas.
Hay una mejora importante que simplifica el código en la salida al display 7 segmentos y es esta:

int A = 2;
int B = 3;
int C = 4;
int D = 5;
int sensor_entrada = 8;
int sensor_salida = 10;
int entrada, entradaAnt = 0;
int salida, salidaAnt  = 0;
int contador = 0;

void setup()
{
    pinMode(A, OUTPUT);
    pinMode(B, OUTPUT);
    pinMode(C, OUTPUT);
    pinMode(D, OUTPUT);
    pinMode(sensor_entrada, INPUT);
    pinMode(sensor_salida, INPUT);
    contador = 0;
    Serial.begin(9600);
}

void loop() {

    entrada = digitalRead(sensor_entrada);
    if (entrada == LOW && entradaAnt == HIGH) {
        contador++;
        if (contador > 9) contador = 0;
    }
    entradaAnt = entrada;

    salida = digitalRead(sensor_salida);
    if (salida == LOW && salidaAnt == HIGH)  {
        contador--;
        if (contador < 0) contador = 0;
    }
    salidaAnt = salida;
    
    presento7segmentos(contado)();

    
}

void presento7segmentos(byte tmp)
{
    digitalWrite(A, tmp && 0x01);
    digitalWrite(B, tmp && 0x02);
    digitalWrite(C, tmp && 0x04);
    digitalWrite(D, tmp && 0x08);
}

lo unico que cambia es que contador toma valores de 0 a 9. El valor de contador se envia a

presento7segmentos(contador);

la rutina lo unico que haces es toma el valor de la variable contador que ahora llamo tmp
tmp && 0x01 la enmascaro y obtengo los bits para cada caso
supongamos contador = 7
7 en su representación binaria de 4 bits es 0111
tmp && 0x01 = 0b00000111 & 0b00000001 = 1
tmp && 0x02 = 0b00000111 & 0b00000010 = 1
tmp && 0x04 = 0b00000111 & 0b00000100 = 1
tmp && 0x08 = 0b00000111 & 0b00001000 = 0
o sea obtienes lo mismo y ahorras 10 procedimientos como cero() a nueve()