Pull up/down resistor question

What's the point of external pull up/down resistors if the arduino has internal pull up/down resistors?

All tutorials I have seen on the net with buttons/switches seem to use an external resistor. I have yet to come across one that teaches how to enable the internal one.

Is there some cases when the internal one simply isn't good enough?

Using an external pull-down resistor results in code that is more intuitive for the beginner because the digitalRead value is HIGH when the button is pressed. It can seem odd that the value goes LOW when active.

Using an external resistor also makes it more obvious that a pull-up or pull-down is needed (you may be surprised how many people forget to use a pull-up when they get started)

But if you are comfortable with the reversed logic of pull-ups then the only reason to use external resistor is the rare occasion when a lower value resistance is needed instead of the relatively high value ( 20k) internal ones

if the arduino has internal pull up/down resistors?

Also the AVR has a internal pull-up resistor option but does not have a pull-down option. Writing a 1 to a digital input pin enables the internal pull-up but writting a 0 only turns off the internal pull-up resistor, not enable a pull-down resistor.

Lefty

Hmm I see why that can be confusing. Thanks for the answer.

You sometimes also need pull up or pull down resistors external to your microcontroller to hold signals in known states during a reset when the microcontroller is not active.

This is because there is a small amount of time between power up or reset to when the internal pull ups or outputs on the microcontroller become active. During this time these output pins are floating, which can cause things they are supposed to be driving to do random and sometimes unsafe or destructive things.