সুচিপত্র:

নেক্সটেশনের সাথে একটি ভিন্ন পদ্ধতি: 3 টি ধাপ
নেক্সটেশনের সাথে একটি ভিন্ন পদ্ধতি: 3 টি ধাপ

ভিডিও: নেক্সটেশনের সাথে একটি ভিন্ন পদ্ধতি: 3 টি ধাপ

ভিডিও: নেক্সটেশনের সাথে একটি ভিন্ন পদ্ধতি: 3 টি ধাপ
ভিডিও: Как спрятать данные в ячейках Excel? 2024, জুলাই
Anonim
ঘৃণার সঙ্গে একটি ভিন্ন পদ্ধতি
ঘৃণার সঙ্গে একটি ভিন্ন পদ্ধতি

Arduino Nano- এর সাথে Nextion টাচ ডিসপ্লেতে সংযুক্ত আমার প্রথম প্রজেক্টে, আমি সিরিয়াল পোর্টের মাধ্যমে Nextion- এ যোগাযোগ করার জন্য একটি দীর্ঘ সিরিজের কমান্ড লিখেছিলাম এবং র্যান্ডম মুহূর্তে সম্পূর্ণ স্বাধীন কমান্ড পাঠানোর প্রয়োজন হলে এটি অনিবার্য।

আমাকে এটাও স্বীকার করতে হবে যে আমি অন্য যেকোন কিছুর চেয়ে লাইব্রেরির সাথে 'লড়াই' করতে বেশি সময় ব্যয় করেছি। তাই আমি ধীরে ধীরে ভারী ITEAD লাইব্রেরি ছাড়া সম্পূর্ণরূপে কাজ করতে এসেছি।

আমি শীঘ্রই বুঝতে পেরেছিলাম যে নেক্সশনের সাথে দৃশ্যমান বস্তুর বৈশিষ্ট্যগুলির পরিবর্তনগুলির সাথে যোগাযোগ করার জন্য আমার কোন তাড়াতাড়ি ছিল না, কিন্তু আমি যতক্ষণ না আমি সেগুলি সংগ্রহ করি এবং পুরোপুরি নেক্সটনে পাঠাই, ততক্ষণ আমি অপেক্ষা করতে পছন্দ করি, যখন আমি একটি সম্পূর্ণ গ্রুপ পেয়েছি।

আমি নিজেকে আরো ভালোভাবে বোঝানোর চেষ্টা করবো।

যখন 16 টি টেক্সটাল ইঙ্গিত নিয়ে গঠিত আমার প্রজেক্টে আমি তাদের কিছু চালু বা বন্ধ করতে চাই, তখন আমি 'bco' অ্যাট্রিবিউটের সুবিধা নিয়ে এটি করি যা সুইচ অন করার জন্য, পাস করে (উদাহরণস্বরূপ) গা gray় ধূসর থেকে সাদা (যদি থাকে) একটি কালো আয়তক্ষেত্র), এবং তদ্বিপরীত সুইচ অফ করতে।

আমার আবেদনে আমি 16 টি ভিন্ন মুহূর্তে সিরিয়াল পোর্টে 16 টি কমান্ড পাঠানোকে অকেজো মনে করেছি, 16 টি সিগন্যালের প্রতিটি 'bco' এর জন্য একটি।

আমি এর পরিবর্তে পছন্দ করি যে Arduino কোন সংকেতগুলি 'অন' (হাই) হতে হবে এবং কোনটি 16-বিট রেজিস্টারে 'অফ' (LOW) হতে হবে, যেখানে প্রতিটি বিট নেক্সটেশনের 16 টি সিগন্যালিংয়ের একটির সাথে মিলে যায়।

রেজিস্টারের প্রতিটি বিট আপডেট করার পর, আমি এর মান নেক্সটনে প্রেরণ করি, একটি একক বার্তা যাতে 16 টি উপাদান সম্বন্ধে একটি সমষ্টিগত তথ্য থাকে।

