Arduino سیریل بفر کو کیسے صاف کریں۔

Arduino Syryl Bfr Kw Kys Saf Kry



Arduino ایک الیکٹرانک پلیٹ فارم ہے جو صارفین سے کوڈ کی شکل میں ہدایات لیتا ہے جسے اسکیچ کہا جاتا ہے اور اس کے مطابق آؤٹ پٹ تیار کرتا ہے۔ ہدایات کو جمع کرنے اور ان پر ایک ایک کرکے کارروائی کرنے کے لیے، Arduino سیریل بفر کا استعمال کرتا ہے۔ Arduino سیریل بفر آنے والے ڈیٹا کو اس وقت تک رکھتا ہے جب تک کہ ڈیوائس ان پر کارروائی کرنے کے لیے تیار نہ ہو۔ بعض اوقات ہمیں آنے والے ڈیٹا میں مداخلت سے بچنے کے لیے Arduino سیریل بفر کو صاف کرنا پڑتا ہے۔ آئیے اس کو مزید تفصیل سے دیکھتے ہیں۔

Arduino سیریل بفر

لہذا، ہم سب جانتے ہیں کہ Arduino سیریل کمیونیکیشن پروٹوکول کا استعمال کرتے ہوئے بات چیت کرتا ہے جسے USART کہا جاتا ہے۔ ہاں، Arduino میں کچھ دوسرے پروٹوکول ہیں جیسے SPI, I2C لیکن USART سب سے عام اور کثرت سے استعمال ہونے والا پروٹوکول ہے۔ اگر آپ کو Arduino تینوں پروٹوکول پڑھنے میں دلچسپی ہے تو کلک کریں۔ یہاں .







Arduino سیریل بفر آنے والے سیریل کرداروں کو جمع کرتے ہیں اور انہیں اس وقت تک پکڑتے ہیں جب تک کہ مائکرو کنٹرولر ان پر کارروائی نہ کر سکے۔ سیریل کمیونیکیشن ڈیٹا کو ایک ڈیوائس سے دوسرے ڈیوائس میں منتقل کرنے کا طریقہ ہے۔ اپنے بورڈز پر USART ہارڈویئر کا استعمال کرتے ہوئے Arduino ہر 8 بٹس کو بائٹ میں جمع کرتا ہے۔ پھر ان بائٹس کو سیریل بفر میں اسٹور کریں، Arduino سیریل بفر کے اندر زیادہ سے زیادہ 64 بائٹس کو اسٹور کیا جاسکتا ہے۔



Arduino سیریل بفر صاف کریں۔

Arduino سیریل بفرز کے پاس ڈیٹا ذخیرہ کرنے کے لیے محدود میموری ہوتی ہے اگر میموری اوور فلو ہو جائے یا سیریل پن پر ڈیٹا کی بڑی مقدار موجود ہو تو ہمیں آنے والے ڈیٹا کو ذخیرہ کرنے کے لیے پہلے سیریل بفر کو صاف کرنا ہوگا۔ آئیے Arduino سیریل بفر کو صاف کرنے کے ممکنہ طریقے تلاش کرتے ہیں۔



Arduino سیریل بفر کو صاف کرنے کے طریقے

سیریل بفر اسپیس کو خالی کرنے کے لیے تاکہ اسے نئے ڈیٹا کے ساتھ اپ ڈیٹ کیا جا سکے دو طریقوں کی پیروی کرنا مددگار ثابت ہو سکتا ہے:





    • Serial.flush() فنکشن کا استعمال کرتے ہوئے سیریل بفر کو صاف کریں۔
    • Serial.begin() فنکشن کا استعمال کرتے ہوئے سیریل بفر کو صاف کریں۔

1: Serial.flush() فنکشن کا استعمال کرتے ہوئے سیریل بفر کو صاف کریں۔

لہذا، پہلا طریقہ جو Arduino سیریل بفر کو صاف کر سکتا ہے Serial.flush() فنکشن کا استعمال کر رہا ہے۔ یہ فنکشن Arduino سیریل لائبریری فنکشن سے تعلق رکھتا ہے۔

Serial.flush()

Arduino Serial.flush() فنکشن ڈیٹا کے مکمل طور پر منتقل ہونے کا انتظار کرتا ہے۔ آنے والے ڈیٹا کو ضائع کرنے کے بجائے یہ اسے انتظار کرنے کی اجازت دیتا ہے تاکہ ایک بار جب بفر کے اندر موجود ڈیٹا مکمل طور پر منتقل ہو جائے تو سیریل بفر نیا ڈیٹا وصول کر سکتا ہے۔



