תוכן עניינים:

גישה שונה עם ההמשך: 3 שלבים
גישה שונה עם ההמשך: 3 שלבים

וִידֵאוֹ: גישה שונה עם ההמשך: 3 שלבים

וִידֵאוֹ: גישה שונה עם ההמשך: 3 שלבים
וִידֵאוֹ: עשר הנשים הכי גבוהות בעולם┃טופטן 2024, יולי
Anonim
גישה אחרת עם Nextion
גישה אחרת עם Nextion

בפרויקט הראשון שלי עם Arduino Nano המחובר לתצוגת המגע של Nextion, כתבתי שורה ארוכה של פקודות שיש להעביר ל- Nextion דרך הנמל הטורי וזה בלתי נמנע אם נצטרך לשלוח פקודות עצמאיות לחלוטין, ברגעים אקראיים.

אני גם חייב להודות שביליתי יותר זמן בלחימה עם הספריות מכל דבר אחר. אז בהדרגה הגעתי לעבודה לגמרי בלי הספריות הכבדות של ITEAD.

עד מהרה הבנתי שאין לי שום דחיפות להעביר לנקסטון את השינויים בתכונות של אובייקטים חזותיים, אבל אני מעדיף לחכות עד שאאסוף אותם ולשלוח אותם לקסטון בכללותו, כאשר קיבלתי קבוצה שלמה.

אנסה להסביר את עצמי טוב יותר.

כאשר בפרויקט שלי המורכב מ -16 אינדיקציות טקסטואליות אני רוצה להדליק או לכבות חלק מהן, אני עושה זאת על ידי ניצול התכונה 'bco' שעבור הפעלה, עוברת (למשל) מאפור כהה ללבן (אם ב- מלבן שחור), ולהיפך לכבות.

באפליקציה שלי מצאתי שזה חסר תועלת לשלוח 16 פקודות ליציאה הטורית ב -16 רגעים שונים, אחת לכל 'bco' של 16 האותות.

אני מעדיף שארדואינו יאסוף אילו אותות חייבים להיות 'מופעלים' (HIGH) ואילו מהם חייבים להיות 'כבוי' (LOW) במרשם של 16 סיביות, כאשר כל סיביות תואמות את אחת מ -16 האיתות של Nextion.

לאחר עדכון כל פיסת הרשמה, אני מעביר את הערך שלה ל Nextion, הודעה אחת המכילה מידע קולקטיבי הנוגע ל -16 אלמנטים.

באופן זה התקשורת מארדואינו ומנקסטאון מצטמצמת במידה ניכרת מכיוון שבאותה הודעה יחידה המועברת בסדרה אל נקסטון נאסף מידע שאחרת היה מצריך העברת 16 הודעות.

נכון, לא תמיד יש צורך לעדכן את כל הדוחות, אבל אני בטוח שלפעול אחרת יהיה בזבוז זמן רב יותר.

באופן טבעי כל ביט הכלול במספר השלם שקיבל ארדואינו, תצוגת Nextion תצטרך לשייך אותו לתכונה הרצויה.

המשמעות היא שצריך לכתוב קוד בתצוגה של Nextion, אך אין לפחד: אם הצלחתי …

אז יש יתרון כפול: לארדואינו יהיה קוד קל יותר ויתעסק פחות בתקשורת סדרתית עם נקסטאון.

נקסטון לאחר קבלת הנתונים בהודעה אחת, ישתמש בהם הרבה יותר מהר מאשר אם יחכה ל -16 הודעות. ההפעלה או כיבוי של 16 אותות תהיה אפוא כמעט זמנית ביחס למצב הרגיל ביותר, בו עובר הזמן למספר לא ידוע של הודעות בין ביצוע הפקודה לאיתות הראשון לפקודה לאיתות האחרון.

בתצוגה של Nextion יצרתי את המערכת הזו בצורה הקלאסית, כלומר, סיבוב של רשם 'מסכה' בכל פעם מאפשר לך לבחון כל אחד מ -16 הסיביות. כאשר הביקורת שנבדקה היא גבוהה, האות המשויך לביט זה נדלק על הצג ונכבה כאשר קצת נמוך.

ההיבט ה'שלילי 'של מערכת זו הוא שהקוד שנכתב בתצוגה של Nextion פחות נוח לתיעוד מאשר הקוד של Arduino. יתר על כן, קוד Nextion מסתכן בפיזור על אובייקטים שונים. יש להקפיד לתעד את מה שאתה עושה מיד.

אני משתמש בפנקס רשימות ++ כדי לכתוב את הקוד שאחר כך אני מעתיק לאובייקט Nextion שנמצא כמעט אך ורק ב- tm0 של דף 0.

לתחביר של שפת נקסטון יש מגבלות רבות, אך היא מצליחה להתגבר עליהן או לעקוף אותן במינימום מאמץ ולנסות לראות את הבעיות מנקודות מבט שהן גם יוצאות דופן.

כדוגמה, אני מדווח על האופן שבו ארדואינו כותב את הרשומה שיש להעביר, שנכתב על ידי בצורה הכי אלמנטרית שיש.

שלב 1: אופן העברת הרישום

בקובץ ArduinoCode. PDF אני מציג את כל הסקיצה שלי. (קריאת הקוד כאן למטה זה לא כל כך ברור)

כאן למטה, אני רק רוצה להראות באיזה אופן Arduino שולח את ה- 16 bit 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

}

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

