پورتال دیجیتال

منو

ذخیره ریموت کنترل (رادیویی) RF کدلرن در آردوینو و ESP8266

ریموت کنترل کد لرن (Learning Code)

در این آموزش نحوه ست کردن ریموت رو با فشار دادن یک دکمه رو به شما در آردوینو و ESP8266 یاد می دهم ، این جزء مواردی بود که خودم هم دنبالش بودم و با کمی تست چندین روش برای ذخیره کد های ریموت پیدا کردم که یکی از این روش رو در این آموزش ارائه می دهم. اول از اینکه در مورد ریموت های کد لرن باید بگم که با فشار دادن هر دکمه یک کد برای شما ارسال می کند که در ریموت های ۲۴ بیتی ۲۰ بیت اول آدرس و ۴ بیت آخر مربوط به دکمه ها است و این مقادیر ثابت هستند و کمک می کند با روش های مختلف بدون نیاز به ذخیره همه کلید ها ، کد ارسالی رو تشخیص داد.

تجزیه و تحلیل کد های ارسال توسط ریموت کنترل کد لرن

همان طور که در زیر مشاهده می کنید ۲۰ بیت اول ارسالی کلید ها شبیه هم هستند و ۴ بیت آخر هم که مربوط به کلید های یک ریموت ۴ دکمه ایی است با فقط با جابجا شد بیت ۱ چهار کد متفاوت ایجاد کرده است پس برای ذخیره کردن ریموت فقط کافی است یک دکمه را ذخیره کنید و بعد برای تشخیص دکمه دیگر بودن ذخیره کردن با مقایسه ۲۰ بیت اول دستورات متفاوتی اجرا کنید.

برای درک بهتر این موضوع و کدی برای شما آماده کردم که تمام این موارد انجام شده و حتی قالبیت ذخیره ۱۰۰ ریموت رو به شما می دهد که بر اساس ظرفیت حافظه EEPROM تغییر می کند.

نحوه ذخیره ۱۰۰ ریموت کنترل RF کد لرن در آردوینو و ESP8266

کتابخونه مورد نیاز رو از اینجا دانلود کنید. این کد رو برای برد های آردوینو و ماژول ESP8266 می تونید استفاده کنید فقط در برد Uno مقدار mySwitch.enableReceive(14) برابر صفر و در ESP8266 برابر ۱۴ قرار بدهید در این پروژه بر روی پایه ۱۴ تنظیم شده چون کد رو بر روی ESP8266 تست زدم ، نکته بعدی در Uno بعد از دستور EEPROM.write برای ذخیره نیاز به دستور EEPROM.commit() نیست ولی برای ESP8266 حتما باید بعد از هر بار نوشتن این دستور هم اجرا بشه ، برای ذخیره هر ریموت ۴ بایت از حافظه EEPROM استفاده می شود که من در اینجا حافظه ی EEPROM رو با ظرفیت ۱۰۲۴ بایت پیکربندی کردم و این مورد فقط در ESP8266 استفاده می شود که حداکثر ۲۰۴۸ است.

نحوه عمکرد هم به این صورت است که با ارسال درستور REG=x در سریال ترمینال به برنامه منتظر دریافت کد به مدت ۳۰ ثانیه می ماند که دستور دریافت کد ذخیره و در صورت سپری شدن زمان ۳۰ ثانیه پیغام Timeout به شما نشان می دهد ، x شماره حافظه است. خط ۹۰ تا ۹۳ که یه فرمت کامنت تغییر برای پاک کردن کامل حافظه EEPROM است و نکته ایی رو باید در نظر داشته باشید که مقدار REG برابر ۰ نباشد.

اجرای عملکردهای مختلف به وسیله یک دکمه با رویداد OnLongPress (هنگام فشار دادن طولانی)

برای اینکه بتونید فقط با یک دکمه چندین عملکرد مختلف داشته باشین مثل: اضافه کردن ریموت ، حذف همه ی ریموت ها و ریست کلی قطعه کدی رو آماده کردم که در زیر مشاهده می کنید. درصورتی که دکمه را به مدت ۱ الی ۲ ثانیه فشار دهید و سپس رها کنید متن “Press any button…” در سریال ترمینال چاپ می شود ، در صورتی که دکمه را بین ۴ الی ۶ ثانیه فشار دهید و سپس رها کنید متن “Remove all remote’s” در سریال مانیتور چاپ می شود و در صورتی که دکمه را بیش ۹ ثانیه فشار دهید و سپس رها کنید متن “Factory reset” در سریال مانیتور چاپ می شود.

ذخیره خودکار کد ریموت به ترتیب در حافظه

توسط قطعه کد زیر که از خط ۱۰۰ به بعد با جایگزین شود ، کد دریافتی از ریموت به صورت خودکار در اولین حافظه خالی که مقدارش برابر با صفر باشد ذخیره و شماره حافظه ایی که کد ذخیره شده رو در سریال مانیتور چاپ می کند نکته: برای ذخیره ریموت این بار فقط کلمه REG رو ارسال کنید و شماره حافظه رو نیاز نیست تعیین کنید.

دسته :  تازه ترین نوشته ها

22
دیدگاه بگذارید

avatar
2 Comment threads
20 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
hasanمجتبیامیر امراییمحمدرضا Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
محمدرضا
Guest
محمدرضا

سلام نشکر از پست خیلی خیلی مفیدتون
ببخشید ی سوال داشتم شما تو این پست نوشتین ((در این آموزش نحوه ست کردن ریموت رو با فشار دادن یک دکمه رو به شما در آردوینو میدهم)) منظور دکمه لرن هست ؟؟ اگه هست کجا تعریف شده ؟؟ اگه میشه یه راهنمایی کنین بدجور لازم دارم

hasan
Guest
hasan

سلام تشکر از پست بسیار مفیدتون
فقط یک مشکلی که هست من مقدار mySwitch.enableReceive( رو صفر گذاشتم ولی هیچ عکس العملی از اردینو دریافت نکردم و یک سواله دیگه قسمت دوم آموزش رو جایگزین viod loop آموزش اولی کنیم ؟؟