كيفية مسح المخزن المؤقت اردوينو التسلسلي

Kyfyt Msh Almkhzn Almwqt Ardwynw Altslsly

Arduino عبارة عن نظام أساسي إلكتروني يأخذ التعليمات من المستخدمين في شكل رمز يُعرف باسم الرسم ويولد الإخراج وفقًا لذلك. لجمع التعليمات ومعالجتها واحدة تلو الأخرى ، يستخدم Arduino مخزنًا مؤقتًا تسلسليًا. يحتفظ المخزن المؤقت التسلسلي Arduino بالبيانات الواردة حتى يصبح الجهاز جاهزًا لمعالجتها. في بعض الأحيان يتعين علينا مسح المخزن المؤقت التسلسلي Arduino لتجنب التداخل مع البيانات الواردة. دعونا نرى هذا بمزيد من التفصيل.

اردوينو المسلسل العازلة

لذلك ، نعلم جميعًا أن Arduino يتواصل باستخدام بروتوكول الاتصال التسلسلي المعروف باسم USART. نعم ، لدى Arduino بعض البروتوكولات الأخرى مثل SPI و I2C ولكن USART هو البروتوكول الأكثر شيوعًا والأكثر استخدامًا. إذا كنت مهتمًا بقراءة بروتوكولات Arduino الثلاثة ، فانقر فوق هنا .



تقوم مخازن Arduino التسلسلية بجمع الأحرف التسلسلية الواردة والاحتفاظ بها حتى يتمكن المتحكم الدقيق من معالجتها. الاتصال التسلسلي هو طريقة نقل البيانات من جهاز إلى آخر. يقوم Arduino باستخدام أجهزة USART على لوحاته بتجميع كل 8 بتات في بايت. ثم قم بتخزين هذه البايتات في المخزن المؤقت التسلسلي ، يمكن تخزين 64 بايت بحد أقصى داخل المخزن المؤقت التسلسلي لاردوينو.



مسح المخزن المؤقت اردوينو التسلسلي

تحتوي مخازن Arduino التسلسلية على ذاكرة محدودة لتخزين البيانات في حالة تجاوز الذاكرة أو وجود كمية كبيرة من البيانات في الدبوس التسلسلي ، يتعين علينا مسح المخزن المؤقت التسلسلي أولاً لتخزين البيانات الواردة. دعونا نتعرف على الطرق الممكنة لمسح المخزن المؤقت التسلسلي لاردوينو.



طرق مسح المخزن المؤقت لاردوينو

لتحرير مساحة المخزن المؤقت التسلسلي بحيث يمكن تحديثها ببيانات جديدة باتباع الطريقتين ، يمكن أن يكون مفيدًا:

    • امسح المخزن المؤقت التسلسلي باستخدام وظيفة Serial.flush ()
    • امسح المخزن المؤقت التسلسلي باستخدام الدالة Serial.begin ()

1: مسح المخزن المؤقت التسلسلي باستخدام وظيفة Serial.flush ()

لذلك ، فإن الطريقة الأولى التي يمكنها مسح المخزن المؤقت التسلسلي لاردوينو هي استخدام دالة Serial.flush (). تنتمي هذه الوظيفة إلى وظيفة مكتبة Arduino التسلسلية.

Serial.flush ()

تنتظر وظيفة Arduino Serial.flush () حتى يتم إرسال البيانات بالكامل. بدلاً من تجاهل البيانات الواردة ، فإنه يسمح لها بالانتظار لذلك بمجرد نقل البيانات الموجودة داخل المخزن المؤقت بالكامل ، يمكن للمخزن التسلسلي المؤقت تلقي البيانات الجديدة.



ملحوظة : بعد استخدام برامج Serial.flush () قد تستغرق وقتًا أطول لتنفيذ وطباعة الإخراج على الشاشة التسلسلية. اعتبارًا من الآن ، ينتظر كود Arduino بمجرد إرسال جميع البيانات حتى يتمكن من تخزين بيانات جديدة داخل ذاكرته.

بناء الجملة

المسلسل ( )

المعلمات

لا يتطلب سوى معلمة واحدة.

مسلسل: كائن المنفذ التسلسلي

عائدات

هذه الوظيفة لا تُرجع شيئًا.

رمز المثال

إليك الكود المكتوب بدون استخدام دالة Serial.flush ():

الإعداد باطل ( ) {
المسلسل ( 9600 ) ؛
millis_FlushStart طويل بدون توقيع = ملي ( ) ؛ / * ابدأ الكود عن طريق حفظ ساعة Arduino الحالية زمن * /
المسلسل. println ( F ( 'Linuxhint.com/Arduino' ) ) ؛
المسلسل. println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ؛
المسلسل. println ( F ( 'Linuxhint.com/Tutorial' ) ) ؛
millis_FlushStop طويلة بدون توقيع = ملي ( ) ؛ / * تيار زمن عند هذه النقطة * /
المسلسل ( F ( 'بدون وظيفة التدفق ، يستغرق الأمر' ) ) ؛
المسلسل ( millis_FlushStop - مللي_فلوش ابدأ ) ؛ / * مطبوعات زمن تم التقاطها بواسطة المخزن المؤقت التسلسلي لطباعة البيانات * /
المسلسل. println ( F ( 'مللي ثانية'. ) ) ؛
}
حلقة فارغة ( ) {
}


في الكود أعلاه ، قمنا بتهيئة ثلاث سلاسل مختلفة وبدأنا الكود عن طريق أخذ الوقت الحالي من دالة millis () وحفظه في متغير جديد. بمجرد طباعة البيانات مرة أخرى باستخدام وظيفة millis () ، نمرر الوقت الحالي إلى متغير جديد.

بمجرد تلقي كلا الوقتين داخل متغيرين ، سيمنحنا الاختلاف الوقت الذي يستغرقه Arduino لطباعة السلاسل الثلاثة المحددة بالمللي ثانية.


في محطة الإخراج ، يمكن ملاحظة أن طباعة السلسلة المحددة تستغرق 9 مللي ثانية.


الآن في الكود الوارد أدناه ، سنستخدم وظيفة Serial.flush () التي ستسمح لجميع السلاسل بالمرور والانتظار هناك حتى يصبح المخزن المؤقت التسلسلي واضحًا لتلقي البيانات التالية. لذلك ، سيستغرق الأمر وقتًا إضافيًا مقارنة بطباعة البيانات دون استخدام Serial.flush ().

الإعداد باطل ( ) {
المسلسل ( 9600 ) ؛
millis_FlushStart طويل بدون توقيع = ملي ( ) ؛ / * ابدأ الكود عن طريق حفظ ساعة Arduino الحالية زمن * /
المسلسل. println ( F ( 'Linuxhint.com/Arduino' ) ) ؛
المسلسل. println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ؛
المسلسل. println ( F ( 'Linuxhint.com/Tutorial' ) ) ؛
المسلسل ( ) ؛ / * ينتظر إلى عن على البيانات التي سيتم نقلها بعد تلك الذاكرة المتدفقة * /
millis_FlushStop طويلة بدون توقيع = ملي ( ) ؛ / * تيار زمن عند هذه النقطة * /
المسلسل ( F ( 'يتطلب الأمر مع وظيفة التدفق' ) ) ؛
المسلسل ( millis_FlushStop - مللي_فلوش ابدأ ) ؛ / * مطبوعات زمن تم التقاطها بواسطة المخزن المؤقت التسلسلي لطباعة البيانات * /
المسلسل. println ( F ( 'مللي ثانية'. ) ) ؛
}
حلقة فارغة ( ) {
}


هذا الرمز مشابه للرمز الذي شرحناه سابقًا. الاختلاف هنا هو وظيفة Serial.flush () التي تسمح للبرنامج بالانتظار لبعض الوقت الإضافي حتى تصبح ذاكرة التخزين المؤقت التسلسلية واضحة لاستلام البيانات التالية.


في الإخراج يمكننا أن نرى بوضوح أن هذه المرة تستغرق 76 مللي ثانية لطباعة السلاسل الثلاثة مقارنة بالسلاسل السابقة التي تستغرق 9 مللي ثانية فقط.

2: مسح المخزن المؤقت التسلسلي باستخدام الدالة Serial.begin ()

حتى الآن شرحنا الوظيفة Serial.flush () لمسح المخزن المؤقت التسلسلي ولكن هذه الوظيفة يجب أن تنتظر نقل البيانات بالكامل الآن ، تتبادر الأسئلة إلى الذهن ماذا لو أردنا مسح البيانات الواردة داخل المخزن المؤقت التسلسلي. الإجابة على السؤال بسيطة: يمكننا القيام بذلك باستخدام ملف في حين حلقة مع وظيفة المكتبة التسلسلية.

بناء الجملة

في حين ( المسلسل متاح ( ) )
المسلسل ( ) ؛
المسلسل ( ) ؛
المسلسل ( 9600 ) ؛

شفرة

سلسلة فال
الإعداد باطل ( ) {
}
حلقة فارغة ( ) {
إذا ( المسلسل متاح ( ) ) { / * التحقق من إلى عن على البيانات التسلسلية * /
فال = '' ؛
في حين ( المسلسل متاح ( ) ) { / * قرأ البيانات التسلسلية إذا متوفرة * /
شار Serial_Data = المسلسل ( ) ؛
فال = val + Serial_Data ؛ / * تخزين البيانات داخل سلسلة جديدة * /
}
المسلسل. println ( فال ) ؛ / * اطبع ملف قرأ بيانات * /
المسلسل ( ) ؛ / * إنهاء الاتصال التسلسلي * /
المسلسل ( 9600 ) ؛ / * صافي المخزن المؤقت التسلسلي * /
}
}


يستخدم Arduino وظائف Serial.begin () لتهيئة الاتصال التسلسلي عن طريق تحديد معدل الباود ، بمجرد تهيئة هذه الوظيفة ، تصبح البيانات المخزنة مسبقًا في ذاكرة Arduino واضحة. هنا سوف نتحقق من البيانات التسلسلية باستخدام وظيفة Serial.available () بمجرد قراءة البيانات ، سيتم تخزينها داخل سلسلة جديدة وأخيرًا باستخدام Serial.begin (9600) سنقوم بمسح المخزن المؤقت التسلسلي Arduino.

ملحوظة: نحتاج إلى مسح المخزن المؤقت التسلسلي لأنه يضمن إرسال البيانات إلى الجهاز ولا تنتظر إرسالها أو يتم تعليقها.

استنتاج

لمسح المخزن المؤقت التسلسلي Arduino بحيث يمكنه تخزين بيانات جديدة داخل ذاكرة المخزن المؤقت يمكن استخدام Serial.flush () و Serial start. يمكن استخدامه لمسح المخزن المؤقت التسلسلي لـ Arduino ، ولكن علينا الانتظار بمجرد إرسال جميع البيانات لتجنب ذلك ، يمكننا استخدام حلقة while مع وظيفة Serial.begin () التي يمكنها أيضًا مسح البيانات الواردة من المخزن المؤقت التسلسلي.