فهرست مطالب:
تصویری: رویکردی متفاوت با بعدی: 3 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
در اولین پروژه خود با آردوینو نانو متصل به صفحه لمسی Nextion ، من یک سری دستورات طولانی نوشته بودم تا از طریق پورت سریال به Nextion ارسال شود و اگر در لحظه های تصادفی نیاز به ارسال دستورات کاملاً مستقل داشته باشیم ، این اجتناب ناپذیر است.
همچنین باید اعتراف کنم که بیشتر از هر زمان دیگری در "نبرد" با کتابخانه ها بودم. بنابراین به تدریج بدون کتابخانه های سنگین ITEAD به کار پرداختم.
به زودی متوجه شدم که هیچ فوریتی ندارم که تغییرات مربوط به ویژگی های اشیاء بصری را به Nextion اعلام کنم ، اما ترجیح می دهم منتظر بمانم تا آنها را جمع آوری کرده و در کل ، وقتی یک گروه کامل به دست آوردم ، آنها را به Nextion ارسال کنم.
سعی می کنم خودم را بهتر توضیح دهم.
وقتی می خواهم برخی از آنها را روشن یا خاموش کنم ، در پروژه ای که از 16 نشانگر متنی تشکیل شده است ، این کار را با استفاده از ویژگی "bco" انجام می دهم که برای روشن کردن ، از خاکستری تیره به سفید (به عنوان مثال) یک مستطیل سیاه) ، و برعکس برای خاموش شدن.
در برنامه من ارسال 16 دستور به پورت سریال در 16 لحظه مختلف ، یک دستور برای هر "bco" از 16 سیگنال ، بی فایده بود.
من ترجیح می دهم آردوینو جمع آوری کند که کدام سیگنال ها باید "روشن" (HIGH) و کدام یک باید "خاموش" (پایین) در یک ثبت 16 بیتی باشد ، جایی که هر بیت مربوط به یکی از 16 سیگنالینگ Nextion است.
پس از به روز رسانی هر بیت از ثبت ، مقدار آن را به Nextion ، یک پیام واحد که حاوی اطلاعات جمعی مربوط به 16 عنصر است ، منتقل می کنم.
به این ترتیب ارتباطات آردوینو و نکستین به میزان قابل توجهی کاهش می یابد زیرا در آن پیام واحد که در سریال به Nextion منتقل می شود ، اطلاعاتی جمع آوری می شود که در غیر این صورت نیاز به ارسال 16 پیام داشت.
درست است که همیشه لازم نیست همه گزارش ها را به روز کنید ، اما مطمئن هستم که در غیر این صورت زمان بیشتری را هدر می دهید.
به طور طبیعی هر بیت موجود در عدد صحیح دریافت شده توسط آردوینو ، صفحه Nextion باید آن را به ویژگی مورد نظر مرتبط کند.
این بدان معناست که کد باید در صفحه Nextion نوشته شود ، اما نباید ترسید: اگر موفق شدم…
سپس یک مزیت مضاعف وجود دارد: آردوینو دارای کد سبک تری است و کمتر در ارتباط سریال با Nextion مشغول خواهد بود.
بعد از دریافت داده ها در یک پیام ، آنها را بسیار سریعتر از زمان انتظار برای 16 پیام استفاده می کند. بنابراین روشن یا خاموش کردن 16 سیگنال از نظر معمول ترین حالت تقریباً همزمان خواهد بود ، که در آن زمان برای تعداد نامعلوم پیام بین اجرای فرمان برای اولین سیگنال و فرمان برای آخرین سیگنالینگ می گذرد.
در صفحه Nextion من این سیستم را به روش کلاسیک ایجاد کردم ، یعنی هر بار چرخاندن یک "ماسک" به شما اجازه می دهد تا هر یک از 16 بیت را بررسی کنید. وقتی بیت مورد بررسی بالا باشد ، سیگنال مربوط به آن بیت روی صفحه نمایش روشن می شود و هنگامی که یک بیت پایین است خاموش می شود.
جنبه "منفی" این سیستم این است که کد نوشته شده در صفحه Nextion نسبت به کد آردوینو کمتر مستند است. علاوه بر این ، کد Nextion در معرض پراکندگی در اجسام مختلف است. باید مراقب باشید که کارهایی را که بلافاصله انجام می دهید مستند کنید.
من از Notepad ++ برای نوشتن کد استفاده می کنم و سپس آن را در شی Nextion که تقریباً به طور انحصاری در tm0 صفحه 0 است کپی می کنم.
نحو زبان Nextion دارای محدودیت های متعددی است ، اما می تواند بر آنها غلبه کرده یا با حداقل تلاش از آنها عبور کرده و سعی کند مشکلات را از دیدگاه غیرمعمول نیز ببیند.
به عنوان مثال ، من روشی را که آردوینو ثبت می کند را ارسال می کنم ، که توسط من به ابتدایی ترین شکل ممکن نوشته شده است.
مرحله 1: نحوه انتقال ثبت نام
در فایل ArduinoCode. PDF تمام طرح خود را نشان می دهم. (خواندن کد در اینجا چندان واضح نیست)
در اینجا ، فقط می خواهم نشان دهم که چگونه آردوینو بدون کمک کتابخانه ها ، ثبت نام 16 بیتی را به Nextion ارسال می کند ، اما به نحوی که ITEAD توصیف می کند احترام می گذارد.
//***************************************************************************************
void NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =")؛
SRSerial.print (InpReg) ؛ // 16 بیت جمع آوری شده را به Nextion Display منتقل کنید
SRSerial.print (InpReg) ؛ // 16 بیت جمع آوری شده را به Nextion Display منتقل کنید
SRSerial.write (ترمینال) ؛ // 255
SRSerial.write (ترمینال) ؛ // 255
SRSerial.write (ترمینال) ؛ // 255
}
//***************************************************************************************
مرحله 2:.. اما قبل از…
البته کد با همه اعلان ها و راه اندازی () شروع می شود.
ورودی ها INPUT_PULLUP هستند ، بنابراین کلیدهای ورودی معمولاً باز هستند و در صورت بسته شدن ، GND را روی ورودی مربوطه اعمال می کنند.
(این اولین دستورالعمل من است و متأسفم که کد خود را به این روش بد به شما نشان می دهم. لطفاً فایل ArduinoCode. PDF را بارگیری کنید که بسیار واضح است.
بگذارید در مورد آن بیشتر صحبت کنم
من راه خود را برای "گفتن" به صفحه Nextion که باید انجام دهد ، توسعه داده ام. معمولاً MCU (در مورد من آردوینو) برای هر تنوع یک پیام ارسال می کند تا به ویژگی هر شیء واحد اعمال شود. این روش زمان زیادی را صرف انجام کارهایی می کند که همیشه بارگذاری پیوسته خط سریال ضروری نیست. به نظر من راحت تر بود که آردوینو اطلاعات ثابتی را که در Nextion متغیر است ، در رجیسترهای 16 بیتی جمع آوری کند. تقریباً در هر 500 میلی ثانیه ، آردوینو من یک پیغام حاوی 16 بیت موجود در هر رجیستر را به Nextion ارسال می کند. بدیهی است که در Nextion ما به کدی نیاز داریم که باید اجرا شود. این توزیع وظیفه (و کد) می تواند مزایای بسیار دیگری را نیز به همراه داشته باشد. به عنوان مثال ، فکر کنید چگونه می توان یک چشمک زدن را به یک چراغ تبدیل کرد! با رویکرد من این کار آسان است: کمی وارد رجیستر آردوینو شوید و آن را به Nextion ارسال کنید. رجیسترهای دوقلو Nextion می توانند به ندرت از آردوینو به روز شوند ، زیرا فرکانس پلک زدن مستقل از ارتباط است. فرکانس پلک زدن از یک شیء تایمر به Nextion بستگی دارد و می تواند با حداقل زمان نزدیک به 50 میلی ثانیه اجرا شود. بنابراین با روش من می توانیم یک نور در Nextion با فرکانس نسبتاً زیاد (فرض کنیم 2 هرتز) چشمک بزنیم ، حتی اگر آردوینو هر 10 ثانیه پیام ارسال کند ، فقط برای یک مثال شدید. این می تواند مشکل مخالف را نشان دهد: در صورت شکست ارتباط چگونه باید عمل کرد؟ این موضوع این بحث نیست ، اما من قبلاً این مشکل را با نوعی Watch Dog حل کرده ام: یکی در داخل کد آردوینو ، دیگری در کد Nextion.
چشمک زدن توسط کد Nextion تنظیم می شود ، جایی که هر چراغ از قوانین مناسب خود پیروی می کند: روشن/خاموش یا سبز/قرمز یا تغییر داخل نوشته (یا موارد دیگر). من می توانم چیزهای دیگری در مورد پروژه خود بگویم ، اما ترجیح می دهم منتظر س questionsالات شما باشم ، قبل از اضافه کردن کلمات زیادی که ترجمه آنها برای من آسان نیست.
مرحله 3: ویرایش اشیاء Nextion
در اینجا قسمتی از کدی است که با Nextion Editor روی شی tm0 نوشتم.
متوجه نمی شویم که با 16 بیت دریافت شده از آردوینو ، صفحه Nextion فقط سیگنال ها را روشن و خاموش نمی کند. در حال حاضر من توضیحات را حذف می کنم تا درک را پیچیده نکنم.
من یک مبتدی هستم و بنابراین بهتر است کد Nextion را بارگیری کنید. در عوض صفحه PDF را بخوانید تا کد اشتباه را در اینجا بخوانید. (متاسفم که این اولین آموزش من است)
در صورت تمایل می توانید کد کامل "HMI" را برای این برنامه من بارگیری کنید. نام فایل این کد POW1225. HMI است. این می تواند به صفحه Nextion شما NX4024T032 راه پیدا کند ، اما برای درک آن باید به اشیاء زیادی وارد شوید و کد داخل پنجره کوچک ویرایشگر را مشاهده کنید. بنابراین من فکر می کنم کد اصلی که در فایل Nextion code. PDF نوشته شده است ، بسیار ساده تر به نظر می رسد
// پروژه POW1225. HMI 15 مه 2019
// vACC (va0) جمع کننده
// vINP (va1) ثبت نام ورودی xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 شروع
tm0.tim = 50 // tm0 پایه زمانی 50 میلی ثانیه
// RDY ***************
vACC.val = vINP.val & 0x0001 // ماسک
if (vACC.val! = 0) // RDY را آزمایش کنید
{
tRDY.pco = آبی // قرمز
} دیگری
{
tRDY.pco = خاکستری // خاکستری تیره
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // تست PWR
{
tPWR.pco = سبز // سبز سبز
tPON.txt = "روشن" // روشن
tPON.pco = سبز // سبز سبز
} دیگری
{
tPWR.pco = خاکستری // خاکستری تیره 33808
tPON.txt = "خاموش" // خاموش
tPON.pco = خاکستری // خاکستری تیره 33808
}
// خشک ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // تست DRY
{
tDRV.pco = آبی // آبی
tDRY.pco = آبی // آبی
} دیگری
{
tDRV.pco = خاکستری // خاکستری تیره 33808
tDRY.pco = خاکستری // خاکستری تیره 33808
}
// اجرا کن ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = RED // MARCIA RED (روشن)
tRUN.pco = BLACK // در BLACK
tDIR.bco = RED // DIR RED
tDIR.pco = BLACK // در BLACK
} دیگری
{
tRUN.bco = 32768 // MARCIA GREY (خاموش)
tRUN.pco = خاکستری // در خاکستری
tDIR.bco = 32768 // DIR سبز سبز 1024
tDIR.pco = خاکستری // خاکستری خشک
tDIR.txt = "---" // STOP
}
// ترک کرد **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN Right
{
tDIR.txt = "<<<" // DIR چپ
}
// درست *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN Left
{
tDIR.txt = ">>>" // DIR RIGHT
}
// هر دو **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // تست RUN هر دو
{
tDIR.txt = ">>! <<" // DIR BOTH
}
// تست **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // تست TEST
{
tTEST.pco = WHITE // WHITE
tsw tTEST، 1 // فعال کردن رویدادهای Touch
} دیگری
{
tTEST.pco = خاکستری // خاکستری تیره 33808
tsw tTEST، 0 // غیرفعال کردن رویدادهای Touch
}
// عیب *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // تست خطا
{
tFLT.pco = خاکستری // خطا وجود ندارد
}
if (vACC.val! = 0)
{
tFLT.pco = YELLOW // FAULT در حال حاضر
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // تست EME
{
tEME.pco = خاکستری // EME وجود ندارد
}
if (vACC.val! = 0)
{
tEME.pco = RED // EME موجود است
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // تست FERMO
{
tFER.pco = BLACK // BLACK
tFER.bco = سبز // سبز
} دیگری
{
tFER.pco = خاکستری // خاکستری
tFER.bco = 672 // سبز تیره
}
// *******************
تصدیق
من می خواهم قدردانی خود را از گیدئون روسوف انجام دهم زیرا با خواندن دستورالعمل های او بخشی از اهداف خود را به سرعت به دست آورده ام. ممنون آقای گیدئون روسوف
توصیه شده:
لنز ماکرو Diy با AF (متفاوت از سایر لنزهای ماکرو DIY): 4 مرحله (همراه با تصاویر)
لنز ماکرو Diy با AF (متفاوت از سایر لنزهای ماکرو DIY): من افراد زیادی را دیده ام که با یک لنز کیت استاندارد (معمولاً 18-55 میلی متر) لنزهای ماکرو می سازند. بیشتر آنها یک لنز هستند که روی دوربین چسبیده اند یا قسمت جلویی برداشته شده است. برای هر دوی این گزینه ها معایبی وجود دارد. برای نصب لنز
تولید صداهای متفاوت از فیلم ها فقط با استفاده از آردوینو: 3 مرحله
تولید صداهای متفاوت از فیلم ها فقط با استفاده از آردوینو: السلام علیکم! من می خواستم صداهای مختلفی مانند شکارچی ، optimus prime & amp؛ زنبور عسل از فیلم ترانسفورماتور. در واقع من داشتم & quot؛ آهنگور & quot؛ را تماشا می کردم. ویدئویی در مورد ساخت کلاه ایمنی شکارچی
اسکنر سه بعدی پایه برای نقشه برداری سه بعدی دیجیتال: 5 مرحله
اسکنر سه بعدی پایه برای نقشه برداری سه بعدی دیجیتال: در این پروژه ، من اصول اولیه اسکن و بازسازی سه بعدی را که عمدتاً در اسکن اجسام نیمه نیمه کوچک کاربرد دارد و عملکرد آنها را می توان به سیستم های اسکن و بازسازی گسترش داد ، توضیح داده و توضیح می دهم. ب
The OLOID متحرک - یک حیوان خانگی متفاوت در زمان های مختلف: 10 مرحله (همراه با تصاویر)
The OLOID متحرک - یک حیوان خانگی متفاوت در زمان های مختلف: کرونا زندگی ما را تغییر داده است: از ما نیاز به فاصله فیزیکی دارد ، که به نوبه خود منجر به فاصله اجتماعی می شود. بنابراین راه حل چه می تواند باشد؟ شاید یک حیوان خانگی؟ اما نه ، کرونا از حیوانات ناشی می شود. بیایید خود را از کرونا 2.0 دیگر نجات دهیم. اما اگر ما
چراغ پی در پی LED با 7 جلوه سرد متفاوت: 8 مرحله
نور پی در پی LED با 7 جلوه سرد متفاوت!: این پروژه شامل 7 جلوه مختلف نورهای متوالی است که بعداً پوشش داده می شود. از یکی از سازندگان الهام گرفته شده است که چند روز پیش در یوتیوب دیدم ، و به نظر من واقعاً جالب است ، بنابراین می خواهم این را با شما دوستان به اشتراک بگذارم و یک نسخه کامل از