جدول المحتويات:

لعبة تخمين اللون عن بعد بالأشعة تحت الحمراء: 3 خطوات
لعبة تخمين اللون عن بعد بالأشعة تحت الحمراء: 3 خطوات

فيديو: لعبة تخمين اللون عن بعد بالأشعة تحت الحمراء: 3 خطوات

فيديو: لعبة تخمين اللون عن بعد بالأشعة تحت الحمراء: 3 خطوات
فيديو: سأخمن إسمك - مذهل ولكنه حقيقه !! 2024, شهر نوفمبر
Anonim
لعبة تخمين اللون عن بعد بالأشعة تحت الحمراء
لعبة تخمين اللون عن بعد بالأشعة تحت الحمراء

في هذا الدليل ، سأوضح لك كيفية التحكم في مصباح 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 من خلالها ولا يزال مستقبل الأشعة تحت الحمراء يعمل

- احتفظ بمساحة كافية في الهيكل من أجل اردوينو ولوحة لحام

- تأكد من وجود فتحة في الخلف لقوة اردوينو

لقد أضفت مخططًا تقريبيًا للأسلاك.

حظا سعيدا واستمتع بوقتك!

موصى به: