Bene, iniziamo il discorso dicendo che i pin di ingresso dei nostri cari microcontrollori hanno un'impedenza molto elevata, ciò significa che non assorbono corrente (in teoria).
Quindi, se si lascia un ingresso libero, collegato a nulla, esso è libero di captare tutte le interferenze del mondo circostante e quindi restituire uno stato logico incerto (0? 1? mezzo zero e mezzo uno?

)
quindi quando si collega un pulsante a un ingresso si realizza un circuito con un resistore definito di PULL-UP o di PULL-DOWN a seconda del collegamento.
Dallo schema si nota che quando il pulsante non è premuto il resistore tiene l'ingresso a livello logico alto (ricordandoci che l'ingresso non assorbe corrente la cdt sul resistore è nulla), invece quando si preme l'ingresso è forzato a 0 dal pulsante, mentre una certa corrente fluisce sul resistore che si trova ora collegato a massa.
Per questo i pullup hanno solitamente valori elevati, per non far scorrere troppa corrente (fondamentale poi per risparmiare energia)
il pulldown... beh, scambia resistore e pulsante, avrai 0 a pulsante non premuto ed 1 a pulsante premuto
comunemente vedo usare più spesso il pull-up, credo per la comodità circuitale di riferire gli ingressi a massa...
Spero di esser stato chiaro

ciao!