الكود البرمجي
#include <IRremote.h> int LED1= 3; int LED2= 4; int LED3= 5; int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver /***Pin mode declaration***/ pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0xFFA25D: digitalWrite(red, HIGH); delay(300); digitalWrite(red, LOW); break; case 0xFF629D: digitalWrite (green, HIGH); delay(300); digitalWrite(green, LOW); break; case 0xFFE21D: digitalWrite (blue, HIGH); delay(300); digitalWrite(blue, LOW); break; } irrecv.resume(); } }
شرح الكود :
في البداية نقوم بتعريف متغيرات للإشارة إلى أرقام منافذ الأردوينو المستخدمة في المشروع. , واستدعاء مكتبة التحكم ب IRreceiver ، قم بتحميل المكتبة من هنا
int red = 3; int green = 9; int blue = 10; #include <IRremote.h> int RECV_PIN = 11
تعريف كائن (object) من النوع IRrecv ، وتعريف متغيرات لحفظ قيم سطوع إضاءة الثلاث ألوان الخاصة بالRGB (أحمر،أخضر،أزرق).
IRrecv irrecv(RECV_PIN); decode_results results; int redBrightness = 0; int greenBrightness = 0; int blueBrightness = 0;
في الدلة ()setup ، نقوم بضبط الإعدادات اللازمة مثل ضبط المنافذ الموصلة مع الـ LEDs كمخرج وتهيئة معدل سرعة نقل البيانات عبرالمنفذ التسلسلي (Serial Port) لاستقبال بيانات من الأردوينو :
void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); }
إنشاء دالة ()setcolor والتي تقوم بحساب شدة الإضاءة الخاصة بكل لون في RGB اعتمادا على نوعه إما مصعد مشترك (Common anode) أو مهبط مشترك (Common Cathode)، ثم ارسال القيم عبر المنافذ الخاصة بالـ RGB ليتم إضاءة اللون المطلوب .
void setcolor (int redx, int greenx, int bluex){ Serial.print("Led"); int red1= 255 - redx ; int green1=255 - greenx; int blue1=255 - bluex; analogWrite(red, red1); analogWrite(green, green1); analogWrite(blue, blue1); }
في الدالة loop() نقوم بقراءة القيمة التي يستقبلها IR receiver عند الضغط على أزرار الريموت و تحديد اللون الذي سيظهر على RGB اعتمادا على القيمة المقروءة .
void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0xE318261B: setcolor (255, 0, 0); break; case 0x511DBB: setcolor (0, 0, 255); break; case 0xFFE21D: setcolor (0, 255, 0); break; } irrecv.resume(); } }