در ابتدا با مفهوم کلی Button آشنا میشویم. در حالت کلی زمانی که Button فشرده نشده است، مداری که Button در آن قرار دارد یک مدار باز محسوب میشود. زمانی که Button وصل نیست و میخواهیم از آن یک مقدار خروجی بگیریم، مقداری که از مدار دریافت خواهد شد یک مقدار تصادفی بوده و این مقدار تصادفی در برنامه کمکی به ما نخواهد کرد. به منظور رفع این مشکل نیازمند یک مدار خارجی و یا تعریف حالتی خاص از پایه در برنامه آردوینو، هستیم.
مدار pull-down
برای استفاده از Button در مدارها و گرفتن خروجی 0 و 1 از آن (قطع یا وصل بودن Button) و همچنین برای استفاده پاسخ آن در برنامههای شرطی نیاز به یک مقاومت خارجی داریم چراکه زمانی که Button قطع است، عددی که برد آردوینو از آن دریافت میکند یک عدد تصادفی است درحالی که ما برای استفاده از آن در کدهای شرطی تنها به 0 و 1 نیازمندیم.

در حالت کلی این مقاومت خارجی را Pull-down مینامند و مدار کلی آن به شکل زیر میباشد:

در حالتی که Button قطع است، مثبت مدار (VCC) به دلیل قطعی Button به پایه آردوینو نمیرسد و پایه آردوینو به منفی مدار (GND) متصل است و بنابراین عدد دریافتی برد از مدار 0 است.
حال زمانی که Button وصل است، مثبت مدار (VCC) به منفی مدار (GND) متصل میشود و عدد دریافتی برد از مدار 1 است.
برای اتصال این مدار به آردوینو به شکل زیر عمل میکنیم:

برای مثال میتوانیم برنامهای را در آردوینو بنویسیم که زمانی که Button وصل میشود، عدد دریافتی برد از مدار بر روی سریال نمایش داده شود. حال کد زیر را بر روی برد آپلود میکنیم.
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
Serial.println(digitalRead(2));
if (digitalRead(2) == 1) {
Serial.println("ON!");
}
if (digitalRead(2) == 0) {
Serial.println("OFF!");
}
delay(500);
}
خروجی این برنامه به صورت زیر میباشد:

همانطور که در خروجی برنامه میبینید، زمانی که Button وصل است عدد دریافتی برد از مدار 1 میباشد و زمانی که قطع است عدد دریافتی برد از مدار 0 است.
مدار pull-up
حال نوع دیگری از این مقاومت خارجی به نام Pull-up وجود دارد که مدار کلی آن به شکل زیر میباشد:

در این مدار در حالتی که Button قطع است، منفی مدار (GND) به دلیل قطعی Button به پایه آردوینو نمیرسد و پایه آردوینو به مثبت مدار (VCC) متصل است و بنابراین عدد دریافتی برد از مدار 1 است.
حال زمانی که Button وصل میشود، از آنجایی که مثبت مدار (VCC) به منفی مدار (GND) متصل میشود و در طول مسیر، مقاومت تمام ولتاژ را مصرف میکند تا به ولتاژ صفر (GND) برسد و اتصال کوتاه رخ ندهد، عدد دریافتی برد از مدار 0 است.
برای اتصال این مدار به آردوینو به شکل زیر عمل میکنیم:

حذف مقاومت خارجی و استفاده از pull up داخلی
تنها تفاوت این دو مدار این است که در مدار Pull-down اگر Button قطع باشد عدد دریافتی 0 و اگر وصل باشد عدد دریافتی 1 است و در مدار Pull-up کاملا برعکس، اگر Button قطع باشد عدد دریافتی 1 و اگر وصل باشد عدد دریافتی 0 است. حال شاید برایتان سوال باشد چرا زمانی که میتوانیم از مقاومت Pull-down استفاده کنیم، نیازمند ساخت یک مدار مقاومت دیگر نیز به نام Pull-up هستیم؟
برد آردوینو مدار مقاومت Pull-up را به طور داخلی در خود دارد و تنها نیاز است که پایه مورد نظر را به صورت INPUT_PULLUP تعریف کرده و پایه دیگر Button را به GND وصل کنید و دیگر نیاز به بستن این مدار به صورت خارجی ندارید.
پس مدار کلی ما به صورت زیر است:

برای مثال میتوانیم برنامهای را در آردوینو بنویسیم که زمانی که Button وصل میشود، عدد دریافتی برد از مدار بر روی سریال نمایش داده شود.
برای این کار ابتدا نیاز است برنامه زیر را بر روی برد آر دوینو آپلود کنیم.
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop() {
Serial.println(digitalRead(2));
if (digitalRead(2) == 1) {
Serial.println("OFF!");
}
if (digitalRead(2) == 0) {
Serial.println("ON!");
}
delay(500);
}
خروجی این برنامه به صورت زیر است.

در اینجا خروجی برنامه دقیقا برعکس خروجی مدار Pull-down است طوری که زمانی که Button وصل است عدد دریافتی برد از مدار 0 و زمانی که Button قطع است عدد دریافتی برد از مدار 1 است.