الدالة Serial.print()‎ في أردوينو

من موسوعة حسوب
< Arduino‏ | serial
مراجعة 09:57، 22 أكتوبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (إضافة محتويات الصفحة.)
اذهب إلى التنقل اذهب إلى البحث

تطبع الدالة 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()‎: تكتب بيانات ثنائية على منفذ الاتصال التسلسلي.

مصادر