لینک قسمت معرفی کتابخانه

لینک راهنمای موضوعی مطالب

 

 

موضوع این قسمت : ساختن منو _ ساختن تابع عملکرد برای متغیرهای تنظیمی

 

 درود به شما.

 

در این قسمت قصد دارم در مورد برنامه نویسی توابع عملکرد مربوط برای یک متغیر تنظیمی توضیح بدم.

 

این قسمت  راهنما  4 بخش مهم دارد که به شرح زیر هستند:

*****************************************

1-  توابع مربوط به متغیر تنظیمی که به صورت عدد نمایش داده میشود .

2 - توابع مربوط به یک متغیر تنظیمی که  به صورت level ( نمایش به صورت کپسول )  نمایش داده خواهد شد .

3-  توابع برای متغیرهای به غیر از float , int_32 و برای تنظیم یکی از عناصر متغیر سراسریmenu_4pin_handle_config

4- توابع عملکردی برای موارد متفرقه .

 

****************************************

در ادامه یکایک این موارد را توضیح خواهم داد .

 

****************************************

****************************************

شماره 1_ برنامه نویسی  توابع مربوط به متغیر تنظیمی که به صورت عدد نمایش داده میشود .

 

برای ورود به بحث لطفا ابتدا به تصویر زیر که مربوط به تابع عملکردی برای نمایش یک متغیر float  است نگاه کنید .

 

علاوه بر مطالب و نکاتی که برای نوشتن توابع زیرمنوها در   قسمت 10   از قبیل گرفتن پشتیبان از تنظیمات و فونت و تریتیب نمایش و غیره ...

یک سری نکات هم در خصوص توابع مربوط به متغیرها وجود داره :

********************************

1-1 - در خط  278 : متغیر defulttheme_dec_digit را میبنید که مقدار دهی شده است . این متغیر مربوط به تم پیشفرض هست که برای نمایش اعداد اعشاری ، تعداد رقمهای اعشار ( حداکثر 10 تا )را برای نمایش مشخص میکند .

و همانطور که میبینید (در کادر سبز)  از مقدار آن پشتیبان گرفته شده است و در آخر مقدار آن بازیابی شده است . ( کادر آبی ) 

 

********************************

در قسمت =======  set config  ======= به عناصری از متغیر سراسری ، بر حسب نیاز مقدارهایی را داده ایم .

که تقریبا واضح است و نیاز به توضیح خاصی ندارد .ولی 3 مورد را توضیح میدم .

 

********************************

1-2- خط 284 :

در این عنصر از متغیر سراسری است ، آدرس متغیری را که میخواهیم مورد تنظیم قرار بگیرد وارد میکنیم (کتابخانه فقط نوع float و int_32  را میشناسد و برای دیگر انواع در ادامه مطلب توضیح داده خواهد شد ) که بهتر است به صورت void  type casting  شود تا احیانا کمپایلر خطا یا هشدار تولید نکند .

 

********************************

1-3- خط 288 :در این عنصر از متغیر سراسری ، آدرس تابعی مربوط به قسمت تم را قرار میدهیم  که مقدار متغیر را به شکل  عدد را روی صفحه نمایش میدهد .

********************************

1-4- مقدار small_step :  ( خط 292 ) توجه داشته باشید که برای مقادیر float  ، این مقدار نباید 0 باشد .

 

***هشدار : اگر این مقدار 0 باشد ، کتابخانه با آن به مانند یک متغیر از نوع صحیح ( int_32 ) رفتار خواهد کرد . در هنگام مقدار دهی به عناصر متغیر سراسری لطفا به این مورد دقت کنید .

********************************

1-5- ذخیره مقدار متغیر ( کادر قرمز ) :

همانگونه که در تصویر میبینید ، تابع   menu_4pin_handle_variable  ( خط 295 ) یک مقدار برگشتی دارد که در یک متغیر به نام  flagذخیره خواهد شد .

اگر مقدار متغیر تنظیمی توسط کاربر تغییر داده شده باشد . یک بیت خاص از متغیر flag  مقدار 1 خواهد داشت .

از این بیت میتوان برای تشخیص نیاز به ذخیره کردن متغیر تنظیمی  ( یا هر عملیات دیگری که مورد نیاز باشد ) استفاده کرد که نحوه ی اینکار در کارد قرمز مشخص شده است .

البته کاربر هر کد دلخواهی را میتوان در بلاک if  بنویسد و تابع ی که در تصویر میبینید مربوط به تم است و به طور پیشفرض خالی است و باید توسط کاربر برنامه نویسی شود .

 

 

****************************************

****************************************

2 - توابع مربوط به یک متغیر تنظیمی که  به صورت level ( به صورت استوانه )  نمایش داده خواهد شد .

بعضی متغیرها هستند که برای تنظیم عدد خاصی برای آنها مد نظر نیست بلکه مقدار آنها به صورت در صد مهم است مانند نور صفحه ، بلندی صدا و غیره ...

در تم یک تابع مخصوص برای اینکار وجود دارد که مقدار متغیر را به صورت یک کپسول نمایش میدهد .

 

 

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

این تابع دقیقا شبیه همان تابع برای نمایش متغیرها به صورت عدد هست ولی دو تفاوت کوچک دارد

