راهنمای استفاده از کتابخانه منو4 دگمه_قسمت11
موضوع این قسمت : ساختن منو _ ساختن تابع عملکرد برای متغیرهای تنظیمی
درود به شما.
در این قسمت قصد دارم در مورد برنامه نویسی توابع عملکرد مربوط برای یک متغیر تنظیمی توضیح بدم.
این قسمت راهنما 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- توابع عملکردی برای موارد متفرقه .
شما درون تابع های عملکرد آیتمها علاوه بر نمایش لیستها و متغیرها ،میتوانید کارهای دیگری هم انجام دهید .
یک مثال از این نوع را در تصویر زیر میبینید که یک پیام با متن " این آیتم در حال حاضر خالی است " را به مدت چند ثانیه در صفحه نمایش نشان میدهد .
****************************************
****************************************
مطلب این قسمت در ایجا به پایان رسید .
در این مرحله شما قادر هستید که یک رابط کاربری به صورت منوهای تودرتو و آیتمهایی با عملکرد خاص را برنامه نویسی کنید.
قسمت بعدی قسمت پایانی خواهد بود و به عنوان آرشیو کلیه فوتهای کوزه گری ذکر شده در این چند قسمت آورده خواهد شد .
با سپاس از توجه تان .
پستهای مرتبط :
نرم افزار تولید فونت برای میکرو کنترلر
مالکیت معنوی:لطفا کپی نکنید ..لینک بدید.