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

مبتدئ

image_pdf

الكود البرمجي

ارفع الكود التالي لمتحكم الاردوينو:

في البداية فإن جميع الـ LEDs ستكون مطفأه اذا استمريت بالضغط على واحد من الازرار فإنه سيبدأ في زيادة درجة سطوع الـ RGB 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 منافذ مخارج للتحكم بالـ RGB 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’ لكل RGB Led

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

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

X
Product added to the cart