رفتن به نوشته‌ها

تابع pulseIn() در آردوینو

https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/

مدت زمان (برحسب میکروثانیه) نگه داشته شدن کلید در یک بار طی شدن حلقه loop را میدهد. یعنی این صورت نیست که هر چه دست را نگه داشتید روی دکمه زمان آن را محاسبه کند. صرفا از زمانی که دست روی کلید رفته تا زمانی که لوپ مجدادا به خط کد pulsin باز میگردد.

کد های زیر رو برای این مورد میتونید تست کنید:

int pin = 7;
unsigned long duration;

void setup() {
Serial.begin(9600);
pinMode(pin, INPUT_PULLUP);
}

void loop() {
duration = pulseIn(pin, LOW);
Serial.println(duration);
}

در کد زیر از پایه انالوگ به عنوان ورودی استفاده شده است.

int pin = 19;
unsigned long duration;

void setup() {
Serial.begin(9600);
pinMode(pin, INPUT_PULLUP);
}

void loop() {
duration = pulseIn(pin, LOW);
Serial.println(duration);
}

برای اینکه تعیین کنید فلان کلید اگر S ثانیه نگه داشته شد لامپی روشن شود؛ راه حل ساده آن میتونید از تابع delay قبل از کد کلیدزنی استفاده کنید؛ راه دیگه با استفاده از تابع pulsin هست. در این حالت مدت زمان نگه داشته شدن روی دکمه مد نظر نیست بلکه باید دکمه دو بار پشت سرهم زده شود تا لامپ روشن شود.

اینکه از کجا متوجه شویم شستی پشت سرهم زده شده است؛ مقدار داشتن تابع pulsein به ما کمک میکند. به صورت تقریبی اگر شستی دوبار پشت سرهم فشرده شود مدت زمان  X  میکروثانیه زمان میبرد.(این زمان مجموع دوبار فشردن شستی است، نه برای یکبار فشردن)

به کدهای زیر توجه کنید:

///////////// MENU
duration2=duration;
duration = pulseIn(A3, LOW);
duration3=duration+duration2;
if ( duration3 > 20000) Menu=1;

توضیحات کد بالا:

در صورتی که دکمه متصل به پین A3 دو بار پشت سرهم فشرده شود و جمع زمان فشرده بودن کلید بیشتر از ۲۰۰۰۰ میکروثانیه بشود وارد منو میشویم.

جلسه سیزدهم : استفاده از کتابخانه Bounce2

منتشر شده در آردوینو

اولین باشید که نظر می دهید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *