🔘 خواندن دکمه با آردوینو — و چرا عدد تصادفی میگیری
خواندن یک دکمه ساده به نظر میرسد، ولی تقریباً همه در اولین تلاش به یک مشکل عجیب میخورند: عددی که آردوینو میخواند تصادفی است، حتی وقتی دست به دکمه نزدهای.
مشکل: پایهی شناور
وقتی دکمه فشرده نیست، پایهی آردوینو به هیچجا وصل نیست. به این حالت شناور میگویند و ولتاژش بین ۰ و ۵ سرگردان است — حتی با نزدیککردن دست هم تغییر میکند.
راهحل: مقاومت پولآپ داخلی
خوشبختانه آردوینو خودش مقاومت پولآپ دارد و فقط یک کلمه لازم است:
const int button = 2, led = 13;
void setup() {
pinMode(button, INPUT_PULLUP); // نه INPUT خالی!
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(button) == LOW) { // LOW یعنی فشرده شده
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
یک سر دکمه به پایهی ۲ و سر دیگرش به GND. همین. هیچ مقاومت بیرونی لازم نیست.
چرا LOW یعنی فشرده؟
کمی برعکس به نظر میرسد ولی منطقی است: مقاومت داخلی پایه را به ۵ ولت میکشد، پس حالت عادی HIGH است. فشردن دکمه پایه را به GND وصل میکند، پس LOW میشود.
دکمهی چهارپایه
کلیدهای کوچک بردبوردی چهار پایه دارند، ولی پایههای روبهرو همیشه به هم وصلاند. اگر کلید همیشه وصل به نظر میرسد، دو پایهی یک طرف را برداشتهای — کلید را ۹۰ درجه بچرخان.
لرزش کلید (دیبانس)
اگر شمارندهات با یک فشار، عدد ۳ جلو میرود، مشکل لرزش است: تیغههای فلزی در چند میلیثانیهی اول چند بار به هم میخورند. سادهترین راهحل، یک delay(50) بعد از تشخیص فشار است.