جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
في هذا الدليل ، سأوضح لك كيفية التحكم في مصباح RGB باستخدام جهاز تحكم عن بعد IR ، وإخراج لعبة ممتعة منه!
الخطوة 1: الأجزاء المطلوبة
الأجزاء التي ستحتاجها لهذا المشروع هي:
- اردوينو ون RGB LED- مستشعر الأشعة تحت الحمراء
(يعتمد عدد المصابيح على اللعبة ، أو عدد الأرواح أو) - مصباحان أخضران - مصباح أصفر واحد - مصباح LED برتقالي - 3 مصابيح حمراء
الخطوة 2: الكود
#يشمل
int redPin = 10 ؛
int greenPin = 6 ؛ كثافة العمليات bluePin = 5 ؛
int levensPin1 = 8 ؛
int levensPin2 = 9 ؛ int levensPin3 = 12 ؛
int levelPin1 = 2 ؛
int levelPin2 = 3 ؛ int levelPin3 = 4 ؛ int levelPin4 = 7 ؛
عدد صحيح RECV_PIN = 11 ؛
IRrecv irrecv (RECV_PIN) ؛ نتائج decode_results ؛
// ألوان الإدخال
إدخال int = {-1 ، -1 ، -1} ، int color = {-1، -1، -1} ؛
int indexNumber = 0 ؛
مؤشر int indexColor = 0 ؛
int waarde = 0 ؛
رود int = 0 ؛
int groen = 0 ؛ int blauw = 0 ؛
// توليد الألوان
int roodRandom = 0 ؛ int groenRandom = 0 ؛ كثافة العمليات blauwRandom = 0 ؛
// متغيرات اللعبة
فرق كثافة العمليات = 200 ؛
مستوى int = 1 ؛
مستوى int = {-1 ، -1 ، -1 ، -1} ؛
int t = 0 ؛
مستوى كثافة العمليات 1 = 255 ؛
مستوى كثافة العمليات 2 = 0 ؛ المستوى 3 = 0 ؛ مستوى كثافة العمليات 4 = 0 ؛
يعيش int = 3 ؛
عدد الفتحات 1 = 255 ؛ عدد الفتحات 2 = 255 ؛ عدد الفتحات 3 = 255 ؛
int roodGok = 0 ؛
int groenGok = 0 ؛ int blauwGok = 0 ؛
الإعداد باطل() {
Serial.begin (9600) ؛ irrecv.enableIRIn () ، // بدء وضع pinMode لجهاز الاستقبال (redPin ، الإخراج) ؛ pinMode (greenPin ، الإخراج) ؛ pinMode (bluePin ، الإخراج) ؛
pinMode (levensPin1 ، الإخراج) ؛
pinMode (levensPin2 ، الإخراج) ؛ pinMode (levensPin3 ، الإخراج) ؛
}
حلقة فارغة() {
if (irrecv.decode (& results)) // تلقي الإشارات من جهاز التحكم عن بُعد {Serial.println (results.value، DEC) ؛ / / عرض الإشارات المستلمة من كل زر مضغوط Irecv.resume () ؛ // تلقي مفتاح الإشارة التالي (results.value) {// حوّل الإشارات إلى أرقام على الأزرار ، وعيّن الإجراءات للأزرار
الحالة 109562864:
addWaarde (1) ؛ استراحة؛
الحالة 109562824:
addWaarde (2) ؛ استراحة؛
الحالة 109562856:
addWaarde (3) ؛ استراحة؛
الحالة 109562872:
addWaarde (4) ؛ استراحة؛
الحالة 109562820:
addWaarde (5) ؛ استراحة؛
الحالة 109562852:
addWaarde (6) ؛ استراحة؛
الحالة 109562868:
addWaarde (7) ؛ استراحة؛
الحالة 109562828:
addWaarde (8) ؛ استراحة؛
الحالة 109562860:
addWaarde (9) ؛ استراحة؛
الحالة 109562876:
addWaarde (0) ؛ استراحة؛
الحالة 109562818: // oud ding enter / R CLK
handleInput () ؛ استراحة؛
القضية 109562816: // قوة قرع العود
مقبض اللون () ؛ استراحة؛ حالة 109562878: // oud ding cancell / L CLK resetColor () ؛ استراحة؛
القضية 109562866: // lege knop midden
لون عشوائي()؛ استراحة؛
القضية 109562830: // pijltje naar rechts
displayEverything () ، استراحة؛ الحالة 109562838: // esc case 109562822: // إعادة ضبط مصدر AVEverything () ؛ استراحة؛ }
// تعيين أزرار على جهاز التحكم عن بُعد للتحكم في اللون: بهذه الطريقة ، يمكن للاعبين رؤية شكل الألوان وكيفية دمجها ،
// قبل بدء اللعبة. التبديل (results.value) {حالة 109562840: rood = 255 ؛ استراحة؛
الحالة 109562844:
أخدود = 255 ؛ استراحة؛
الحالة 109562850:
blauw = 255 ؛ استراحة؛
الحالة 109562836:
رود = 0 ؛ أخدود = 0 ؛ blauw = 0 ؛ استراحة؛ }
}
analogWrite (redPin ، القيمة المطلقة (255 - رود)) ؛ // التحكم في RGB led: في الاتجاه المعاكس ، لأن المنجم سلكي في الاتجاه المعاكس.
analogWrite (greenPin ، القيمة المطلقة (255 - أخضر)) ؛ analogWrite (bluePin ، القيمة المطلقة (255 - blauw)) ؛
// التحكم في المصابيح الحية
إذا (يعيش == 2) {levens1 = 0 ؛ } إذا (يعيش == 1) {levens2 = 0 ؛ } إذا (يعيش == 0) {levens3 = 0 ؛ } analogWrite (levensPin1 ، levens1) ؛ analogWrite (levensPin2 ، levens2) ؛ analogWrite (levensPin3 ، levens3) ؛
// السيطرة على مستوى المصابيح
إذا (levelNumber == 1) {level1 = 255 ؛ } إذا (levelNumber == 2) {level1 = 255 ؛ المستوى 2 = 255 ؛ } إذا (levelNumber == 3) {level1 = 255 ؛ المستوى 2 = 255 ؛ المستوى 3 = 255 ؛ } إذا (levelNumber == 4) {level1 = 255 ؛ المستوى 2 = 255 ؛ المستوى 3 = 255 ؛ المستوى 4 = 255 ؛ } analogWrite (levelPin1، level1) ؛ analogWrite (المستوى 2 ، المستوى 2) ؛ analogWrite (المستوى 3 ، المستوى 3) ؛ analogWrite (المستوى 4 ، المستوى 4) ؛
}
void addWaarde (قيمة int) {// إضافة قيمة مضغوطة إلى القائمة
إذا (indexNumber == 3) {
إرجاع؛ }
إذا (المدخلات [indexNumber] == -1) {
المدخلات [indexNumber] = القيمة ؛ رقم الفهرس ++ ؛ }}
void handleInput () {// اجعل "waarde" (قيمة) من القائمة
waarde = القيمة المطلقة (الإدخال [0] * 100 + الإدخال [1] * 10 + الإدخال [2]) ؛ الإدخال [0] = -1 ؛ // إعادة تعيين مدخلات الإشارة [1] = -1 ؛ الإدخال [2] = -1 ؛
رقم الفهرس = 0 ؛
Serial.print ("waarde opgeslagen:") ؛ Serial.println (waarde) ؛ addColor (waarde) ؛ }
void addColor (int waarde) {// أضف "waarde" المكون من 3 أرقام إلى القائمة
إذا (indexColor == 3) {
إرجاع؛ }
إذا (اللون [indexColor] == -1) {
color [indexColor] = Waarde ؛ if (color [indexColor]> 255) {color [indexColor] = 255 ؛ } indexColor ++ ؛ }
}
void randomColor () {// اجعل الضوء يتحول إلى لون عشوائي واحفظه في المتغيرات
roodRandom = عشوائي (0 ، 255) ؛
groenRandom = عشوائي (0 ، 255) ؛
blauwRandom = عشوائي (0 ، 255) ؛
رود = roodRandom ؛
groen = عشوائي ؛ blauw = blauwRandom ؛ Serial.print ("roodRandom =") ؛ Serial.println (عشوائي عشوائي) ؛ Serial.print ("groenRandom =") ؛ Serial.println (groenRandom) ؛ Serial.print ("blauwRandom =") ؛ Serial.println (blauwRandom) ؛
}
void handleColor () {// حول "waarde" من القائمة إلى متغيرات "Gok" (تخمين)
roodGok = اللون [0] ، groenGok = اللون [1] ، blauwGok = اللون [2] ، // تحقق مما إذا كانت متغيرات Gok تختلف كثيرًا عن اللون العشوائي الحقيقي: إذا كان الأمر كذلك ، اعرض التخمين لمدة ثلاث ثوانٍ ، وامض باللون الأخضر وقم بتغيير اللون مرة أخرى ، أضف مستوى عبد اجعل الفرق المسموح به أصغر // إذا لم يكن كذلك ، اعرض تخمين لمدة ثلاث ثوانٍ ، وميض باللون الأحمر واستقطاع الحياة // إذا نفدت الحياة ، فستبدأ اللعبة مرة أخرى إذا (((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin ، القيمة المطلقة (255 - roodGok)) ؛ analogWrite (greenPin ، القيمة المطلقة (255 - groenGok)) ؛ analogWrite (bluePin ، القيمة المطلقة (255 - blauwGok)) ؛ تأخير (3000) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 0) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 0) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛
Serial.print ("roodGok =") ؛
Serial.println (roodGok) ؛ Serial.print ("groenGok =") ؛ Serial.println (groenGok) ؛ Serial.print ("blauwGok =") ؛ Serial.println (blauwGok) ؛ resetColor () ؛ لون عشوائي()؛ رقم المستوى ++ ؛ فرق - = 50 ؛ } else {analogWrite (redPin، abs (255 - roodGok)) ؛ analogWrite (greenPin ، القيمة المطلقة (255 - groenGok)) ؛ analogWrite (bluePin ، القيمة المطلقة (255 - blauwGok)) ؛ تأخير (3000) ؛ analogWrite (redPin ، 0) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ analogWrite (redPin ، 0) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (300) ؛ Serial.print ("roodGok =") ؛ Serial.println (roodGok) ؛ Serial.print ("groenGok =") ؛ Serial.println (groenGok) ؛ Serial.print ("blauwGok =") ؛ Serial.println (blauwGok) ؛
resetColor () ؛
الأرواح--؛ } إذا (يعيش == 0) {analogWrite (redPin، 0) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (100) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (100) ؛ analogWrite (redPin ، 0) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (100) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (100) ؛ analogWrite (redPin ، 0) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (100) ؛ analogWrite (redPin ، 255) ؛ analogWrite (greenPin ، 255) ؛ analogWrite (bluePin ، 255) ؛ تأخير (100) ؛ resetEverything () ؛ }
}
void resetColor () {// استخدم لإعادة تعيين القيم ، أو لضغط خاطئ أو كل تخمين جديد (فقط من أجل اليقين)
اللون [0] = -1 ؛ اللون [1] = -1 ؛ اللون [2] = -1 ؛
رقم الفهرس = 0 ؛
indexColor = 0 ؛ }
إعادة تعيين باطل كل شيء () {// إعادة تشغيل اللعبة
اللون [0] = -1 ؛ اللون [1] = -1 ؛ اللون [2] = -1 ؛
رقم الفهرس = 0 ؛
indexColor = 0 ؛
يعيش = 3 ؛
رود = 0 ؛ أخضر = 0 ؛ blauw = 0 ؛
roodRandom = 0 ؛
العشوائية groenRandom = 0 ؛ blauwRandom = 0 ؛
ليفينز 1 = 255 ؛
ليفينز 2 = 255 ؛ ليفينز 3 = 255 ؛
المستوى 1 = 255 ؛
المستوى 2 = 0 ؛ المستوى 3 = 0 ؛ المستوى 4 = 0 ؛
رقم المستوى = 1 ؛
ر = 0 ؛
}
void displayEverything () {// استخدم هذا لعرض معلومات مهمة على الشاشة التسلسلية
Serial.print ("roodGok =") ؛ Serial.println (roodGok) ؛ Serial.print ("groenGok =") ؛ Serial.println (groenGok) ؛ Serial.print ("blauwGok =") ؛ Serial.println (blauwGok) ؛ Serial.print ("roodRandom =") ؛ Serial.println (عشوائي عشوائي) ؛ Serial.print ("groenRandom =") ؛ Serial.println (groenRandom) ؛ Serial.print ("blauwRandom =") ؛ Serial.println (blauwRandom) ؛
Serial.print ("rood =") ؛
Serial.println (رود) ؛ Serial.print ("groen =") ؛ Serial.println (أخضر) ؛ Serial.print ("blauw =") ؛ Serial.println (blauw) ؛
Serial.print ("waarde opgeslagen:") ؛
Serial.println (waarde) ؛ }
الخطوة 3: بناء
من الواضح أنك تريد بناء جميل لهذا المشروع. هذا الجزء مفتوح جدًا للتفسير ، ولكن هناك بعض الأشياء التي يجب وضعها في الاعتبار مع هذا: - حافظ على اللوحة الأمامية رقيقة ، بحيث لا يزال بإمكانك لصق مصابيح LED من خلالها ولا يزال مستقبل الأشعة تحت الحمراء يعمل
- احتفظ بمساحة كافية في الهيكل من أجل اردوينو ولوحة لحام
- تأكد من وجود فتحة في الخلف لقوة اردوينو
لقد أضفت مخططًا تقريبيًا للأسلاك.
حظا سعيدا واستمتع بوقتك!