תוכן עניינים:
וִידֵאוֹ: גישה שונה עם ההמשך: 3 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
בפרויקט הראשון שלי עם 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 על אובייקט 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 // ירוק כהה
}
// *******************
הכרה
אני רוצה למסור את הודאותי לגדעון רוסבוב כיוון שקראתי חלק ממטרותיי תוך קריאת הוראותיו. תודה לך מר. גדעון רוסבוב
מוּמלָץ:
עדשת מאקרו DIY עם AF (שונה מכל עדשות מאקרו DIY): 4 שלבים (עם תמונות)
עדשות מאקרו DIY עם AF (שונות מכל עדשות מאקרו DIY): ראיתי הרבה אנשים שמייצרים עדשות מאקרו עם עדשה סטנדרטית (בדרך כלל 18-55 מ"מ). רובם עדשה פשוט נדבקים על המצלמה לאחור או שהאלמנט הקדמי מוסר. לשתי האפשרויות הללו יש חסרונות. להרכבת העדשה
בקר רצועות LED שונה של RGBW, נשלט PIR, ESP8285: 3 שלבים
בקר רצועות LED שונה של RGBW, מבוקר PIR, ESP8285: מעל השולחן שלי בבית התקנתי רצועת LED RGBW. בקר ה- LED LED RGBW אמור לעבוד עם אפליקציה כמו אפליקציית Magic Home. עם זאת, אני מכיל שבב ESP8285 שהבהבתי עם הקושחה שלי. הוספתי PIR שבאמצעותו רצועת ה- LED עוברת
ספק כוח ATX שונה: 3 שלבים
ספק כוח ATX שונה: יחידות אספקת החשמל הן תמיד החלק המהותי של כל פרויקט, ומניע את כל המעגלים שלך במהלך הבדיקה והניתוח. אבל אלה די יקרים בשוק, מהסוג שהוא חורג מהתקציב שלי. די נמאס לי שתמיד הייתי צריך לראות
OLOID הנע - חיית מחמד שונה בזמנים שונים: 10 שלבים (עם תמונות)
OLOID הנע - חיית מחמד אחרת בזמנים שונים: קורונה שינתה את חיינו: היא מחייבת אותנו להתרחק פיזית, מה שמוביל להתרחקות חברתית. אז מה יכול להיות פתרון? אולי חיית מחמד? אבל לא, קורונה מגיעה מחיות. בואו להציל את עצמנו מעוד קורונה 2.0. אבל אם אנחנו חח
מפת זיהום האוויר של CEL (שונה): 7 שלבים
מפת זיהום האוויר של CEL (השתנה): זיהום אוויר הוא נושא עולמי בחברה של היום, הוא הגורם למחלות רבות וגורם לחוסר נוחות. זו הסיבה שניסינו לבנות מערכת שתוכל לעקוב אחר מיקום ה- GPS שלך וגם זיהום האוויר במקום המדויק, ואז להיות