
ESP-0806
قابل استفاده برای تمامی مدلهای ESP-0806
دستور Delay یکی از توابع مهم برای ایجاد تاخیر زمانی در برنامههای ESP-0806 است. این دستور به برنامهنویس امکان کنترل زمانبندی عملیاتها را میدهد.
توجه داشته باشید با اجرای دستور Delay, پی ال سی تا سپری شدن زمان مشخص شده, منتظر مانده, روند اجرای دستورات را متوقف میکند و فقط دستورات مربوط به اینتراپت های مختلف اجرا می شوند.
ساختار کلی دستور
تعریف دستور Delay
void Delay(uint16_t delayTime);
پارامترها
delayTime: زمان تاخیر به میلیثانیه (0 تا 65535)
روشهای استفاده از دستور Delay
1- تاخیرهای ساده
2- تاخیرهای متغیر
مثالهای کاربردی
کنترل LED چشمک زن
// LED چشمکزن ساده
void blinkLED() {
while (1) {
SetQ(0, 0); // روشن کردن LED
Delay(500); // تاخیر 500 میلیثانیه
ResetQ(0, 0); // خاموش کردن LED
Delay(500); // تاخیر 500 میلیثانیه
}
}
// LED چشمکزن با سرعت متغیر
void variableBlinkLED(uint16_t onTime, uint16_t offTime) {
SetQ(0, 0); // روشن کردن LED
Delay(onTime); // تاخیر روشن بودن
ResetQ(0, 0); // خاموش کردن LED
Delay(offTime); // تاخیر خاموش بودن
}
کنترل موتور با تاخیر
// کنترل موتور با تاخیر راهاندازی
void motorStartup() {
SetQ(0, 0); // فعال کردن موتور
Delay(2000); // تاخیر 2 ثانیه برای راهاندازی
// موتور آماده کار است
}
// کنترل موتور با تاخیر توقف
void motorShutdown() {
ResetQ(0, 0); // غیرفعال کردن موتور
Delay(1000); // تاخیر 1 ثانیه برای توقف کامل
// موتور کاملاً متوقف شده
}
تولید پالس
// تولید پالس کوتاه
void generateShortPulse() {
SetQ(0, 1); // شروع پالس
Delay(10); // تاخیر 10 میلیثانیه
ResetQ(0, 1); // پایان پالس
}
// تولید پالس متوسط
void generateMediumPulse() {
SetQ(0, 1); // شروع پالس
Delay(100); // تاخیر 100 میلیثانیه
ResetQ(0, 1); // پایان پالس
}
// تولید پالس طولانی
void generateLongPulse() {
SetQ(0, 1); // شروع پالس
Delay(1000); // تاخیر 1 ثانیه
ResetQ(0, 1); // پایان پالس
}
کنترل توالی عملیات
کنترل با تاخیرهای متغیر
// کنترل با تاخیر بر اساس شرایط
void conditionalDelay() {
if (I0[0].Value) {
Delay(100); // تاخیر کوتاه
} else {
Delay(1000); // تاخیر طولانی
}
}
// تاخیر بر اساس سرعت
void speedBasedDelay(uint8_t speed) {
uint16_t delayTime = 1000 - (speed * 10); // تاخیر معکوس با سرعت
if (delayTime < 100) delayTime = 100; // حداقل تاخیر
Delay(delayTime);
}
کنترل با حلقه
کنترل با تایمر
تاخیرهای استاندارد
تاخیر با بررسی شرط
// تاخیر با بررسی شرط
void conditionalDelayWithCheck(uint16_t delayTime, bool (*condition)()) {
uint32_t startTime = espGetCurrentTime();
while ((espGetCurrentTime() - startTime) < delayTime) {
if (condition()) {
return; // خروج زودهنگام اگر شرط برقرار باشد
}
}
}
// استفاده
bool checkEmergencyStop() {
return I0[0].Value; // بررسی توقف اضطراری
}
conditionalDelayWithCheck(5000, checkEmergencyStop);
مدیریت خطا و ایمنی
تاخیر ایمن
// تاخیر با بررسی شرایط ایمنی
void safeDelay(uint16_t delayTime) {
uint32_t startTime = espGetCurrentTime();
while ((espGetCurrentTime() - startTime) < delayTime) {
if (emergencyStop) {
return; // خروج در صورت توقف اضطراری
}
}
}
تاخیر با محدودیت
// تاخیر با محدودیت حداکثر
void limitedDelay(uint16_t delayTime) {
if (delayTime > 10000) { // حداکثر 10 ثانیه
delayTime = 10000;
}
Delay(delayTime);
}
نکات مهم:
– دقت: تاخیر ممکن است کمی بیشتر از مقدار درخواستی باشد
– بلوک کردن: دستور Delay برنامه را متوقف میکند
– محدوده: حداکثر تاخیر 65535 میلیثانیه (حدود 65 ثانیه)
– کارایی: برای تاخیرهای طولانی از تایمر استفاده کنید
– ایمنی: همیشه شرایط ایمنی را در تاخیرهای طولانی بررسی کنید