2-1-کادر سبز:

  تابع defulttheme_print_level که جزیی از تم میباشد و مقدارمتغیر را به جای عدد به صورت استوانه نمایش میدهد .

2-2-کادر قرمز :

 لطفا دقت کنیدضروری است  small_step  برابر 0 باشد .

 

****************************************

****************************************

 

 3 -  توابع برای متغیرهایی به غیر از float , int_32 و برای تنظیم یکی از عناصر متغیر سراسریmenu_4pin_handle_config

 

قبلا گفته بودم که کتابخانه متغیر های تنظیمی  که به آن معرفی میشود را با فقط با نوع float و int32_t  شناسایی میکن .

حال سوال پیش می آید اگر خواستیم به طور مثال داده ای از نوع char  را تنظیم کنیم چطورمقادیر آنرا به کتابخانه وارد کنیم ؟

 

برای پاسخ به این سوال لطفا به تصویر زیر نگاه کنید .این تصویر مربوط به تابع عملکردی برای تنظیم تایم اوت است که متغیری از نوع uint8_t  میباشد .

 

 

3-1 : تنظیم یک متغیر از نوعی غیر از float  و  int32_t :

******************

3-1-1- کادر سبز :

 یک متغیر محلی از نوع int32_t  به نام internal_var تعریف کنید .

 

******************

3-1-2- کادر قرمز :

مقدارمتغیر تایم اوت را به این متغیر نسبت دهید .

 

******************

3-1-3-خط90 :

  آدرس متغیر internal_var  را به عنصر متناضر در متغیر سراسری وارد نمایید .

 

******************

3-1-4-کادر صورتی :

در آخر کار دوباره مقدار internal_var  را در  متغیر time_out  قرار دهید .

 

******************

فوت کوزه گری 8 :

اگر میخواهید متغیری به غیر از float  و int32_t را  به عنوان متغر تنظیمی به کتابخانه منو معرفی  کنید، این کار را با واسطه یک متغیر محلی از نوع قابل شناخت برای کتابخانه ( float  یا int32_t  ) انجام دهید .

**************************************************

3-2 - تنظیم عناصر متغیر سراسری از طریق منو :

حالت خاص دیگر زمانی است که شما میخواهید تنظیم یکی از پارامترهای متغیر سراسری menu_4pin_handle_config  را از طریق اجرای منو در lcd در اختیار کاربر قرار دهید .

در این صورت چه باید کرد ؟!

  جواب  در تصویر بالاست .

در این مورد ما تایم اوت را که یکی از پارامترهای تنظیمی کتابخانه است را به صورت یک آیتم قابل تنظیم در صفحه  lcd  در اختیار کاربر قرار میدهیم .

 این کار همانند تنظیم یک متغیر معمولی است . با یک تفاوت کوچک !!!!

3-2-1 - کادر قرمز :

بعد از بازیابی متغیر menu_4pin_handle_config   دوباره مقدار متغیر تایم اوت را به عنصر متناظر از متغیر سراسری نسبت میدهیم .

 

به دلیل اینکه ما از متغیر سراسری menu_4pin_handle_config پشتیبان گرفیتیم و بعد دوبار آنرا باز یابی میکنیم ( در قسمت ===== deinitial value =====  ) اگر قبل از آن متغیر تایم اوت را نسبت دهیم ، بازیابی متغیر سراسری ، کل اعمال توابع و دستورات قبلی را بی اثر میکند پس باید بعد از بازیابی نسبت داده شود .

 

***********************

 

فوت کوزه گری 9:

اگر میخواهید یکی از عناصر متغیر سراسری menu_4pin_handle_config  در هنگام اجرای منو تنظیم شود . در تابع عمکردی آیتم مربوطه ، بعد از بازیابی متغیر سراسری menu_4pin_handle_config  ، آن آیتم را به عنصر متناظر در متغیر سراسری menu_4pin_handle_config  نسبت دهید

 

****************************************

****************************************

4- توابع عملکردی برای موارد متفرقه .

 

شما درون تابع های عملکرد آیتمها علاوه بر نمایش لیستها و متغیرها ،میتوانید کارهای دیگری هم انجام دهید . 

یک مثال از این نوع را در تصویر زیر میبینید که یک پیام با متن " این آیتم در حال حاضر خالی است " را به مدت چند ثانیه در صفحه نمایش نشان میدهد .

 

****************************************

****************************************

مطلب این قسمت در ایجا به پایان رسید .

در این مرحله شما قادر هستید که یک رابط کاربری به صورت منوهای تودرتو و آیتمهایی با عملکرد خاص را برنامه نویسی کنید.

 

قسمت بعدی قسمت پایانی خواهد بود و به عنوان آرشیو کلیه فوتهای کوزه گری ذکر شده در این چند قسمت آورده خواهد شد .

 

با سپاس از توجه تان .

 

 

لینک قسمت قبلی

لینک قسمت بعدی

 

پستهای مرتبط :

کتابخانه lcd نوکیا 1661

 نرم افزار تولید فونت برای میکرو کنترلر

 

 

 

مالکیت معنوی:لطفا کپی نکنید ..لینک بدید.