Ampliando la respuesta del ingeniero de pruebas:
Primero, un par de datos sobre los niveles: el estado inactivo (marca) de la línea debe ser menor que -3V (y no menor que -15) cuando un dispositivo compatible con RS232 está conectado. A la inversa, el estado inactivo de un dispositivo serie TTL debe estar entre 0 y 0,8 V.
Entonces, creo que la forma más fácil de detectar qué tipo de dispositivo está conectado es algo como lo siguiente:
simular este circuito : esquema creado usando CircuitLab
Para señales de nivel TTL, el dispositivo elevará el pin Rx de la placa a 5 V, por lo que el pin de detección del microcontrolador verá una lógica alta. Cuando se conecta un dispositivo compatible con RS232, el estado inactivo de la línea estará entre -3V y -15V. Los dos resistores forman un divisor, por lo que el pin de detección verá menos de 0.8V (cuando la entrada es -3V). D1 evita que el pin sensor pase más de unos pocos cientos de milivoltios por debajo del suelo para señales más fuertes, y el Z2 D2 protege contra entradas positivas mayores a + 5V (el estado espacial RS232).
Dependiendo de la velocidad en baudios que utilice su escáner, el circuito anterior puede incluso ser suficiente para condicionar la entrada (es decir, es posible que pueda conectar el pin RX y el pin sensor del microcontrolador a la línea etiquetada "To uController sense "La única dificultad con esto es que RS232 usa voltajes negativos para representar 1 y voltajes positivos para representar 0, que es lo opuesto a lo que se usa en TTL-land. Para solucionar esto, querrá agregar una compuerta XOR, como asi:
simular este circuito
Ahora, la línea "from uC invert" está conectada a una salida en tu micro. Cuando está alto, invierte la señal recibida y cuando baja pasa normalmente.