التابع Serial.print()‎ في أردوينو

من موسوعة حسوب

يطبع التابع print()‎ البيانات المُمرَّرة إليه على منفذ الاتصال التسلسلي بترميز ASCII (أي يطبع نصًّا يستطيع الآخرون قراءته).

تُطبَع الأعداد باستعمال الترميز ASCII لكل رقم، وتُطبَع الأعداد العشرية بشكل مشابه بترميز ASCII وبدقة عددين بعد الفاصلة افتراضيًّا. تُرسَل البايتات فرادى، كل محرف على حدة، وتُرسَل المحارف والسلاسل النصية كما هي.

Serial.print(78)             // "يعطي القيمة "78
Serial.print(1.23456)        // "يعطي القيمة "1.23
Serial.print('N')            // "N" يعطي القيمة
Serial.print("Hello world.") // نفسها "Hello world" يعطي السلسلة

يمكن تمرير معاملٍ ثانٍ اختياريٍّ إلى التابع print()‎ يحدِّد التنسيق (الأساس [base]) المراد استعماله لطباعة البيانات. أمَّا من أجل الأعداد العشرية، فيحدِّد هذا المعامل عدد الأرقام بعد الفاصلة.

Serial.print(78, BIN)    // "يعطي القيمة "1001110
Serial.print(78, OCT)    // "يعطي القيمة "116
Serial.print(78, DEC)    // "يعطي القيمة "78
Serial.print(78, HEX)    // "4E" يعطي القيمة
Serial.print(1.23456, 0) // "يعطي القيمة "1
Serial.print(1.23456, 2) // "يعطي القيمة "1.23
Serial.print(1.23456, 4) // "يعطي القيمة "1.2346

تستطيع تمرير سلاسل نصية مخزَّنة في ذاكرة البرنامج (flash-memory) إلى التابع print()‎ عبر تغليفها بالتابع F()‎:

Serial.print(F(Hello World))

إن أردت إرسال البيانات دون إجراء أية عملية تحويل عليها، فاستعمل التابع write()‎.

البنية العامة

Serial.print(val)
Serial.print(val, format)

المعاملات

val

البيانات المراد طباعتها على منفذ الاتصال التسلسلي.

format

معامل اختياري يحدِّد تنسيق (أساس) البيانات المراد طباعتها. القيم المتاحة التي يمكن استعمالها هي:

  • BIN(binary, or base 2)‎
  • OCT(octal, or base 8)‎
  • DEC(decimal, or base 10)‎
  • HEX(hexadecimal, or base 16)‎

إن كان المعامل val عددًأ عشريًّا، فسيُحدِّد هذا المعامل دقة ذلك العدد (عدد الأرقام بعد الفاصلة).

القيم المعادة

يعاد عدد البايتات التي كُتبَت.

أمثلة

مثالٌ على استعمال حلقة for لطباعة أعداد بتنسيقات مختلفة:

void setup() {
  Serial.begin(9600);      // فتح منفذ تسلسلي بمعدل 9600 بت/ثا
}

void loop() {
  // طباعة عناوين
  Serial.print("NO FORMAT");  // طباعة عنوان
  Serial.print("\t");      // طباعة مسافة جدولة

  Serial.print("DEC");
  Serial.print("\t");

  Serial.print("HEX");
  Serial.print("\t");

  Serial.print("OCT");
  Serial.print("\t");

  Serial.print("BIN");
  Serial.println();        // طباعة محرف العودة لبداية السطر بعد العنوان الأخير 

  for (int x = 0; x < 64; x++) { // ASCII طباعة جزء من الجدول
    // طباعة الجدول بتنسيقات مختلفة
    Serial.print(x);       // ASCII طباعة عدد عشري مرمَّز بالترميز
    Serial.print("\t\t");  // طباعة مسافتي جدولة لاستيعاب طول العنوان

    Serial.print(x, DEC);  // ASCII طباعة عدد عشري مرمَّز بالترميز
    Serial.print("\t");    // طباعة مسافة جدولة

    Serial.print(x, HEX);  // ASCII طباعة عدد ست عشري مرمَّز بالترميز
    Serial.print("\t");    // طباعة مسافة جدولة

    Serial.print(x, OCT);  // ASCII طباعة عدد ثماني مرمَّز بالترميز
    Serial.print("\t");    // طباعة مسافة جدولة

    Serial.println(x, BIN);  // ASCII طباعة عدد ثنائي مرمَّز بالترميز
    delay(200);            // تأخير 200 ميلي ثانية
  }
  Serial.println();        // طباعة محرف العودة لبداية السطر مرة أخرى
}

ملاحظات وتحذيرات

بدءًا من الإصدار 1.0، أصبحت عملية النقل عبر الاتصال التسلسلي غير متزامنة؛ ستعيد التابع عدد البايتات التي طبعتها قبل أن يُنقَل أيٌّ منها.

انظر أيضًا

  • التابع availableForWrite()‎: يجلب عدد البايتات (المحارف) المتاحة للكتابة في ذاكرة التخزين المؤقتة لمنفذ الاتصال التسلسلي دون حجب عملية الكتابة.
  • التابع end()‎: يعطِّل الاتصال التسلسلي المفتوح محرِّرةً بذلك الرجل 0 (RX) والرجل 1 (TX) لتصبح قابلةً للاستعمال كدخل أو خرج رقمي.
  • التابع flush()‎: ينتظر اكتمال عملية نقل البيانات المرسلة عبر الاتصال التسلسلي
  • التابع println()‎: يطبع البيانات المُمرَّرة إليها على منفذ الاتصال التسلسلي بترميز ASCII (أي نص يستطيع الأشخاص الآخرين قراءته) ثمَّ يُتبعها بمحرف العودة إلى بداية السطر (المحرف 'r\' أو ASCII 13) ومحرف سطر جديد (المحرف 'n\' أو ASCII 10).
  • التابع read()‎: يقرأ البيانات المستلمة عبر الاتصال التسلسلي.
  • التابع write()‎: يكتب بيانات ثنائية على منفذ الاتصال التسلسلي.

مصادر