اردوينو – الدرس الثامن – تغيير درجة الالوان لـ RGB LED

مبتدئ

image_pdfimage_print

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

قم برفع الكود التالي لمتحكم الأردوينو.

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

عند اكتفاءك بدرجة سطوع احد الألوان ، قم بضغط زر آخر لرفع درجة سطوع اللون الاخر وشاهد كيف سيتم دمجها ببعض.

اذا اردت البدء مره اخرى كل ماعليك فعله هو الضغط على زر اعادة البدء ‘reset’ الموجود بمتحكم الأردوينو ( الزر الأحمر الموجود بالقرب من منفذ الـUSB)

int redLEDPin = 11;
int greenLEDPin = 10;
int blueLEDPin = 9;
 
int redSwitchPin = 7;
int greenSwitchPin = 6;
int blueSwitchPin = 5;
 
int red = 0;
int blue = 0;
int green = 0;
 
void setup()
{
  pinMode(redLEDPin, OUTPUT);
  pinMode(greenLEDPin, OUTPUT);
  pinMode(blueLEDPin, OUTPUT);  
  pinMode(redSwitchPin, INPUT_PULLUP);
  pinMode(greenSwitchPin, INPUT_PULLUP);
  pinMode(blueSwitchPin, INPUT_PULLUP);
}
 
void loop()
{
  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }
  if (digitalRead(greenSwitchPin) == LOW)
  {
    green ++;
    if (green > 255) green = 0;
  }
  if (digitalRead(blueSwitchPin) == LOW)
  {
    blue ++;
    if (blue > 255) blue = 0;
  }
  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);  
  delay(10);
}

مخطط الكود مشابة لمخطط الدرس الرابع ، لدينا 3 منافذ مخارج للتحكم بالـLED.
وهي منافذ تعديل عرض النبضة PWD (pulse width modulation) لنتمكن من وضع مقدار الطاقة التي نرغب وضعها لكل لون .

هنالك ثلاث منافذ اخرى نحتاجها ، واحدة لكل زر وسيتم تعريفها داخل دالة setup لتكون منافذ ادخال والتي ستعطي قيمة عالية (قيمة تساوي 1 ) عند عدم الضغط عليها، وعند الضغط عليها ستعطي قيمة منخفضة (قيمة تساوي 0)

بعد تعريف المنافذ ، نقوم بتعريف المتغيرات للالوان (احمر ، اخضر ، ازرق )

int red = 0;
int blue = 0;
int green = 0;

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

دالة loop تحتوي على جزئين ، الجزء الأول يقوم بالتحقق من قيم الأزرار والقيام بمايلزم . كل زر يعمل نفس الوظيفة ولكن  للون مختلف. هذا الجزء هو التالي

  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }

اذا  كانت قيمة red switch pin (كقراءة رقمية) هي قيمة منخفضة (اي تساوي صفر ) فهذا يعني أنه يتم الضغط على الزر حالياً ، فنقوم بإضافة 1 لمتغيرred الاحمر
الأمر red++ يعني اضافة 1 للمتغير

ولكن علينا أن نحرص هنا لأن القيمة الأعلى ستكون 255 عبر استخدام خاصية تعديل عرض النبضة PWD لذلك فالسطر التالي هو للتحقق من أننا لم نقم بتجاوز هذه القيمة، وإن قمنا بتجاوزه فإن القيمة ستعود وتبدأ من الصفر

الجزء الثاني من دالة loop تحمل قيم نظيرية ‘analogWrite’s’ لكل LED

  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);

أخيراً، سيكون هنالك تأخير طفيف delay  بنهاية  loop لإبطاء تحويل الألوان (يمكن تغيير قيمة التأخير)


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