معرفی
ARDUniaButton یک کتابخانه سبک و غیرمسدودکننده برای مدیریت کلیدهای فشاری در پروژه های Arduino است.
این کتابخانه با استفاده از millis() رویدادهای مربوط به کلید را بدون استفاده از delay() و بدون توقف اجرای برنامه مدیریت می کند.
کتابخانه توسط Hamidreza Milaninia برای پروژه های ARDUnia توسعه یافته است.
ویژگی ها
- Debounce غیرمسدودکننده با استفاده از
millis() - تشخیص Press و Release
- تشخیص Single Click
- تشخیص Double Click
- تشخیص Multi Click
- تشخیص Long Press
- تشخیص وضعیت Hold
- Repeat هنگام نگه داشتن کلید
- زمان بندی قابل تنظیم
- API مبتنی بر Polling
- API مبتنی بر Callback
- بدون تخصیص حافظه پویا
- بدون وابستگی به کتابخانه های شخص ثالث
- مدیریت صحیح سرریز
millis() - پشتیبانی از Active-LOW و Active-HIGH
- پشتیبانی از
INPUTوINPUT_PULLUP - پشتیبانی از
INPUT_PULLDOWNدر هسته های Arduino که آن را تعریف کرده باشند
اتصال سخت افزاری
در حالت پیش فرض، کلید بین پایه دیجیتال و GND قرار می گیرد:
Arduino GPIO ----[ BUTTON ]---- GNDکتابخانه در حالت پیش فرض از مقاومت Pull-Up داخلی استفاده می کند و بنابراین نیازی به مقاومت Pull-Up خارجی نیست.
زمان بندی پیش فرض
| تنظیم | مقدار پیش فرض |
|---|---|
| Debounce | 30 ms |
| Long Press | 1000 ms |
| Double Click | 400 ms |
| Repeat Initial Delay | 500 ms |
| Repeat Interval | 100 ms |
تمام این مقادیر قابل تنظیم هستند.
نمونه استفاده
#include <ARDUniaButton.h>
ARDUniaButton button(7);
void setup() {
Serial.begin(115200);
button.begin();
}
void loop() {
button.update();
if (button.wasPressed())
Serial.println("Pressed");
if (button.wasReleased())
Serial.println("Released");
if (button.wasClicked())
Serial.println("Click");
if (button.wasDoubleClicked())
Serial.println("Double Click");
if (button.wasLongPressed())
Serial.println("Long Press");
if (button.wasRepeated())
Serial.println("Repeat");
}API
وضعیت کلید
button.isPressed();
button.isReleased();
button.isHeld();
button.state();رویدادها
button.wasPressed();
button.wasReleased();
button.wasClicked();
button.wasDoubleClicked();
button.wasMultiClicked();
button.wasLongPressed();
button.wasRepeated();
button.event();
button.clickCount();تنظیم زمان بندی
button.setDebounce(30);
button.setLongPressTime(1000);
button.setDoubleClickTime(400);
button.setRepeat(500, 100);Callback
button.onPress(callback);
button.onRelease(callback);
button.onClick(callback);
button.onDoubleClick(callback);
button.onMultiClick(callback);
button.onLongPress(callback);
button.onRepeat(callback);نمونه های همراه کتابخانه
کتابخانه شامل نمونه های زیر است:
- BasicUsage — استفاده از API مبتنی بر Polling
- Callbacks — استفاده از Callback ها
- VolumeControl — استفاده عملی از قابلیت Repeat
سازگاری
ARDUniaButton از API های استاندارد Arduino استفاده می کند و وابستگی به کتابخانه های شخص ثالث ندارد.
نسخه فعلی روی موارد زیر آزمایش شده است:
- Arduino UNO
- ESP8266
- ESP32
معماری کتابخانه در library.properties به صورت عمومی تعریف شده است و محدود به یک معماری خاص نیست.
مجوز
این پروژه تحت مجوز MIT منتشر شده است.
توسعه دهنده
ARDUniaButton یک پروژه متن باز از ARDUnia است که توسط Hamidreza Milaninia توسعه داده شده است.
- ARDUnia: https://ardunia.ir/
- Hamidreza Milaninia: https://hrmnia.com/
- GitHub: https://github.com/ARDUnia/ARDUniaButton
ویژگی ها
- Debounce غیرمسدودکننده
- Press و Release / Single Click / Double Click /Multi Click
- Long Press / Hold / Repeat
- زمان بندی قابل تنظیم
- API مبتنی بر Polling / API مبتنی بر Callback
- Active-LOW و Active-HIGH / INPUT و INPUT_PULLUP
- بدون وابستگی به کتابخانه های شخص ثالث / بدون تخصیص حافظه پویا
نصب در Arduino IDE
روش اول: Arduino Library Manager
در Arduino IDE از مسیر زیر وارد شوید:
Sketch → Include Library → Manage Libraries
سپس عبارت ARDUniaButton را جستجو کرده و کتابخانه را نصب کنید.
روش دوم: نصب از فایل ZIP
آخرین نسخه Release را از GitHub دانلود کنید.
سپس در Arduino IDE به مسیر زیر بروید:
Sketch → Include Library → Add .ZIP Library
فایل ZIP دانلود شده را انتخاب کنید.
نصب در PlatformIO
در فایل `platformio.ini` پروژه، کتابخانه را از GitHub اضافه کنید:
```ini
lib_deps =
https://github.com/ARDUnia/ARDUniaButton.git
```
سپس پروژه را Build کنید.شروع سریع
#include <ARDUniaButton.h>
ARDUniaButton button(7);
void setup() {
Serial.begin(115200);
button.begin();
}
void loop() {
button.update();
if (button.wasClicked()) {
Serial.println("Button clicked!");
}
if (button.wasLongPressed()) {
Serial.println("Long press!");
}
}