برمجة الأردوينو
#define LED_RED 11 #define LED_GREEN 10 #define LED_BLUE 9 void setup() { // Define the output LEDs pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); pinMode(LED_BLUE, OUTPUT); } void loop() { increaseColor(LED_BLUE); decreaseColor(LED_RED); increaseColor(LED_GREEN); decreaseColor(LED_BLUE); increaseColor(LED_RED); decreaseColor(LED_GREEN); } void increaseColor(unsigned char colorPin) { for(int i=0; i<=255; i++) { analogWrite(colorPin, i); delay(5); } } void decreaseColor(unsigned char colorPin) { for(int i=255; i>=0; i--) { analogWrite(colorPin, i); delay(5); } }
شرح الكود :
في البداية نقوم بتسمية مداخل الاردوينو حسب الـ LEDs الموصلة معها، فالمدخل 9 موصل مع LED الأزرق، والمدخل 10 موصل مع LED الأخضر، ومدخل 11 موصل مع الأحمر.
ثم نقوم بتعريف هذه الأطراف كمخرج في دالة ()setup .
#define LED_RED 11 #define LED_GREEN 10 #define LED_BLUE 9 void setup() { // Define the output LEDs pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); pinMode(LED_BLUE, OUTPUT); }
في دالة ()loop نقوم بالتحكم في شدة اضاءة كل LEDs ودمج الألوان الثلاثة معا، وبهذه الطريقة نحصل على مزيج من الألوان تعتمد على شدة تركيز كل لون LED على حدة .
يتم التحكم في شدة إضاء كل LED عن طريق استدعاء الدالة increaseColor والدالة decreaseColor .
void loop() { increaseColor(LED_BLUE); decreaseColor(LED_RED); increaseColor(LED_GREEN); decreaseColor(LED_BLUE); increaseColor(LED_RED); decreaseColor(LED_GREEN); }
الدالة increaseColor تعمل على زيادة شدة اضاءة اللون تدريجيا. تقوم هذه الدالة باستخدام الدالة analogWrite(Pin_name,Vlaue) للتحكم في شدة الإضاءة، وبإستخدام for loop تبدأ شدة الاضاءة بالإزدياد تدريجيا من 0 إلى قيمة 255 .
/* هذه الدالة تقوم بعمل تأثير ناعم بزيادة قيمة اللون المطلوب منها من 0 الى 255 */ void increaseColor(unsigned char colorPin) { for(int i=0; i<=255; i++) { analogWrite(colorPin, i); delay(5); } }
تقوم الدالة decreaseColor بتقليل شدة اضاءة الـ LED تدريجيا. تعمل هذه الدالة بنفس طريقة الدالة السابقة increaseColor ، ولكن تستخدم الـ for loop لتقليل شدة الإضاءة من 255 إلى 0 .
/* و هذه الدالة تفعل العكس */ void decreaseColor(unsigned char colorPin) { for(int i=255; i>=0; i--) { analogWrite(colorPin, i); delay(5); } }
باستخدام نفس التقنية مع باقي الـ LEDs يمكننا دمج الألوان بصورة رائعة لنحصل على Mood Lamp .