الكود البرمجي
#define ledPin 13 #define knockSensor A0 int threshold = 100; int sensorReading = 0; int ledState = LOW; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { sensorReading = analogRead(knockSensor); if (sensorReading >= threshold) { ledState = !ledState; digitalWrite(ledPin, ledState); Serial.println("Knock!"); } delay(500); }
شرح الكود :
في البداية، نقوم بتعريف متغيرات لمنافذ الاردوينو التي تم استخدامها في المشروع. وتعريف متغيرات اخرى لإستخدامها في البرمجة. سيتم استخدام متغير threshold لحفظ القيمة التي تستخدم للدلاله على حدوث اهتزاز عند وصول قراءة عنصر البيزو إلى هذه القيمة. ومتغير sensorReading لحفظ قيمة قراءة العنصر. والمتغير ledState لحفظ حالة الـ LED .
#define ledPin 13 #define knockSensor A0 int threshold = 100; int sensorReading = 0; int ledState = LOW;
في الدالة ()setup، نقوم بضبط الـ LED كمخرج، وتشغيل الشاشة التسلسلية Serial Monitor .
void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); }
في الدالة ()loop ، نقوم بقراءة قيمة عنصر البيزو ومقارنتها بالقيمة المحفوظة داخل المتغير threshold. عندما تكون قيمة العنصر اكبر، اي ان العنصر قد اهتز، نقوم بعمل فلاش على الـ LED وكتابة “knock!” على الشاشة التسلسلية.
void loop() { sensorReading = analogRead(knockSensor); if (sensorReading >= threshold) { ledState = !ledState; digitalWrite(ledPin, ledState); Serial.println("Knock!"); } delay(500); }
ملاحظة
تحدث ضوضاء في البيئة المحيطة نتيجة لترددات الراديو، فبدون استخدام المتغير threshold سيعمل الفلاش لأن هذه الضوضاء يقوم الأردوينو بقراءتها على انها جهود صغيرة. فعند إستخدام المتغير بقيمة اكبر من قيمة الضوضاء الموجودة يمكن اهمال تأثيرها.