اردوينو – الدرس السادس – شاشة الاتصال التسلسلي – Serial Monitor

مبتدئ

image_pdfimage_print

كود الأردوينو

كما ستلاحظ سوف نعتمد على كود الدرس السابق وسوف نقوم فقط بتغطية الاجزاء الجديدة بالكود ( عليك مراجعة كود الدرس السابق كاملاً حتى يسهل عليك متابعة الجزء الجديد)

أولاً ، دالة “setup” هنالك ثلاثة أسطر جديدة في نهايته

   

void setup()
    {
      pinMode(latchPin, OUTPUT);
      pinMode(dataPin, OUTPUT);  
      pinMode(clockPin, OUTPUT);
      updateShiftRegister();
      Serial.begin(9600);
      while (! Serial);
      Serial.println("Enter LED Number 0 to 7 or 'x' to clear");
    }

 

 

أولاً لدينا الأمر “Serial.begin(9600)” وهو يقوم ببدء عملية الإتصال التسلسلي ليمكن الأردوينو من إرسال الأوامر عبر كيبل الـUSB. القيمة 9600 هو معدل سرعة نقل البيانات،يمكنك تغيير القيمة لقيمة أعلى ولكن يجب عليك تغيير قيمة شاشة الاتصال التسلسلي لنفس القيمة.

السطر الثاني يبدأ بـ”While” الشرطية للتأكد من ان هنالك اتصال عبر الـUSB للأردوينو قبل بدء ارسال الرسائل .

السطر الثالث لطباعة السؤال بالشاشة.

دالة “loop”

   

void loop()
    {
      if (Serial.available())
      {
        char ch = Serial.read();
        if (ch >= '0' && ch <= '7')
        {
          int led = ch - '0';
          bitSet(leds, led);
          updateShiftRegister();
          Serial.print("Turned on LED ");
          Serial.println(led);
        }
        if (ch == 'x')
        {
          leds = 0;
          updateShiftRegister();
          Serial.println("Cleared");
        }
      }
    }

 

 

كل شي يحدث داخل دورة الـ loop يحدث داخل الجملة الشرطية IF (اذا كان)،
“Serial.available()” للتأكد من انه مازال هناك اتصال تسلسلي نشط (وذلك عبر استرجاع قيمة True – نعم) وعندها فقط يتم تنفيذ سلسلة الأوامر التي بداخلها.
اذا تم استقبال رسالة فسوف ينتقل لسطر الكود التالي

char ch = Serial.read();

 

 

هذا الأمر سيقوم بقراءة الحرف الذي تم استلامه ويقوم بتخزينه للمتغير ch ،المتغير ch تم تعريفه  لتخزين القيم التي هي عبارة عن حروف  char وهي اختصار لـcharacter “حرف ” يتم تخزن حرف واحد فقط كقيمة للمتغير

السطر الذي يليله بالكود هي جملة IF الشرطية ، وذلك للتأكد من أن القيمة المدخلة أعلى من 0 وأقل من 7. قد تبدو غريبة عليك الآن ولكن اعدك عبر الممارسة ستقوم بفهمها جيداً.

كل حرف مدخل يحمل قيمة خاصة بالنظام ، يدعى قيمة ASCII .وهذا يعني انه عند استخدام <= و => فنحن نقوم بالمقارنة بقيم ASCII

اذا نجح الاختبار فسوف ينتقل للسطر الذي يليه

int led = ch – '0';

 

 

يقوم باحتساب قيمة الـ LED = وذلك عبر عملية طرح الصفر من  قيمة (ASCII) للحرف المدخل

لأننا نعلم برقم الـLED الذي نرغب بإضاءته كل ماعلينا فعله هو وضع تلك القيمة لـleads والقيام بتحديث مسجل الإزاحة shift register

  

 bitSet(leds, led);
    updateShiftRegister();

 

 

السطرين التاليين سيقومون بإرسال رسالة التأكيد لشاشة الاتصال التسلسلي serial monitor

          Serial.print("Turned on LED ");
          Serial.println(led);

 

 

كما تلاحظ لقد قمنا بإستخدام Serial.print عوضاً عن Serial.println.الفرق بين الإثنين هو أن Serial.print لايقوم بوضع سطر جديد في الشاشة بعد طباعة الرسالة.
ولأننا نود أن نطبع في الشاشة رسالة التأكيد اضافة إلى رقم الـLED الذي تم اضاءته فيجب علينا ان نستمر بالطباعة على الشاشة في نفس السطر لذلك السطر الذي يليه قمنا بإستخدام Serial.println لأننا نرغب بوضع سطر جديد بعد طباعة الرسالة ورقم الـLED

قيمة الـLED هو عبارة عن integer رقم صحيح “int”
بعد جملة IF الشرطية الأولى هنالك جملة IF شرطية ثانية تقوم بالتأكد ما اذا كان قيمة “ch” يحمل الحرف x او لأ.

        if (ch == 'x')
        {
          leds = 0;
          updateShiftRegister();
          Serial.println("Cleared");
        }

 

 


الصفحة التالية