نوٹ : Serial.flush() پروگرام استعمال کرنے کے بعد سیریل مانیٹر پر آؤٹ پٹ پر عملدرآمد اور پرنٹ کرنے میں زیادہ وقت لگ سکتا ہے۔ ابھی تک Arduino کوڈ تمام ڈیٹا منتقل ہونے کے بعد انتظار کرتا ہے تاکہ یہ اپنی میموری میں نیا ڈیٹا محفوظ کر سکے۔

نحو

سیریل۔فلش ( )

پیرامیٹرز

یہ صرف ایک پیرامیٹر لیتا ہے۔

سیریل: سیریل پورٹ آبجیکٹ

واپسی

یہ فنکشن کچھ نہیں لوٹاتا ہے۔

مثال کا کوڈ

یہ وہ کوڈ ہے جو Serial.flush() فنکشن کو استعمال کیے بغیر لکھا گیا ہے۔

باطل سیٹ اپ ( ) {
سیریل شروع کریں۔ ( 9600 ) ;
غیر دستخط شدہ لمبی ملیس_فلش اسٹارٹ = ملی ( ) ; /* موجودہ Arduino گھڑی کو محفوظ کرکے کوڈ شروع کریں۔ وقت */
Serial.println ( ایف ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( ایف ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( ایف ( 'Linuxhint.com/Tutorial' ) ) ;
غیر دستخط شدہ لمبی ملی_فلش اسٹاپ = ملی ( ) ; /* موجودہ وقت اس مقام پر */
سیریل۔ پرنٹ ( ایف ( 'فلش فنکشن کے بغیر یہ لیتا ہے' ) ) ;
سیریل۔ پرنٹ ( ملی_فلش اسٹاپ - ملی_فلش اسٹارٹ ) ; /* پرنٹس وقت ڈیٹا پرنٹ کرنے کے لیے سیریل بفر کے ذریعے لیا گیا۔ */
Serial.println ( ایف ( 'ملی سیکنڈز۔' ) ) ;
}
باطل لوپ ( ) {
}


مندرجہ بالا کوڈ میں ہم نے تین مختلف سٹرنگز شروع کیں اور موجودہ وقت کو millis() فنکشن سے لے کر اور اسے ایک نئے ویری ایبل میں محفوظ کر کے کوڈ کو شروع کیا۔ ملس() فنکشن کا استعمال کرتے ہوئے ڈیٹا دوبارہ پرنٹ ہونے کے بعد ہم موجودہ وقت کو ایک نئے متغیر میں منتقل کر دیتے ہیں۔

ایک بار جب دونوں وقت دو متغیر کے اندر موصول ہو جاتے ہیں تو فرق ہمیں تین متعین سٹرنگز کو ملی سیکنڈز میں پرنٹ کرنے کے لیے Arduino کی طرف سے لیا جانے والا وقت دے گا۔


آؤٹ پٹ ٹرمینل میں یہ دیکھا جا سکتا ہے کہ وضاحت شدہ سٹرنگ کو پرنٹ کرنے میں 9ms کا وقت لگتا ہے۔


اب نیچے دیے گئے کوڈ میں ہم Serial.flush() فنکشن استعمال کریں گے جو تمام سٹرنگز کو گزرنے کی اجازت دے گا اور اس وقت تک انتظار کریں جب تک کہ سیریل بفر اگلا ڈیٹا حاصل کرنے کے لیے واضح نہ ہو جائے۔ لہذا، Serial.flush() کا استعمال کیے بغیر ڈیٹا پرنٹ کرنے کے مقابلے میں اضافی وقت لگے گا۔

باطل سیٹ اپ ( ) {
سیریل شروع کریں۔ ( 9600 ) ;
غیر دستخط شدہ لمبی ملیس_فلش اسٹارٹ = ملی ( ) ; /* موجودہ Arduino گھڑی کو محفوظ کرکے کوڈ شروع کریں۔ وقت */
Serial.println ( ایف ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( ایف ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( ایف ( 'Linuxhint.com/Tutorial' ) ) ;
سیریل۔فلش ( ) ; /* انتظار کرتا ہے۔ کے لیے اس فلش میموری کے بعد ڈیٹا منتقل کیا جائے گا۔ */
غیر دستخط شدہ لمبی ملیس_فلش اسٹاپ = ملی ( ) ; /* موجودہ وقت اس مقام پر */
سیریل۔ پرنٹ ( ایف ( 'فلش فنکشن کے ساتھ یہ لیتا ہے' ) ) ;
سیریل۔ پرنٹ ( ملی_فلش اسٹاپ - ملی_فلش اسٹارٹ ) ; /* پرنٹس وقت ڈیٹا پرنٹ کرنے کے لیے سیریل بفر کے ذریعے لیا گیا۔ */
Serial.println ( ایف ( 'ملی سیکنڈز۔' ) ) ;
}
باطل لوپ ( ) {
}


یہ کوڈ اس سے ملتا جلتا ہے جس کی ہم نے پہلے وضاحت کی تھی۔ یہاں فرق Serial.flush() فنکشن ہے جو پروگرام کو کچھ اضافی وقت انتظار کرنے کی اجازت دیتا ہے جب تک کہ سیریل بفر میموری اگلا ڈیٹا حاصل کرنے کے لیے واضح نہ ہو جائے۔


آؤٹ پٹ میں ہم واضح طور پر دیکھ سکتے ہیں کہ اس بار تین تاروں کو پرنٹ کرنے میں 76ms کا وقت لگتا ہے جیسا کہ پچھلے ایک کے مقابلے میں صرف 9ms لگتا ہے۔

2: Serial.begin() فنکشن کا استعمال کرتے ہوئے سیریل بفر کو صاف کریں۔

ابھی تک ہم نے سیریل بفر کو صاف کرنے کے لیے فنکشن Serial.flush() کی وضاحت کی تھی لیکن اس فنکشن کو مکمل طور پر ڈیٹا ٹرانسمٹ ہونے کا انتظار کرنا پڑتا ہے اب ذہن میں سوالات آتے ہیں کہ اگر ہم سیریل بفر کے اندر آنے والے ڈیٹا کو صاف کرنا چاہتے ہیں تو کیا ہوگا؟ سوال کا جواب آسان ہے: ہم یہ استعمال کر سکتے ہیں a جبکہ سیریل لائبریری فنکشن کے ساتھ لوپ کریں۔

نحو

جبکہ ( سیریل دستیاب ہے۔ ( ) )
سیریل۔پڑھیں۔ ( ) ;
سیریل اینڈ ( ) ;
سیریل شروع کریں۔ ( 9600 ) ;

کوڈ

سٹرنگ ویل؛
باطل سیٹ اپ ( ) {
}
باطل لوپ ( ) {
اگر ( سیریل دستیاب ہے۔ ( ) ) { /* چیک کریں کے لیے سیریل ڈیٹا */
val = '' ;
جبکہ ( سیریل دستیاب ہے۔ ( ) ) { /* پڑھیں سیریل ڈیٹا اگر دستیاب */
چار سیریل_ڈیٹا = سیریل۔پڑھیں۔ ( ) ;
val =val+Serial_Data; /* نئی سٹرنگ کے اندر ڈیٹا اسٹور کریں۔ */
}
Serial.println ( val ) ; /* پرنٹ کریں پڑھیں ڈیٹا */
سیریل اینڈ ( ) ; /* سیریل مواصلات کو ختم کریں۔ */
سیریل شروع کریں۔ ( 9600 ) ; /* صاف سیریل بفر */
}
}


Arduino Serial.begin() فنکشنز کا استعمال کرتا ہے تاکہ سیریل کمیونیکیشن کو شروع کرنے کے لیے بوڈ ریٹ کی وضاحت کی جائے، ایک بار جب اس فنکشن کو شروع کیا جاتا ہے تو Arduino میموری میں پہلے سے ذخیرہ شدہ ڈیٹا واضح ہوجاتا ہے۔ یہاں ہم Serial.available() فنکشن کا استعمال کرتے ہوئے سیریل ڈیٹا کو چیک کریں گے جب ڈیٹا پڑھ لیا جائے گا تو یہ ایک نئی سٹرنگ کے اندر محفوظ ہو جائے گا اور آخر میں Serial.begin(9600) کا استعمال کرتے ہوئے ہم Arduino سیریل بفر کو صاف کر دیں گے۔

نوٹ: ہمیں سیریل بفر کو فلش کرنے کی ضرورت ہے کیونکہ یہ اس بات کو یقینی بناتا ہے کہ ڈیوائس کو ڈیٹا بھیجا گیا ہے اور بھیجے جانے کا انتظار یا ہولڈ پر نہیں ہے۔

نتیجہ

Arduino سیریل بفر کو صاف کرنے کے لیے تاکہ یہ بفر میموری کے اندر نیا ڈیٹا محفوظ کر سکے Serial.flush() اور Serial begin کو استعمال کیا جا سکے۔ اسے Arduino سیریل بفر کو صاف کرنے کے لیے استعمال کیا جا سکتا ہے، لیکن اس سے بچنے کے لیے تمام ڈیٹا منتقل ہونے کے بعد ہمیں انتظار کرنا پڑے گا، ہم Serial.begin() فنکشن کے ساتھ تھوڑی دیر کے لوپ کا استعمال کر سکتے ہیں جو سیریل بفر سے آنے والے ڈیٹا کو بھی صاف کر سکتا ہے۔