How do I pull up D1-D6 using 10k ohm resistors?

I'm using push buttons to control CR servos (button1=turn CW; button2=turn CCW). How do I pull up D1-D6 and what does that do exactly? I can't find a tutorial that explains it well enough how to use the resistors.

• Why do you need to pull up six inputs if you only have two buttons? Jun 16, 2017 at 22:14
• use `pinMode(D1, INPUT_PULLUP)` and save your resistors for something else. Jun 17, 2017 at 1:03
• @MarkSmith I've got multiple servos. Jun 18, 2017 at 16:55

Typical Atmel AVR inputs can “float” when left open, that is, may drift high or low. The idea of a pullup or pulldown resistor is to give an otherwise-open input a definite value – high if pulled up, low if pulled down.

The values of pullup and pulldown resistor values are a tradeoff: You can use high values to minimize the current that a sensor device must overcome when it switches values, and to minimize power loss in a battery-powered device. Or you can use low values to get faster switching when you release the input.

There are built-in pullup resistors on most AVR inputs. (But A6 and A7 on some models of ATmega328's don't have pullups.) To use a built-in pullup, initialize the input pin with (for example) `pinMode(mypin, INPUT_PULLUP)` instead of `pinMode(mypin, INPUT)`.

To sense the state of a simple normally-open switch, you would connect one side of the switch to an input, and the other side to ground. Initialize the pin to be a pulled-up input: eg, `pinMode(mypin, INPUT_PULLUP)`. Regard the switch as not-pushed when `digitalRead()` shows `HIGH`, and pushed when it shows `LOW`.

If you really want to use external pullup resistors, connect the switch as above – one side to ground, one side to a pin – and connect a resistor between +5 V and the pin. That is, one end of a resistor and one side of a switch will connect to the input pin. In this case, use either `INPUT` or `INPUT_PULLUP` as the `pinMode` setting; it makes no big difference because the internal pullup resistor has a fairly high value, eg 40 KΩ.

• Do you think for this Thing - thingiverse.com/thing:239105 - I can use internal pull-up resistors? It's telling me to use external, but I don't understand why. Thanks for your help! Jun 19, 2017 at 16:44
• I don't know what D2-D6 (which that page refers to as having pull-ups) are used for in that project. If it's switch or rotary encoder inputs, internal pullups should be fine. If it's I2C, maybe not. Anyhow, I didn't find a link to a circuit diagram that might reveal how D2-D6 are used. Do you have a circuit diagram or a link? Jun 19, 2017 at 20:53
• The trouble is that there isn't a circuit diagram. D2-D6 are going to the buttons and joystick on a shield (sparkfun.com/products/9760). When you press those buttons or move the joystick CRservos will move clockwise or counter-clockwise. Jun 19, 2017 at 20:57
• That sparkfun.com/products/9760 page says internal pullups are ok: “The momentary push buttons are connected to Arduino digital pins 2-6; when pressed they will pull the pin low (utilizing the internal pull-ups of the Arduino)” Jun 19, 2017 at 21:05
• That's great! Did not see that. There doesn't seem to be any benefit to using external pullups. Jun 19, 2017 at 21:15