এইভাবে Arduino এবং Nextion থেকে যোগাযোগ যথেষ্ট হ্রাস পায় কারণ সিরিয়ালে নেক্সটনে প্রেরিত একক বার্তায়, তথ্য সংগ্রহ করা হয় যা অন্যথায় 16 বার্তা প্রেরণের প্রয়োজন হতো।

সত্য, সব রিপোর্ট আপডেট করা সবসময় প্রয়োজন হয় না, কিন্তু আমি নিশ্চিত যে অন্যথায় করতে গেলে আরো সময় নষ্ট হবে।

স্বাভাবিকভাবেই Arduino দ্বারা প্রাপ্ত পূর্ণসংখ্যার প্রতিটি বিট, নেক্সশন ডিসপ্লেকে এটি পছন্দসই বৈশিষ্ট্যের সাথে যুক্ত করতে হবে।

এর মানে হল যে কোডটি নেক্সশন ডিসপ্লেতে লিখতে হবে, কিন্তু এটি ভয় পাওয়ার নয়: যদি আমি সফল হই…

তারপরে একটি দ্বিগুণ সুবিধা রয়েছে: আরডুইনোতে একটি হালকা কোড থাকবে এবং নেক্সটেশনের সাথে সিরিয়াল যোগাযোগে কম ব্যস্ত থাকবে।

একক বার্তায় ডেটা পাওয়ার পরে বিরক্তি, 16 টি বার্তার জন্য অপেক্ষা করার চেয়ে তাদের দ্রুত ব্যবহার করবে। 16 টি সিগন্যাল চালু বা বন্ধ করা তাই সবচেয়ে সাধারণ মোডের ক্ষেত্রে প্রায় সমসাময়িক হবে, যেখানে প্রথম সিগন্যালিংয়ের কমান্ড এবং শেষ সিগন্যালিংয়ের কমান্ডের মধ্যে অজানা সংখ্যক বার্তার সময় চলে যায়।

নেক্সশন ডিসপ্লেতে আমি ক্লাসিক পদ্ধতিতে এই সিস্টেমটি তৈরি করেছি, অর্থাৎ প্রতিবার একটি 'মাস্ক' রেজিস্টার চালু করলে আপনি 16 টি বিটের প্রতিটি পরীক্ষা করতে পারবেন। যখন বিট পরীক্ষা করা হয় উচ্চ, সেই বিটের সাথে যুক্ত সংকেত ডিসপ্লেতে জ্বলে ওঠে এবং একটু কম হলে বন্ধ হয়ে যায়।

এই সিস্টেমের 'নেতিবাচক' দিকটি হল যে নেক্সশন ডিসপ্লেতে লেখা কোডটি Arduino কোডের তুলনায় নথিভুক্ত করা কম সুবিধাজনক। উপরন্তু, নেক্সশন কোড বিভিন্ন বস্তুর উপর ছড়িয়ে ছিটিয়ে থাকার ঝুঁকি রাখে। আপনি এখনই যা করেন তা নথিভুক্ত করার জন্য যত্ন নেওয়া উচিত।

আমি কোডটি লিখতে নোটপ্যাড ++ ব্যবহার করি যা আমি নেক্সশন অবজেক্টে অনুলিপি করি যা প্রায় 0 পৃষ্ঠার tm0 তে রয়েছে।

নেক্সশন ভাষার সিনট্যাক্সের অসংখ্য সীমাবদ্ধতা রয়েছে, কিন্তু এটি তাদের অতিক্রম করতে বা তাদের চারপাশে ন্যূনতম প্রচেষ্টার সাথে পরিচালনা করতে এবং সমস্যাগুলিকে দৃষ্টিকোণ থেকে দেখার চেষ্টা করে যা অস্বাভাবিকও।

একটি উদাহরণ হিসাবে, আমি যেভাবে Arduino রেজিস্টারটি প্রেরণ করার জন্য লিখেছি, আমার দ্বারা সবচেয়ে প্রাথমিক উপায়ে লিখেছি।

ধাপ 1: কিভাবে নিবন্ধন প্রেরণ করা হয়

ArduinoCode. PDF ফাইলে আমি আমার সমস্ত স্কেচ দেখাই। (এখানে কোড পড়া নিচে এটি এত স্পষ্ট নয়)

এখানে নিচে, আমি শুধু দেখাতে চাই যে Arduino লাইব্রেরির সাহায্য ছাড়াই 16 বিট রেজিস্টারকে নেক্সটনে পাঠায়, কিন্তু ITEAD দ্বারা বর্ণিত সিনট্যাক্সকে সম্মান করে।

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

অকার্যকর NexUpd ()

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

{

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

SRSerial.print (InpReg); // সংগৃহীত 16 টি বিট নেক্সশন ডিসপ্লেতে প্রেরণ করুন

SRSerial.print (InpReg); // সংগৃহীত 16 টি বিট নেক্সশন ডিসপ্লেতে প্রেরণ করুন

SRSerial.write (টার্মিন); // 255

SRSerial.write (টার্মিন); // 255

SRSerial.write (টার্মিন); // 255

}

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

ধাপ 2:.. কিন্তু আগে…।

.. কিন্তু আগে …
.. কিন্তু আগে …

অবশ্যই কোডটি সমস্ত ঘোষণা এবং সেটআপ () দিয়ে শুরু হয়।

ইনপুটগুলি INPUT_PULLUP, তাই ইনপুট সুইচগুলি সাধারণত খোলা থাকে এবং যখন বন্ধ থাকে, তখন তারা সংশ্লিষ্ট ইনপুটে GND প্রয়োগ করে।

(এটি আমার প্রথম নির্দেশযোগ্য এবং এই খারাপ ভাবে আপনাকে আমার কোড দেখানোর জন্য আমি দু sorryখিত। দয়া করে ArduinoCode. PDF ফাইলটি ডাউনলোড করুন যে এটি খুব স্পষ্ট।

আমাকে এটি সম্পর্কে আরো কথা বলা যাক

আমি Nextion ডিসপ্লেতে 'বলার' জন্য আমার নিজস্ব উপায় তৈরি করেছি এটি কি করতে হবে। সাধারণত MCU (আমার ক্ষেত্রে Arduino) যে কোন একক বস্তুর বৈশিষ্ট্য প্রয়োগ করার জন্য প্রতিটি একক বৈচিত্রের জন্য একটি বার্তা পাঠায়। আমি আরও সুবিধাজনক পেয়েছি যে Arduino 16 বিট রেজিস্টারে সংগ্রহ করে নেক্সটনে পরিবর্তিত বৈশিষ্ট্যগুলির তথ্য। প্রায় 500 এমএস, আমার Arduino Nextion- এ একটি বার্তা পাঠায় যার মধ্যে প্রতিটি রেজিস্টারে 16 বিট থাকে। স্পষ্টতই নেক্সটনে আমাদের এমন কোড দরকার যা পরিচালনা করতে হবে। টাস্কের এই বিতরণ (এবং কোড) আরও অনেক সুবিধা পেতে দেয়। উদাহরণস্বরূপ, ভাবুন কিভাবে পলককে একটি আলো বানানো যায়! আমার পদ্ধতির সাথে এটি সহজ: আরডুইনো রেজিস্টারে কিছুটা সেট করুন এবং নেক্সটনে পাঠান। নেক্সটশন টুইন রেজিস্টারগুলি খুব কমই আরডুইনো থেকে আপডেট করা যেতে পারে, কারণ ব্লিংক ফ্রিকোয়েন্সি এটি যোগাযোগ থেকে স্বাধীন; ব্লিঙ্ক ফ্রিকোয়েন্সি টাইমার অবজেক্ট থেকে নেক্সটনে নির্ভর করে এবং ন্যূনতম টাইম বেসের সাথে 50 এমএস এর কাছাকাছি চলতে পারে। সুতরাং আমার পদ্ধতির সাহায্যে আমরা ফ্রিকোয়েন্সি তুলনামূলকভাবে উচ্চ (নেক্সটনে 2 হিজ) নেক্সটনে একটি আলোর ঝলকানি দিতে পারি, এমনকি যদি আমার আরডুইনো প্রতি 10 সেকেন্ডে বার্তা পাঠায়, শুধুমাত্র একটি চরম উদাহরণের জন্য। এটি বিপরীত সমস্যার পরামর্শ দিতে পারে: যোগাযোগ ব্যর্থ হলে কীভাবে করবেন? এটি এই আলোচনার বিষয় নয়, কিন্তু আমি ইতিমধ্যেই এই সমস্যাটি এক ধরনের ওয়াচ ডগ দিয়ে সমাধান করেছি: একটি আরডুইনো কোডের ভিতরে, আরেকটি নেক্সশন কোডের মধ্যে।

ঝলকানি Nextion কোড দ্বারা নিয়ন্ত্রিত হয়, যেখানে প্রতিটি আলো তার যথাযথ নিয়ম অনুসরণ করে: চালু/বন্ধ বা সবুজ/লাল অথবা ভিতরে লিখিত পরিবর্তন (বা অন্য আরো)। আমি আমার প্রজেক্ট সম্পর্কে আরো কিছু কথা বলতে পারতাম কিন্তু আমি আপনার প্রশ্নের অপেক্ষা করতে পছন্দ করি, এর আগে খুব বেশি শব্দ যোগ করার জন্য আমার পক্ষে অনুবাদ করার মতো সহজ নয়।

ধাপ 3: নেক্সট অবজেক্টস এডিট করা

নেক্সটেশন অবজেক্টস এডিট করা
নেক্সটেশন অবজেক্টস এডিট করা

এখানে tm0 অবজেক্টে নেক্সশন এডিটর দিয়ে লেখা কোডের একটি অংশ।

এটি আমাদের নোটিশ থেকে রেহাই পায় না যে Arduino থেকে প্রাপ্ত 16 টি বিটের সাথে, নেক্সশন ডিসপ্লে কেবল সিগন্যালগুলি চালু এবং বন্ধ করে না। আপাতত আমি ব্যাখ্যাগুলি বাদ দিচ্ছি যাতে বোঝার জটিলতা না হয়।

আমি একজন শিক্ষানবিশ এবং তাই নেক্সটেশন কোড ডাউনলোড করা ভাল। (আমি দু sorryখিত এটা আমার প্রথম নির্দেশযোগ্য)

আপনি যদি চান তবে আপনি এই আমার অ্যাপ্লিকেশনের জন্য সম্পূর্ণ কোড "HMI" ডাউনলোড করতে পারেন। এই কোডের ফাইলের নাম POW1225. HMI। এটি আপনার নেক্সশন ডিসপ্লে NX4024T032 এ চালাতে পারে কিন্তু এটি বুঝতে আপনাকে অনেক বস্তুর মধ্যে সাঁতার কাটতে হবে এবং সম্পাদকের ছোট জানালার ভিতরে কোডটি দেখতে হবে। তাই আমি মনে করি যে মূল কোডটি দেখতে আরও সহজ হবে, ফাইল নেক্সশন কোডে লেখা। পিডিএফ

// প্রকল্প POW1225. HMI 15 মে 2019

// vACC (va0) অ্যাকুমুলেটর

// vINP (va1) ইনপুট রেজিস্টার xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 শুরু

tm0.tim = 50 // tm0 টাইম বেস 50 mS

// আরডিওয়াই ***************

vACC.val = vINP.val & 0x0001 // মাস্ক

যদি (vACC.val! = 0) // টেস্ট RDY

{

tRDY.pco = নীল // লাল

} অন্যথায়

{

tRDY.pco = ধূসর // গা G় ধূসর

}

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

vACC.val = vINP.val & 0x0002

যদি (vACC.val! = 0) // টেস্ট PWR

{

tPWR.pco = সবুজ // হালকা সবুজ

tPON.txt = "ON" // ON

tPON.pco = সবুজ // হালকা সবুজ

} অন্যথায়

{

tPWR.pco = ধূসর // গা G় ধূসর 33808

tPON.txt = "বন্ধ" // বন্ধ

tPON.pco = ধূসর // গা G় ধূসর 33808

}

// শুকনো ***************

vACC.val = vINP.val & 0x0004

যদি (vACC.val! = 0) // টেস্ট DRY

{

tDRV.pco = নীল // নীল

tDRY.pco = নীল // নীল

} অন্যথায়

{

tDRV.pco = ধূসর // গা G় ধূসর 33808

tDRY.pco = ধূসর // গা G় ধূসর 33808

}

// রান ***************

vACC.val = vINP.val & 0x0018

যদি (vACC.val! = 0) // টেস্ট রান

{

tRUN.bco = RED // MARCIA RED (চালু)

tRUN.pco = BLACK // BLACK

tDIR.bco = RED // DIR RED

tDIR.pco = BLACK // BLACK

} অন্যথায়

{

tRUN.bco = 32768 // মার্সিয়া গ্রে (বন্ধ)

tRUN.pco = ধূসর // ধূসর রঙে

tDIR.bco = 32768 // DIR গা dark় সবুজ 1024

tDIR.pco = ধূসর // ধূসর ধূসর

tDIR.txt = "---" // স্টপ

}

// বাম **************

vACC.val = vINP.val & 0x0008

যদি (vACC.val! = 0) // টেস্ট রান ডান

{

tDIR.txt = "<<<" // DIR লেফট

}

// অধিকার *************

vACC.val = vINP.val & 0x0010

যদি (vACC.val! = 0) // টেস্ট রান বাম

{

tDIR.txt = ">>>" // DIR অধিকার

}

// উভয় **************

vACC.val = vINP.val & 0x0018

যদি (vACC.val == 24) // টেস্ট রান উভয়

{

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

}

// পরীক্ষা **************

vACC.val = vINP.val & 0x0020

যদি (vACC.val! = 0) // টেস্ট টেস্ট

{

tTEST.pco = সাদা // সাদা

tsw tTEST, 1 // টাচ ইভেন্ট সক্ষম করুন

} অন্যথায়

{

tTEST.pco = ধূসর // গা G় ধূসর 33808

tsw tTEST, 0 // টাচ ইভেন্ট নিষ্ক্রিয় করুন

}

// ভুল *************

vACC.val = vINP.val & 0x0040

যদি (vACC.val == 0) // পরীক্ষা ব্যর্থ

{

tFLT.pco = গ্রে // FAULT অনুপস্থিত

}

যদি (vACC.val! = 0)

{

tFLT.pco = YELLOW // FAULT present

}

// ইএমই ***************

vACC.val = vINP.val & 0x0080

যদি (vACC.val == 0) // টেস্ট ইএমই

{

tEME.pco = ধূসর // EME অনুপস্থিত

}

যদি (vACC.val! = 0)

{

tEME.pco = RED // EME উপস্থিত

}

}

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

vACC.val = vINP.val & 0x0100

যদি (vACC.val! = 0) // টেস্ট FERMO

{

tFER.pco = কালো // কালো

tFER.bco = সবুজ // সবুজ

} অন্যথায়

{

tFER.pco = ধূসর // ধূসর

tFER.bco = 672 // গা G় সবুজ

}

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

স্বীকৃতি

আমি আমার স্বীকৃতি দিতে চাই গিদিওন রসোউভকে কারণ তার নির্দেশাবলী পড়া আমি আমার লক্ষ্যগুলির একটি অংশ দ্রুত অর্জন করেছি। ধন্যবাদ মি। গিডিয়ন রসোউভ

প্রস্তাবিত: