جدول المحتويات:

نهج مختلف مع Nextion: 3 خطوات
نهج مختلف مع Nextion: 3 خطوات

فيديو: نهج مختلف مع Nextion: 3 خطوات

فيديو: نهج مختلف مع Nextion: 3 خطوات
فيديو: لماذا تتعامل بريطانيا بـ"نهج مختلف" مع الحوثيين؟ 2024, يوليو
Anonim
نهج مختلف مع Nextion
نهج مختلف مع Nextion

في مشروعي الأول مع Arduino Nano المتصل بشاشة اللمس Nextion ، كنت قد كتبت سلسلة طويلة من الأوامر ليتم توصيلها إلى Nextion عبر المنفذ التسلسلي وهذا أمر لا مفر منه إذا احتجنا إلى إرسال أوامر مستقلة تمامًا ، في لحظات عشوائية.

يجب أن أعترف أيضًا أنني قضيت وقتًا أطول في "القتال" مع المكتبات أكثر من أي شيء آخر. لذلك جئت إلى العمل بشكل تدريجي بدون مكتبات ITEAD الثقيلة.

سرعان ما أدركت أنه ليس لدي حاجة ملحة للتواصل مع Nextion بالتغييرات التي تطرأ على سمات الأشياء المرئية ، لكنني أفضل الانتظار حتى أقوم بجمعها وإرسالها إلى Nextion ككل ، عندما أحصل على مجموعة كاملة.

سأحاول أن أشرح نفسي بشكل أفضل.

عندما أريد في مشروعي المكون من 16 مؤشرًا نصيًا تشغيل بعضها أو إيقاف تشغيلها ، فأنا أفعل ذلك من خلال الاستفادة من سمة "bco" التي يتم تشغيلها (على سبيل المثال) من الرمادي الداكن إلى الأبيض (إذا كان مستطيل أسود) والعكس بالعكس.

في تطبيقي وجدت أنه من غير المجدي إرسال 16 أمرًا إلى المنفذ التسلسلي في 16 لحظة مختلفة ، واحد لكل "bco" من الإشارات الـ 16.

أفضل بدلاً من ذلك أن يجمع Arduino الإشارات التي يجب أن تكون "قيد التشغيل" (عالية) وأي منها يجب أن تكون "متوقفة" (منخفضة) في سجل 16 بت ، حيث يتوافق كل بت مع إشارة من 16 إشارة من Nextion.

بعد تحديث كل جزء من السجل ، أنقل قيمته إلى Nextion ، وهي رسالة واحدة تحتوي على معلومات جماعية تتعلق بـ 16 عنصرًا.

وبهذه الطريقة ، يتم تقليل الاتصال من Arduino و Nextion بشكل كبير لأنه في تلك الرسالة الفردية المنقولة على المسلسل إلى Nextion ، يتم جمع المعلومات التي كانت ستتطلب بخلاف ذلك إرسال 16 رسالة.

صحيح أنه ليس من الضروري دائمًا تحديث جميع التقارير ، لكنني متأكد من أن القيام بخلاف ذلك سيضيع المزيد من الوقت.

وبطبيعة الحال ، فإن كل بت موجود في العدد الصحيح الذي يستقبله Arduino ، سيتعين على شاشة Nextion ربطه بالسمة المرغوبة.

هذا يعني أنه يجب كتابة الكود في شاشة Nextion ، لكن لا داعي للخوف: إذا نجحت …

ثم هناك ميزة مزدوجة: سيكون لدى Arduino رمز أخف وسيكون أقل مشاركة في الاتصال التسلسلي مع Nextion.

Nextion بعد تلقي البيانات في رسالة واحدة ، سوف يستخدمها بشكل أسرع بكثير مما لو كان ينتظر 16 رسالة. وبالتالي ، سيكون تشغيل أو إيقاف تشغيل 16 إشارة معاصرًا تقريبًا فيما يتعلق بالوضع الأكثر شيوعًا ، حيث ينقضي وقت عدد غير معروف من الرسائل بين تنفيذ الأمر الخاص بالإشارة الأولى والأمر الخاص بالإشارة الأخيرة.

في شاشة Nextion ، قمت بإنشاء هذا النظام بالطريقة الكلاسيكية ، أي أن تحويل سجل "القناع" في كل مرة يسمح لك بفحص كل من الـ 16 بت. عندما تكون البتة التي تم فحصها عالية ، تضيء الإشارة المرتبطة بتلك القطعة على الشاشة وتنطفئ عندما يكون البتة منخفضًا.

الجانب السلبي لهذا النظام هو أن الكود المكتوب في شاشة Nextion أقل ملاءمة للتوثيق من كود Arduino. علاوة على ذلك ، يخاطر كود Nextion بالتشتت على كائنات مختلفة. يجب توخي الحذر لتوثيق ما تفعله على الفور.

أستخدم Notepad ++ لكتابة الكود الذي أقوم بنسخه بعد ذلك في كائن Nextion والذي يكون حصريًا تقريبًا في tm0 من الصفحة 0.

يحتوي بناء جملة لغة Nextion على العديد من القيود ، لكنه ينجح في التغلب عليها أو الالتفاف عليها بأقل جهد ومحاولة رؤية المشكلات من وجهات نظر غير عادية أيضًا.

على سبيل المثال ، أبلغت عن الطريقة التي يكتب بها Arduino السجل ليتم إرساله ، والذي كتبته بأبسط طريقة ممكنة.

الخطوة 1: كيف يتم إرسال السجل

في ملف ArduinoCode. PDF أعرض كل مخططي. (قراءة الكود هنا ليست واضحة)

هنا في الأسفل ، أريد فقط أن أوضح الطريقة التي يرسل بها Arduino 16 بت Register إلى Nextion ، دون مساعدة المكتبات ، ولكن مع احترام القواعد اللغوية التي وصفها ITEAD.

//***************************************************************************************

NexUpd () باطل

//***************************************************************************************

{

SRSerial.print ("vINP.val =") ؛

SRSerial.print (InpReg) ، // إرسال الـ 16 بت التي تم جمعها إلى شاشة Nextion

SRSerial.print (InpReg) ، // قم بنقل الـ 16 بت التي تم جمعها إلى شاشة Nextion

SRSerial.write (نهاية) ؛ // 255

SRSerial.write (نهاية) ؛ // 255

SRSerial.write (نهاية) ؛ // 255

}

//***************************************************************************************

الخطوة الثانية:.. ولكن قبل…

.. لكن قبل …
.. لكن قبل …

بالطبع الكود يبدأ بكل التصريحات والإعداد ().

المدخلات هي INPUT_PULLUP ، لذلك تكون مفاتيح الإدخال مفتوحة عادة وعندما تغلق ، فإنها تطبق GND على المدخلات المتوافقة.

(هذا هو أول Instructable لي ، وأنا آسف لإظهار الكود الخاص بي بهذه الطريقة السيئة. يرجى تنزيل الملف ArduinoCode. PDF أنه واضح جدًا.

دعني أتحدث عنها أكثر

لقد طورت طريقتي الخاصة لأقول لشاشة Nextion ما يجب أن تفعله. عادةً ما ترسل MCU (Arduino في حالتي) رسالة لكل تباين منفرد لتطبيقه على سمة أي كائن واحد. تضيع هذه الطريقة الكثير من الوقت للقيام بأشياء ليست ملحة دائمًا لتحميل الخط التسلسلي باستمرار. لقد وجدت أكثر ملاءمة أن Arduino يجمعها في 16 بت يسجل المعلومات حول السمات لتختلف في Nextion. حوالي كل 500 مللي ثانية ، يرسل Arduino الخاص بي إلى Nextion رسالة واحدة تحتوي على 16 بت الموجودة في كل سجل في الوقت المناسب. من الواضح أننا في Nextion نحتاج إلى الكود الذي يتعامل مع ما يجب تنفيذه. يتيح هذا التوزيع للمهمة (والرمز) الحصول على العديد من المزايا الأخرى. على سبيل المثال ، فكر في كيفية جعل وميض الضوء! من خلال أسلوبي ، يكون الأمر سهلاً: ضع قليلاً في سجل Arduino وأرسله إلى Nextion. نادرًا ما يتم تحديث سجلات Nextion المزدوجة من Arduino ، لأن تردد الوميض مستقل عن الاتصال ؛ يعتمد تردد الوميض على كائن Timer في Nextion ويمكن تشغيله مع أقل قاعدة زمنية قريبة من 50 مللي ثانية. لذلك من خلال طريقتنا ، يمكننا وميض ضوء في Nextion بتردد مرتفع نسبيًا (افترض 2 هرتز) ، حتى لو كان Arduino يرسل رسائل كل 10 ثوانٍ ، فقط للحصول على مثال متطرف. هذا يمكن أن يشير إلى مشكلة معاكسة: كيف تفعل إذا فشل الاتصال؟ هذا ليس موضوع هذه المناقشة ، لكنني قمت بالفعل بحل هذه المشكلة بنوع من Watch Dog: واحد داخل كود Arduino ، وآخر في رمز Nextion.

يتم تنظيم الوميض بواسطة كود Nextion ، حيث يتبع كل ضوء قواعده الصحيحة: ON / OFF أو GREEN / RED أو تغيير الداخل المكتوب (أو غير ذلك). يمكنني أن أخبركم ببعض الأشياء الأخرى عن مشروعي ولكني أفضل انتظار أسئلتكم ، قبل إضافة الكثير من الكلمات التي ليس من السهل علي ترجمتها كما أفعل.

الخطوة 3: تحرير كائنات Nextion

تحرير كائنات Nextion
تحرير كائنات Nextion

هذا جزء من الكود الذي كتبته باستخدام Nextion Editor على الكائن tm0.

لا يفلت من ملاحظة أنه مع 16 بت التي تم تلقيها من Arduino ، لا تعمل شاشة Nextion فقط على تشغيل وإيقاف الإشارات. في الوقت الحالي أغفل التفسيرات حتى لا أعقد الفهم.

أنا مبتدئ ولذلك من الأفضل تنزيل كود Nextion بدلاً من ذلك لقراءة الكود المربك هنا بالأسفل. (أنا آسف ، هذا هو أول تدريب لي)

إذا كنت ترغب في ذلك يمكنك تنزيل الكود الكامل "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 // قناع

إذا (vACC.val! = 0) // اختبار RDY

{

tRDY.pco = أزرق // أحمر

}آخر

{

tRDY.pco = رمادي // رمادي غامق

}

// PWR ***************

vACC.val = vINP.val & 0x0002

إذا (vACC.val! = 0) // اختبار PWR

{

tPWR.pco = أخضر // أخضر فاتح

tPON.txt = "تشغيل" // تشغيل

tPON.pco = أخضر // أخضر فاتح

}آخر

{

tPWR.pco = رمادي // رمادي غامق 33808

tPON.txt = "إيقاف" // إيقاف

tPON.pco = رمادي // رمادي غامق 33808

}

// جاف ***************

vACC.val = vINP.val & 0x0004

إذا (vACC.val! = 0) // اختبار جاف

{

tDRV.pco = أزرق // أزرق

tDRY.pco = أزرق // أزرق

}آخر

{

tDRV.pco = رمادي // رمادي غامق 33808

tDRY.pco = رمادي // رمادي غامق 33808

}

// يركض ***************

vACC.val = vINP.val & 0x0018

إذا (vACC.val! = 0) // اختبار RUN

{

tRUN.bco = أحمر // MARCIA RED (تشغيل)

tRUN.pco = BLACK // في BLACK

tDIR.bco = أحمر // DIR RED

tDIR.pco = BLACK // في BLACK

}آخر

{

tRUN.bco = 32768 // MARCIA GRAY (إيقاف)

tRUN.pco = GREY // على GRAY

tDIR.bco = 32768 // DIR Dark GREEN 1024

tDIR.pco = رمادي // DIR GRAY

tDIR.txt = "---" // إيقاف

}

// اليسار **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // اختبر RUN Right

{

tDIR.txt = "<<<" // DIR LEFT

}

// حق *************

vACC.val = vINP.val & 0x0010

if (vACC.val! = 0) // اختبر RUN Left

{

tDIR.txt = ">>>" // DIR RIGHT

}

// على حد سواء **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // اختبر RUN كليهما

{

tDIR.txt = ">>! <<" // DIR كلاهما

}

// اختبار **************

vACC.val = vINP.val & 0x0020

إذا (vACC.val! = 0) // Test TEST

{

tTEST.pco = أبيض // أبيض

tsw tTEST، 1 // تمكين أحداث اللمس

}آخر

{

tTEST.pco = رمادي // رمادي غامق 33808

tsw tTEST، 0 // تعطيل أحداث اللمس

}

// عيب *************

vACC.val = vINP.val & 0x0040

إذا (vACC.val == 0) // خطأ الاختبار

{

tFLT.pco = رمادي // خطأ غائب

}

إذا (vACC.val! = 0)

{

tFLT.pco = أصفر // خطأ موجود

}

// EME *****************

vACC.val = vINP.val & 0x0080

إذا (vACC.val == 0) // اختبار EME

{

tEME.pco = رمادي // EME غائب

}

إذا (vACC.val! = 0)

{

tEME.pco = أحمر // EME موجود

}

}

// فيرمو *************

vACC.val = vINP.val & 0x0100

إذا (vACC.val! = 0) // Test FERMO

{

tFER.pco = أسود // أسود

tFER.bco = أخضر // أخضر

}آخر

{

tFER.pco = GREY // GRAY

tFER.bco = 672 // أخضر داكن

}

// *******************

إعتراف

أريد أن أقدم تقديري لجدعون روسوف لأنني قرأت كتابه Instructables اكتسبت بسرعة جزءًا من أهدافي. شكرا السيد. جدعون روسوف

موصى به: