القائمة الرئيسية

الصفحات

وظيفة التأخير () . la Fonction delay() Fonction millis()

  

. تسويف المؤقت Temporisation

. وظيفة التأخير ()  . la Fonction delay()

سيتم استخدام وظيفة delay() لإيقاف البرنامج مؤقتا لفترة محددة مسبقا. إنه يعترف بمعلمة وهي الوقت الذي نريد خلاله إيقاف البرنامج مؤقتا. الوقت بالمللي ثانية.

لوميض مؤشر LED ، نتدخل في وظيفة delay() ، والتي ستوقف البرنامج مؤقتا لفترة محددة .

ثم يتم إيقاف تشغيل مؤشر LED.

تم إيقاف البرنامج مؤقتا.

ثم نعود إلى بداية البرنامج. نبدأ من جديد وهكذا.



يعطي هذا الكود التالي: const int led_rouge = 2 ؛ // إعداد دبوس 2 من اللوحة كمتغير إعداد فارغ () // وظيفة لتهيئة المحول

{ pinMode(led1__rouge, OUTPUT);  //تهيئة PIN 2 كإخراج

}
}
void loop ( )                         //الوظيفة الرئيسية ، يكرر (ينفذ) بلا حدود
{ digitalWrite (led1__rouge, LOW ) ; // يضيء مؤشر LED
      Delay (1000) ;                                              // توقف مؤقت لمدة 1 ثانية
    digitalWrite (led1__rouge , HIGH ) ;     // يطفئ مؤشر LED
        delay  (1000) ;                                              // توقف مؤقت لمدة 1 ثانية



}

. دالة ميلي ()  Fonction millis()


يوجد داخل قلب لوحة Arduino ساعة توقيت. يقيس هذا المؤقت مرور الوقت منذ إطلاق التطبيق إلى49 يوما

إذا كنت ترغب في وميض مؤشر LED وتحريك روبوت للأمام على سبيل المثال ، فلا يمكنك استخدام وظيفة delay() التي تقوم بتوقف البرنامج مؤقتا.

باستخدام الدالة milli() ، لم يعد البرنامج محظورا. من خلال إعداد زر الكشف عن الاصطدام ، سيتم التحقق من حالة الزر بشكل متكرر للغاية ، مما يضمن أنه إذا دخلت الحائط في أي وقت ، فإنك تقوم بإيقاف تشغيل محركات الروبوت بسرعة كبيرة.

هنا هو الكود:

 

const int          mot = 4;                      // محرك متصل برقم التعريف الشخصي 4

const int          led = 3;                        // مؤشر LED متصل برقم التعريف الشخصي 3

const int          bouton = 8;                 // زر متصل برقم التعريف الشخصي 8

long                 temps = millis();          // المتغير الذي يخزن قياس الوقت

boolean           etat__led = 0;             // بشكل افتراضي ، سيتم إيقاف تشغيل مؤشر LED

void setup()

{

// تعريف المدخلات/المخرجات pinMode(mot , OUTPUT); pinMode(led, OUTPUT); pinMode(bouto, INPUT);

 

digitalWrite(mot, HIGH);                  //نبدأ المحرك

digitalWrite(led, etat__led);               //نقوم بإيقاف تشغيل LED

}

void loop ()

