Vamos de nuevo...
No te compliques con querer entender o imaginar como circulan las corrientes, para ir tan profundo puedes consultar la hoja de datos del micro que te da lujo de detalles al respecto. Todo a su tiempo.
Para hacerlo mas sencillo supongamos que todos los circuitos trabajan con 5V. ¿De acuerdo?
Los circuitos digitales, genéricamente hablando, pueden tener 2 estados*: BAJO y ALTO (0 y 1). Esos estados representan 2 niveles de tensión, 0V (masa) y 5V (o sea la alimentación o Vcc).
Entonces: 0V es 0 en digital (LOW en lenguaje arduino) y 5V es 1 en digital (HIGH en arduino).
Tengamos en cuenta que lo antedicho es representación "para humanos" porque al micro en sí (mejor dicho a sus circuitos internos) solo le importa si hay 0V o 5V y actúa en consecuencia.
Entrada: lee el estado (o sea la tensión) de lo que hay conectado al pin y nada más que eso. No puede por si misma fijar un estado 0 ni 1.
Por hacer una analogía sería como las puntas de un multímetro, cuando lee tensión (función voltímetro) solo detecta lo que hay en los cables que tocan pero no hay tensión en las puntas cuando están sobre la mesa porque el voltímetro no genera nada, solo mide (¿se entiende la idea?).
Salida: pone en el pin la tensión (0V ó 5V) correspondiente al estado deseado (BAJO o ALTO).
Entonces, cuando quieres saber cuál es el estado de un pin lo defines como entrada. Lo normal es definirlo durante el desarrollo, en tal pin conecto el sensor que quiero leer, y como lo quiero leer será entrada.
Cuando quiero enviar un estado, entonces al pin lo defino como salida. Otra vez, lo hago durante el desarrollo, en tal otro pin voy a conectar un led que debo encender, entonces es salida.
Ahora vamos al tema de las resistencias PULL-UP en las entradas.
Veamos el sensor más sencillo, un pulsador, mecanicamente tiene 2 estados: abierto o cerrado. Ahora imaginemos que una de sus patas (no digo pin para no confundir con el micro) la conectamos a masa. Cuando se pulsa cierra contacto y en la otra pata también tengo masa.
Pero cuando lo suelto esta otra pata queda "al aire", no hay nada conectado a ella. ¿Ok?
Ahora esa pata la conectamos a un pin que definimos como entrada. Cuando actúo sobre el pulsador (vamos, lo pulso) cierra circuito a masa y la entrada lee 0V, o sea.. "0" (o LOW en lenguaje arduinense :o ).
Pero cuando lo libero, ¿qué valor lee la entrada si el circuito está abierto y no hay ninguna tensión?
Acá entra en juego la resistencia pull-up, que se encarga de poner 5V en la pata que estaba "al aire", así el pin de entrada puede leer ese valor (HIGH) cuando el pulsador está sin pulsar.
En resumen, el LOW lo "manda" el pulsador y el HIGH lo fija la resistencia.
También hay configuraciones pull-down, en este caso la resistencia va a masa para "poner" el estado LOW cuando el circuito está abierto y el pulsador (conectado a 5V) da el HIGH al ser pulsado y cierra circuito.
Pero ojo, la necesidad de resistencias pull-xxx depende de lo que se conecte en esa entrada, por ej. la mayoría de los módulos generan ambos estados entonces no necesitan resistencias, por el contrario un simple pulsador si la necesitará, como vimos antes.
Redondeando, para actuar sobre una carga (LED, transistor, la entrada de un módulo que maneje otra cosa, o "sacar" un bit por serial) se usa una salida, independientemente de si esa carga reacciona a LOW o a HIGH (léase masa o fuente, respectivamente)
Para leer el estado de un sensor, pulsador, o recibir un bit por serial, uso una entrada, sin importar si va a llegar un LOW o un HiGH. Eso a la entrada no le "importa", el soft se encargará de su tratamiento.
Ahora conectando con la idea de usar un pin para encender el LED del sensor, porque este sólo requiere ir a tierra ¿Debo entonces colocar la puerta en input y LOW?
¿Y si quiero apagar el led sólo ponerlo en alto?
NO, el micro usará una SALIDA porque "enviará" un estado, que comandará al LED, hacia la entrada del módulo.
Si, el LED se enciende con LOW.
Y sí, pones la salida en HIGH, o sea que la entrada del módulo lee HIGH y apaga el LED.
Finalmente,
¿si estoy en pullup mi puerta de arduino se "chupa" los electrones y al pasarla a low es como si los dejo que vayan a tierra?
Si, mas o menos es eso, pero no te compliques, sólo entender que como la entrada no puede por sí misma establecer un estado, a veces, necesita ayuda de una resistencia.
(*) Hay circuitos que tienen 3 estados de salida: ALTO, BAJO y HiZ (alta impedancia). Este último estado implica que la salida virtualmente está desconectada. Se llaman circuitos "tristate" (o triestado, en la lengua de Cervantes). Por ahora lo dejamos así, solo a título informativo, para no complicarte más. 