Air Freshener With ESP8266

پروژه تبدیل خوشبو کننده به اینترنت اشیا با ESP8266 (قسمت پنجم)

در ادامه ی آموزش اینترنت اشیا و تبدیل اسپری خوشبو کننده به سیستم IOT با استفاده از esp8266، به بخش تایمر رسیده ایم. در این بخش با نحوه ی فراخوانی تایمر و استفاده از آن بر روی esp8266 آشنا می شویم.

استفاده از تایمر در esp8266 :

برای شروع استفاده از تایمر کتابخانه ی Ticker را فرا خوانی می کنیم. و از کلاس Ticker یه آبجکت با هر اسمی که دوست داریم ایجاد می کنیم. توجه داشته باشید که esp8266 مثل آردوینو تایمر سخت افزاری جداگانه ندارد البته سری یک آن که پروژه ی ما هم با آن است.

 

#include <Ticker.h>
Ticker timer;

با دستور بعدی به تایمر می گوییم که در چه بازه ی زمانی ای کدام تابع را صدا بزن.

  timer.attach (0.5, spraying);

با این دستور به تایمر می گوییم که هر نیم ثانیه یک بار تابع Spaying  را اجرا کن.

تابع اسپری:

void spraying()
{
  TimeForSpray++;
  switch (flagLight) {
    case 11:
      if ((digitalRead(lightPin) == HIGH) && (TimeForSpray == 1))
      {
        digitalWrite(sprayPin, LOW);
        Serial.println(F("Spraying In Light"));
      }
      else if ((TimeForSpray == (val * 120)) || (digitalRead(lightPin) == LOW))
        TimeForSpray = 0;
      break;
    case 22:
      if ((digitalRead(lightPin) == LOW) && (TimeForSpray == 1))
      {
        digitalWrite(sprayPin, LOW);
        Serial.println(F("Spraying In Dark"));
      }
      else if (TimeForSpray == (val * 120) || digitalRead(lightPin) == HIGH)
        TimeForSpray = 0;
      break;
    case 33:
      if (TimeForSpray == 1)
      {
        digitalWrite(sprayPin, LOW);
        Serial.println(F("Spraying In All Time"));
      }
      else if (TimeForSpray == (val * 120))
        TimeForSpray = 0;
      break;
  }
  if (TimeForSpray == 2 || TimeForSpray == 0) {
    digitalWrite(sprayPin, HIGH);
  }
}

برای اینکه زمان را بتوانیم بشماریم یک متغیر تعریف کرده ایم و در اول این تابع یک عدد به آن اضافه می کنیم. وقتی این متغیر مثلا 60 باشد و چون ما هر نیم ثانیه این تابع را صدا زدیم. یعنی 30 ثانیه گذشته است. عددی که ما در رابط کاربری تنظیم کرده ایم به دقیقه است. پس آن را به ثانیه تبدیل می کنیم. برای این کار آنرا در 120 ضرب کرده ایم. چون ما داریم هر نیم ثانیه را می شماریم. با قرار دادن یک دستور if  و مقایسه ی زمان سپری شده و زمانی که تنظیم شده، خیلی راحت برنامه متوجه می شود که چه زمانی باید اسپری کند. البته در این دستورات mode را هم در نظر گرفته ایم. که کاربر چه مدی را برای اسپری انتخاب کرده است. برای اینکه دستورات هر مد را جدا کنیم از دستور switch استفاده کرده ایم. دیگر شرطی که ما برای اسپری کردن در نظر میگیریم روشن و تاریک بودن محیط است. که از طریق پایه ی دیگر esp8266 آنرا متوجه می شویم. این بخش در قسمت سخت افزار توضیح داده می شود.

وقتی از Ticker استفاده می کنیم باید توجه داشته باشید که در تابعی که ما را ارجاع می دهد نمی توانیم از دستور delay  استفاده کنیم. و این دستور کار نمی کند.

در ادامه فیلمی را که تهیه کرده ام را قرار می دهم:

 

 

 

دیدگاه ها :

من بات نیستم

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

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