{ if ( digitalRead (bout ) == HIGH ) //إذا تم النقر فوق الزر (ندخل جدارا)

{ digitalWrite (mot , LOW); //نوقف المحرك

}

                else           / /وإلا فإننا فلاش

{

/ /نقارن القيمة القديمة للوقت والقيمة sauvée

//إذا تجاوزت المقارنة (واحد ناقص الآخر ) 1000 .. .

//...هذا يعني أن ثانية واحدة على الأقل قد مرت

 if ( (millis ( ) – temps ) > 1000 )

{

     etat_led = ! etat__led;                 //نعكس حالة

LED digitalWrite ( led, etat__led ) ;   //تشغيل أو إيقاف

temps = millis ( ) ;       //نحن نخزن الوقت الجديد  }

}

}

ملاحظة: لا يمكن اختبار الشرط "millis() - temp == 1000 " لأن هذا يعني التحقق من مرور 1000 s بالضبط ،

 

. زر الضغط  . Le bouton poussoir

تحتوي أزرار الضغط المفتوحة عادة (NO) (BP) على موقعين                           :

  • 1.                   صدر: التيار لا يمر ، الدائرة "مفتوحة".
  • 2.                   الضغط: يمر التيار ، الدائرة مغلقة.

زر الضغط المغلق عادة (NF) هو عكس النوع السابق ، أي عندما يتم تحرير الزر ، فإنه يسمح بمرور التيار. والعكس صحيح:

 


 

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

 

 

 

 

 

 

في مجال الإلكترونيات ، لدينا دائما اضطرابات  وتسمى هذه القيود EMC. لمواجهة هذه الآثار الضارة ، يتم وضع مقاوم سحب في سلسلة مع الزر. تستخدم هذه المقاومة "لسحب" الجهد لأعلى (لأعلى) من أجل الحصول على إشارة واضحة على الدبوس .

في الرسم البياني التالي ، نرى أنه في الأوقات العادية ، تبلغ إمكانات "الإشارة" 5 فولت. بعد ذلك ، عندما يضغط المستخدم على الزر ، سيتم إجراء اتصال بالأرض. سنقرأ بعد ذلك قيمة 0 فولت للإشارة. هنا هو الاهتمام الثاني لمقاومة السحب ،

الأزرار ليست أنظمة ميكانيكية مثالية. نتيجة لذلك ، عند الضغط عليها ، لا تنتقل الإشارة على الفور وبشكل نظيف من 5 فولت إلى 0 فولت. في غضون بضعة أجزاء من الثانية ، سوف "تقفز" الإشارة بين 5V و 0V عدة مرات قبل الاستقرار. تحدث نفس الظاهرة عندما يحرر المستخدم الزر.

 


للتخفيف من هذه الظاهرة ، يتم استخدام مكثف بالتوازي مع الزر. سيكون هذا المكون هنا بمثابة "ممتص صدمات" يمتص الارتدادات  سيتم تفريغ المكثف ، المشحون في البداية ، عند الضغط على الزر. إذا كانت هناك ارتدادات ، صرفها بواسطة المكثف أثناء هذا التفريغ. ستحدث الظاهرة المعاكسة (شحنة المكثف)
توجد مقاومات السحب أيضا داخليا لمتحكم Arduino الدقيق ، مما يتجنب الاضطرار إلى إضافتها. هذا الأخير له قيمة 20 kΩ..


لاستعادة الضغط على الزر ، يجب على المرء قراءة حالة الإدخال الرقمي.



 

عند تحرير الزر ، سيكون الجهد في أطرافه +5 فولت ، وبالتالي فإن الحالة المنطقية العالية. إذا تم الضغط عليه ، فسيكون 0 فولت ، منخفضا جدا.

تقرأ الدالة  digitalRead() الحالة المنطقية للإدخال المنطقي. تأخذ هذه الدالة معلمة هي الدبوس المراد اختباره وترجع متغيرا من النوع int.

يضيء البرنامج التالي مؤشر LED عند الضغط على الزر. عند تحرير الزر ، يجب إيقاف تشغيل مؤشر LED.

 

const int          bouto = 2;        //الزر متصل بالدبوس 2 من اللوحة  

Adruino const int        led1 = 13;        //الصمام لدبوس 13 intetatButton; //المتغير الذي يسجل حالة الزر  

void setup ( )

{ pinMode(led1, OUTPUT);   //الصمام هو الإخراج pinMode( bouto , INPUT );            //الزر هو entrée

                Etat_Bouto = HIGH;                        //نقوم بتهيئة حالة الزر على أنها "تم إصدارها""

}

void loop()

{ etat_Bouto = digitalRead ( bouton ); //تذكير: زر = 2

  

                 if ( etat_Bouto == HIGH )        / /اختبار ما إذا كان الزر يحتوي على مستوى منطقي عال

{ digitalWrite(led1 , HIGH );                                       / /يظل مؤشر LED مطفأ

}

                else               // اختبار ما إذا كان الزر له مستوى منطقي مختلف عن HIGH ( منخفض جدا )

{ digitalWrite(led1 , LOW);   //يتم الضغط على الزر ، يضيء مؤشر  LED

}

}

 



تعليقات