שלב 2:.. אבל לפני…

.. אבל לפני …
.. אבל לפני …

כמובן שהקוד מתחיל בכל ההצהרות וההגדרות ().

הכניסות הן INPUT_PULLUP, ולכן מתגי הכניסה פתוחים בדרך כלל וכשהם סגורים, הם מחילים את ה- GND על קלט המתכתב.

(זהו ההוראה הראשון שלי ואני מצטער להראות לך את הקוד שלי בצורה גרועה זו. אנא הורד את הקובץ ArduinoCode. PDF שהוא מאוד ברור.

תן לי לדבר על זה יותר

פיתחתי דרך משלי 'לספר' לתצוגה של Nextion מה עליה לעשות. בדרך כלל ה- MCU (ארדואינו במקרה שלי) שולח הודעה על כל וריאציה שתחול על התכונה של כל אובייקט בודד. מטודה זו מבזבזת זמן רב לעשות דברים שלא תמיד כל כך דחופים לטעון את הקו הסידורי ברציפות. מצאתי נוח יותר שארדואינו יאסוף לרשומות של 16 סיביות את המידע על התכונות שישתנה ב- Nextion. בערך כל 500 מילישניות, Arduino שלי שולח ל Nextion הודעה אחת המכילה את 16 הסיביות הכלולות בכל רגיסטר בזמן. ברור שב Nextion אנו זקוקים לקוד המטפל במה שחייב לבצע. התפלגות זו של המשימה (והקוד) מאפשרת להשיג יתרונות רבים אחרים. לדוגמה, חשוב כיצד לגרום להבהב לאור! עם הגישה שלי זה קל: הכנס קצת לרשום Arduino ושלח אותו ל Nextion. את רישומי התאומים של Nextion ניתן לעדכן מארדואינו לעיתים רחוקות מאוד, מכיוון שתדירות ההבהוב אינה תלויה בתקשורת; תדירות ההבהוב תלויה מאובייקט טיימר אל נקסטון ויכולה לפעול עם בסיס הזמן המינימלי קרוב ל -50 mS. אז בשיטה שלי נוכל למצמץ אור ב- Nextion בתדירות גבוהה יחסית (נניח 2 הרץ), גם אם הארדואינו שלי ישלח הודעות כל 10 שניות, רק כדוגמה קיצונית. זה יכול להצביע על הבעיה ההפוכה: איך עושים אם התקשורת נכשלת? זה לא מושא הדיון הזה, אבל כבר פתרתי את הבעיה הזו עם סוג של כלב שמירה: אחד בתוך קוד הארדואינו, אחר לתוך הקוד של Nextion.

המהבהב מוסדר על ידי קוד Nextion, כאשר כל אור פועל לפי הכללים הנכונים שלו: ON/OFF או ירוק/אדום או גם שינוי הכתוב בפנים (או אחר אחר). יכולתי לספר עוד דברים על הפרויקט שלי, אבל אני מעדיף לחכות לשאלותיך לפני להוסיף יותר מדי מילים שלא כל כך קלות לי לתרגם טוב כמו שהייתי עושה.

שלב 3: עריכת אובייקטים של Nextion

עריכת אובייקטים של Nextion
עריכת אובייקטים של Nextion

להלן חלק מהקוד שכתבתי עם עורך Nextion על אובייקט 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 // מסכה

אם (vACC.val! = 0) // בדוק RDY

{

tRDY.pco = כחול // אדום

}אַחֵר

{

tRDY.pco = אפור // אפור כהה

}

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

vACC.val = vINP.val & 0x0002

אם (vACC.val! = 0) // בדוק PWR

{

tPWR.pco = ירוק // ירוק בהיר

tPON.txt = "ON" // ON

tPON.pco = ירוק // ירוק בהיר

}אַחֵר

{

tPWR.pco = אפור // אפור כהה 33808

tPON.txt = "כבוי" // כבוי

tPON.pco = אפור // אפור כהה 33808

}

// יבש ****************

vACC.val = vINP.val & 0x0004

if (vACC.val! = 0) // Test 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 = אדום // DIR אדום

tDIR.pco = BLACK // ב- BLACK

}אַחֵר

{

tRUN.bco = 32768 // MARCIA GREY (כבוי)

tRUN.pco = אפור // ב- GRAY

tDIR.bco = 32768 // DIR כהה ירוק 1024

tDIR.pco = אפור // אפור DIR

tDIR.txt = "---" // STOP

}

// שמאלה **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // Test RUN Right

{

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

}

// ימין *************

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) // Test RUN שניהם

{

tDIR.txt = ">>! <<" // DIR BOTH

}

// TEST ***************

vACC.val = vINP.val & 0x0020

if (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

if (vACC.val == 0) // בדוק EME

{

tEME.pco = אפור // EME נעדר

}

אם (vACC.val! = 0)

{

tEME.pco = אדום // EME קיים

}

}

// FERMO *************

vACC.val = vINP.val & 0x0100

אם (vACC.val! = 0) // בדוק את FERMO

{

tFER.pco = BLACK // BLACK

tFER.bco = ירוק // ירוק

}אַחֵר

{

tFER.pco = אפור // אפור

tFER.bco = 672 // ירוק כהה

}

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

הכרה

אני רוצה למסור את הודאותי לגדעון רוסבוב כיוון שקראתי חלק ממטרותיי תוך קריאת הוראותיו. תודה לך מר. גדעון רוסבוב

מוּמלָץ: