কিভাবে Arduino সিরিয়াল বাফার সাফ করবেন

Kibhabe Arduino Siriyala Baphara Sapha Karabena



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

আরডুইনো সিরিয়াল বাফার

সুতরাং, আমরা সবাই জানি আরডুইনো যোগাযোগ করে সিরিয়াল কমিউনিকেশন প্রোটোকল ব্যবহার করে যা USART নামে পরিচিত। হ্যাঁ, Arduino এর কিছু অন্যান্য প্রোটোকল আছে যেমন SPI, I2C কিন্তু USART হল সবচেয়ে সাধারণ এবং প্রায়শই ব্যবহৃত প্রোটোকল। আপনার যদি আরডুইনো তিনটি প্রোটোকল পড়ার আগ্রহ থাকে তবে ক্লিক করুন এখানে .







Arduino সিরিয়াল বাফার ইনকামিং সিরিয়াল অক্ষর সংগ্রহ করে এবং মাইক্রোকন্ট্রোলার তাদের প্রক্রিয়া না করা পর্যন্ত তাদের ধরে রাখে। সিরিয়াল কমিউনিকেশন হল এক ডিভাইস থেকে অন্য ডিভাইসে ডেটা স্থানান্তরের পদ্ধতি। আরডুইনো তার বোর্ডে USART হার্ডওয়্যার ব্যবহার করে প্রতিটি 8 বিটকে একটি বাইটে একত্রিত করে। তারপর এই বাইটগুলিকে সিরিয়াল বাফারে সংরক্ষণ করুন, সর্বোচ্চ 64 বাইট Arduino সিরিয়াল বাফারের ভিতরে সংরক্ষণ করা যেতে পারে।



সাফ Arduino সিরিয়াল বাফার

আরডুইনো সিরিয়াল বাফারগুলিতে ডেটা সঞ্চয় করার জন্য সীমিত মেমরি থাকে যদি মেমরি ওভারফ্লো হয় বা সিরিয়াল পিনে প্রচুর পরিমাণে ডেটা থাকে তবে ইনকামিং ডেটা সঞ্চয় করার জন্য প্রথমে আমাদের সিরিয়াল বাফারটি পরিষ্কার করতে হবে। আসুন Arduino সিরিয়াল বাফার সাফ করার সম্ভাব্য উপায় খুঁজে বের করা যাক।



Arduino সিরিয়াল বাফার সাফ করার উপায়

সিরিয়াল বাফার স্থান খালি করতে যাতে এটি দুটি উপায় অনুসরণ করে নতুন ডেটা সহ আপডেট করা যেতে পারে সহায়ক হতে পারে:





    • Serial.flush() ফাংশন ব্যবহার করে সিরিয়াল বাফার সাফ করুন
    • Serial.begin() ফাংশন ব্যবহার করে সিরিয়াল বাফার সাফ করুন

1: Serial.flush() ফাংশন ব্যবহার করে সিরিয়াল বাফার পরিষ্কার করুন

সুতরাং, প্রথম পদ্ধতি যা একটি Arduino সিরিয়াল বাফার পরিষ্কার করতে পারে একটি Serial.flush() ফাংশন ব্যবহার করে। এই ফাংশনটি Arduino সিরিয়াল লাইব্রেরি ফাংশনের অন্তর্গত।

Serial.flush()

Arduino Serial.flush() ফাংশন সম্পূর্ণরূপে ডেটা প্রেরণের জন্য অপেক্ষা করে। ইনকামিং ডেটা বাতিল করার পরিবর্তে এটি এটিকে অপেক্ষা করার অনুমতি দেয় তাই একবার বাফারের ভিতরের ডেটা সম্পূর্ণরূপে প্রেরণ করা হলে সিরিয়াল বাফার নতুন ডেটা গ্রহণ করতে পারে।



বিঃদ্রঃ : Serial.flush() প্রোগ্রামগুলি ব্যবহার করার পরে সিরিয়াল মনিটরে আউটপুট চালানো এবং মুদ্রণ করতে আরও সময় লাগতে পারে। এখন পর্যন্ত আরডুইনো কোডটি সমস্ত ডেটা প্রেরণের পরে অপেক্ষা করে যাতে এটি তার মেমরিতে নতুন ডেটা সংরক্ষণ করতে পারে।

বাক্য গঠন

সিরিয়াল.ফ্লাশ ( )

পরামিতি

এটি শুধুমাত্র একটি প্যারামিটার লাগে।

সিরিয়াল: সিরিয়াল পোর্ট অবজেক্ট

রিটার্নস

এই ফাংশন কিছুই ফেরত দেয় না.

উদাহরণ কোড

এখানে কোড যা Serial.flush() ফাংশন ব্যবহার না করে লেখা হয়েছে:

অকার্যকর সেটআপ ( ) {
সিরিয়াল.শুরু ( 9600 ) ;
স্বাক্ষরবিহীন লম্বা মিলি_ফ্লুশস্টার্ট = মিলি ( ) ; /* বর্তমান Arduino ঘড়ি সংরক্ষণ করে কোড শুরু করুন সময় */
Serial.println ( ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( ( 'Linuxhint.com/Tutorial' ) ) ;
স্বাক্ষরবিহীন লম্বা মিলি_ফ্লুশস্টপ = মিলি ( ) ; /* বর্তমান সময় এই মুহূর্তে */
সিরিয়াল.প্রিন্ট ( ( 'ফ্লাশ ফাংশন ছাড়া এটি লাগে' ) ) ;
সিরিয়াল.প্রিন্ট ( millis_FlushStop - millis_FlushStart ) ; /* প্রিন্ট সময় ডেটা প্রিন্ট করতে সিরিয়াল বাফার দ্বারা নেওয়া হয় */
Serial.println ( ( 'মিলিসেকেন্ড।' ) ) ;
}
অকার্যকর লুপ ( ) {
}


উপরের কোডে আমরা তিনটি ভিন্ন স্ট্রিং শুরু করেছি এবং millis() ফাংশন থেকে বর্তমান সময় নিয়ে নতুন ভেরিয়েবলে সংরক্ষণ করে কোডটি শুরু করেছি। একবার millis() ফাংশন ব্যবহার করে ডাটা আবার প্রিন্ট করা হলে আমরা বর্তমান সময়টিকে একটি নতুন ভেরিয়েবলে পাস করি।

দুটি ভেরিয়েবলের মধ্যে উভয় সময় পাওয়া গেলে, পার্থক্যটি আমাদেরকে মিলিসেকেন্ডে তিনটি সংজ্ঞায়িত স্ট্রিং প্রিন্ট করতে আরডুইনোর সময় দেবে।


আউটপুট টার্মিনালে দেখা যায় সংজ্ঞায়িত স্ট্রিং প্রিন্ট করতে 9ms লাগে।


এখন নীচের কোডে আমরা Serial.flush() ফাংশন ব্যবহার করব যা সমস্ত স্ট্রিংকে পাস করার অনুমতি দেবে এবং পরবর্তী ডেটা পাওয়ার জন্য সিরিয়াল বাফার পরিষ্কার না হওয়া পর্যন্ত সেখানে অপেক্ষা করতে হবে। অতএব, Serial.flush() ব্যবহার না করে ডেটা প্রিন্ট করার তুলনায় অতিরিক্ত সময় লাগবে।

অকার্যকর সেটআপ ( ) {
সিরিয়াল.শুরু ( 9600 ) ;
স্বাক্ষরবিহীন লম্বা মিলি_ফ্লুশস্টার্ট = মিলি ( ) ; /* বর্তমান Arduino ঘড়ি সংরক্ষণ করে কোড শুরু করুন সময় */
Serial.println ( ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( ( 'Linuxhint.com/Tutorial' ) ) ;
সিরিয়াল.ফ্লাশ ( ) ; /* অপেক্ষা করে জন্য যে ফ্লাশ মেমরি পরে তথ্য প্রেরণ করা হবে */
স্বাক্ষরবিহীন লম্বা মিলি_ফ্লুশস্টপ = মিলি ( ) ; /* বর্তমান সময় এই মুহূর্তে */
সিরিয়াল.প্রিন্ট ( ( 'ফ্লাশ ফাংশনের সাথে এটি লাগে' ) ) ;
সিরিয়াল.প্রিন্ট ( millis_FlushStop - millis_FlushStart ) ; /* প্রিন্ট সময় ডেটা প্রিন্ট করতে সিরিয়াল বাফার দ্বারা নেওয়া হয় */
Serial.println ( ( 'মিলিসেকেন্ড।' ) ) ;
}
অকার্যকর লুপ ( ) {
}


এই কোডটি আমরা আগে ব্যাখ্যা করা একটির অনুরূপ। এখানে পার্থক্য হল Serial.flush() ফাংশন যা পরবর্তী ডেটা পাওয়ার জন্য সিরিয়াল বাফার মেমরি পরিষ্কার না হওয়া পর্যন্ত প্রোগ্রামটিকে কিছু অতিরিক্ত সময় অপেক্ষা করতে দেয়।


আউটপুটে আমরা স্পষ্ট দেখতে পাচ্ছি যে আগেরটির তুলনায় এবার তিনটি স্ট্রিং প্রিন্ট করতে 76ms লাগে যা 9ms লাগে।

2: Serial.begin() ফাংশন ব্যবহার করে সিরিয়াল বাফার সাফ করুন

এখন পর্যন্ত আমরা সিরিয়াল বাফার ক্লিয়ার করার জন্য Serial.flush() ফাংশনটি ব্যাখ্যা করেছি কিন্তু এই ফাংশনটি সম্পূর্ণরূপে ডেটা প্রেরণের জন্য অপেক্ষা করতে হবে এখন প্রশ্ন আসে আমরা যদি সিরিয়াল বাফারের ভিতরে ইনকামিং ডেটা সাফ করতে চাই তবে কী হবে। প্রশ্নের উত্তর সহজ: আমরা একটি ব্যবহার করে এটি করতে পারি যখন সিরিয়াল লাইব্রেরি ফাংশন দিয়ে লুপ করুন।

বাক্য গঠন

যখন ( Serial.available ( ) )
সিরিয়াল.পড়ুন ( ) ;
সিরিয়াল.এন্ড ( ) ;
সিরিয়াল.শুরু ( 9600 ) ;

কোড

স্ট্রিং ভ্যাল;
অকার্যকর সেটআপ ( ) {
}
অকার্যকর লুপ ( ) {
যদি ( Serial.available ( ) ) { /* চেক জন্য সিরিয়াল তথ্য */
val = '' ;
যখন ( Serial.available ( ) ) { /* পড়া সিরিয়াল তথ্য যদি উপলব্ধ */
চর সিরিয়াল_ডেটা = সিরিয়াল.পড়ুন ( ) ;
ভাল =val+Serial_Data; /* নতুন স্ট্রিং এর মধ্যে তথ্য সংরক্ষণ করুন */
}
Serial.println ( ভাল ) ; /* প্রিন্ট করুন পড়া তথ্য */
সিরিয়াল.এন্ড ( ) ; /* সিরিয়াল যোগাযোগ শেষ করুন */
সিরিয়াল.শুরু ( 9600 ) ; /* স্পষ্ট সিরিয়াল বাফার */
}
}


আরডুইনো Serial.begin() ফাংশন ব্যবহার করে বড রেট নির্ধারণ করে সিরিয়াল কমিউনিকেশন শুরু করার জন্য, একবার এই ফাংশনটি আরডিনো মেমরিতে সংরক্ষিত ডেটা পরিষ্কার হয়ে যায়। এখানে আমরা Serial.available() ফাংশন ব্যবহার করে সিরিয়াল ডেটা পরীক্ষা করব একবার ডেটা পড়ার পরে এটি একটি নতুন স্ট্রিং এর মধ্যে সংরক্ষণ করবে এবং সর্বশেষে Serial.begin(9600) ব্যবহার করে আমরা Arduino সিরিয়াল বাফারটি পরিষ্কার করব।

বিঃদ্রঃ: আমাদের সিরিয়াল বাফারটি ফ্লাশ করতে হবে কারণ এটি নিশ্চিত করে যে ডিভাইসে ডেটা পাঠানো হয়েছে এবং পাঠানোর জন্য অপেক্ষা করা বা আটকে রাখা হয়নি।

উপসংহার

Arduino সিরিয়াল বাফার পরিষ্কার করতে যাতে এটি বাফার মেমরির ভিতরে নতুন ডেটা সংরক্ষণ করতে পারে Serial.flush() এবং Serial begin ব্যবহার করা যেতে পারে। এটি Arduino সিরিয়াল বাফার সাফ করতে ব্যবহার করা যেতে পারে, কিন্তু এটি এড়াতে একবার সমস্ত ডেটা প্রেরণ করার জন্য আমাদের অপেক্ষা করতে হবে, আমরা Serial.begin() ফাংশনের সাথে কিছু সময় লুপ ব্যবহার করতে পারি যা সিরিয়াল বাফার থেকে ইনকামিং ডেটাও পরিষ্কার করতে পারে।