INPUT_PULLUP
Keeps the input HIGH until the switch connects it to GND.
Read a button or limit switch reliably using the internal pullup resistor.
Read buttons, limit switches, and contact sensors with stable internal pullups.
Wire one side of the switch to the input pin and the other side to GND.
Enable INPUT_PULLUP so no external resistor is required.
Treat LOW as pressed and HIGH as released.
Mirror the state to D13 and Serial Monitor.
These are the sections learners should understand before changing the sketch.
Keeps the input HIGH until the switch connects it to GND.
Converts the raw pin read into a meaningful state.
Prints the state so learners can debug wiring.
Use this first table for the exact sample wiring, then use the board-family table when moving the sketch to another Arduino board.
| Code name | Sample pin | Mode | Connect to | Note |
|---|---|---|---|---|
| buttonPin | D2 | INPUT_PULLUP | Push button or limit switch to GND | Pressed reads LOW because the internal pullup is enabled. |
| outputPin | D13 | OUTPUT | Built-in LED or indicator LED through resistor | D13 is safe for the onboard LED on most Arduino boards. |
The code names stay the same; only the physical board pins may change by family. Always confirm with the board silkscreen when using clones or special variants.
| Board family | Digital | PWM | Analog | I2C | SPI | Interrupt |
|---|---|---|---|---|---|---|
| Uno / Nano / Pro MiniDefault target for these samples. | D0-D13 | D3, D5, D6, D9, D10, D11 | A0-A5 | A4 SDA, A5 SCL | D10 SS, D11 MOSI, D12 MISO, D13 SCK / ICSP | D2, D3 |
| Mega 2560Best for many sensors or multiple serial ports. | D0-D53 | D2-D13, D44-D46 | A0-A15 | D20 SDA, D21 SCL | D50 MISO, D51 MOSI, D52 SCK, D53 SS / ICSP | D2, D3, D18, D19, D20, D21 |
| Leonardo / MicroUSB serial can behave differently because the main MCU handles USB. | D0-D13 | D3, D5, D6, D9, D10, D11, D13 | A0-A5 plus extra analog-capable pins by board | D2 SDA, D3 SCL | ICSP header | D0, D1, D2, D3, D7 |
| Nano Every / Uno WiFi Rev2Check the board package pinout for exact PWM labels. | D0-D13 | PWM-marked digital pins | A0-A7 on Nano Every, A0-A5 on Uno WiFi Rev2 | SDA/SCL marked pins | ICSP/SPI marked pins | Use pins supported by digitalPinToInterrupt() |
| Uno R4 Minima / Uno R4 WiFi5V logic board; still confirm shield/library compatibility. | D0-D13 | PWM-marked digital pins | A0-A5 | SDA/SCL marked pins | ICSP/SPI marked pins | Use digitalPinToInterrupt(pin) |
| Due3.3V logic only; protect pins from 5V sensors. | D0-D53 | PWM-marked digital pins | A0-A11 | SDA/SCL and SDA1/SCL1 | SPI header | Use digitalPinToInterrupt(pin) |
| MKR / Nano 33 family3.3V logic. Some AVR-only libraries may need alternatives. | Board-marked digital pins | PWM-marked pins | Board-marked analog pins | SDA/SCL marked pins | SPI marked pins | Use digitalPinToInterrupt(pin) |
/*
Roboda verified Arduino sample 0002
Feature: Digital Input Pullup
Generated for online build, classroom practice, and hardware upload testing.
*/
const byte buttonPin = 2;
const byte outputPin = 13;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(outputPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
digitalWrite(outputPin, pressed ? HIGH : LOW);
Serial.println(pressed ? "pressed" : "released");
delay(80);
}
Not a member yet? Register now
Are you a member? Login now
New messages appear in the Finite LiveChat Ops Android app.
Rate the lesson quality, diagrams, and support experience.