תוכן עניינים:

משחק ניחוש צבעים מרחוק IR: 3 שלבים
משחק ניחוש צבעים מרחוק IR: 3 שלבים

וִידֵאוֹ: משחק ניחוש צבעים מרחוק IR: 3 שלבים

וִידֵאוֹ: משחק ניחוש צבעים מרחוק IR: 3 שלבים
וִידֵאוֹ: מישהו מכם שמע על משחק חצות? סיפורי אימה. מִיסטִי. חֲרָדָה 2024, יולי
Anonim
משחק ניחוש צבעים מרחוק IR
משחק ניחוש צבעים מרחוק IR

במדריך זה, אראה לך כיצד לשלוט על LED RGB באמצעות שלט IR, ולעשות מזה משחק מהנה!

שלב 1: יש צורך בחלקים

דרושים חלקים
דרושים חלקים

החלקים שתזדקקו להם לפרויקט זה הם:

- arduino one- RGB LED- חיישן IR

(ספירת הלדים תלויה במשחק, בכמות החיים או)- 2 נוריות ירוקות- 1 צהוב לד- 1 אורד כתום- 3 נוריות אדומות

שלב 2: קוד

#לִכלוֹל

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int levelPin1 = 2;

int levelPin2 = 3; int levelPin3 = 4; int levelPin4 = 7;

int 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 rood = 0;

int groen = 0; int blauw = 0;

// ליצור צבעים

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// משתני משחק

int diff = 200;

int levelNumber = 1;

int int = {-1, -1, -1, -1};

int t = 0;

int רמה 1 = 255;

int רמה 2 = 0; int רמה 3 = 0; int רמה 4 = 0;

int lives = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

הגדרת בטל () {

Serial.begin (9600); irrecv.enableIRIn (); // הפעל את pinMode המקלט (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

לולאת חלל () {

if (irrecv.decode (& results)) // לקבל את האותות מה- {Serial.println (results.value, DEC) מרחוק; // להציג את האותות המתקבלים מכל לחצן שנלחץ irrecv.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: // עוד ding enter/R CLK

handleInput (); לשבור;

תיק 109562816: // כוח עודדינג

handleColor (); לשבור; מקרה 109562878: // עוד ding ביטול/L CLK resetColor (); לשבור;

תיק 109562866: // lege knop midden

צבע אקראי(); לשבור;

תיק 109562830: // pijltje naar rechts

displayEverything (); לשבור; מקרה 109562838: // esc מקרה 109562822: // מקור מקור AV איפוס כל דבר (); לשבור; }

// להקצות לחצנים בשלט לשליטה על הצבע: כך השחקנים יכולים לראות איך הצבעים נראים וכיצד לשלב אותם, // לפני תחילת משחק. מתג (results.value) {מקרה 109562840: rood = 255; לשבור;

תיק 109562844:

ירוק = 255; לשבור;

תיק 109562850:

blauw = 255; לשבור;

תיק 109562836:

rood = 0; ירוק = 0; blauw = 0; לשבור; }

}

analogWrite (redPin, abs (255 - rood)); // שליטה ב- RGB LED: הפוך, מכיוון שלי מחווט בחזרה לאחור.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));

// שליטה על נוריות חיות

if (lives == 2) {levens1 = 0; } if (lives == 1) {levens2 = 0; } if (lives == 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 (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int int) {// הוסף ערך לחוץ לרשימה

אם (indexNumber == 3) {

לַחֲזוֹר; }

if (קלט [indexNumber] == -1) {

קלט [indexNumber] = ערך; indexNumber ++; }}

void handleInput () {// הפוך 'ערך' (ערך) מהרשימה

waarde = abs (קלט [0] * 100 + קלט [1] * 10 + קלט [2]); קלט [0] = -1; // איפוס קלט הסיגנל [1] = -1; קלט [2] = -1;

indexNumber = 0;

Serial.print ("waarde opgeslagen:"); Serial.println (ערך); addColor (ערך); }

void addColor (int waarde) {// הוסף את 'ערך' בן שלוש הספרות לרשימה

אם (indexColor == 3) {

לַחֲזוֹר; }

אם (color [indexColor] == -1) {

color [indexColor] = ערך; אם (color [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// לגרום לאור להפוך לצבע אקראי ולשמור אותו במשתנים

roodRandom = אקראי (0, 255);

גריןRandom = אקראי (0, 255);

blauwRandom = אקראי (0, 255);

rood = roodRandom;

גרין = גריןRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// להפוך את 'ערך' מהרשימה למשתני 'Gok' (ניחוש)

roodGok = color [0]; groenGok = color [1]; blauwGok = color [2]; // בדוק אם משתני Gok נבדלים יותר מדי עם הצבע האקראי האמיתי: אם כן, הצג את הניחוש למשך שלוש שניות, מהבהב ירוק ושנה את הצבע שוב, הוסף רמה abd הקטן את ההבדל המותר // אם לא, הצג את תנחשו במשך שלוש שניות, תמצמצו אדום ותנכו חיים // אם חסרים לכם החיים, המשחק יתחיל מחדש אם (abs ((rood + גרין + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (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 (); צבע אקראי(); levelNumber ++; diff -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (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 ();

חי--; } if (lives == 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;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// הפעל מחדש את המשחק

צבע [0] = -1; צבע [1] = -1; צבע [2] = -1;

indexNumber = 0;

indexColor = 0;

חיים = 3;

rood = 0; ירוק = 0; blauw = 0;

roodRandom = 0;

גריןRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

רמה 1 = 255;

רמה 2 = 0; רמה 3 = 0; רמה 4 = 0;

levelNumber = 1;

t = 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 (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

Serial.print ("rood =");

Serial.println (rood); Serial.print ("גרין ="); Serial.println (גרין); Serial.print ("blauw ="); Serial.println (blauw);

Serial.print ("waarde opgeslagen:");

Serial.println (ערך); }

שלב 3: בנה

לִבנוֹת
לִבנוֹת
לִבנוֹת
לִבנוֹת
לִבנוֹת
לִבנוֹת
לִבנוֹת
לִבנוֹת

ברור שאתה רוצה בנייה יפה לפרויקט הזה. חלק זה די פתוח לפרשנות, אך יש לזכור כמה דברים עם זה: - שמור על הלוח הקדמי דק, כך שתוכל עדיין להדביק את האורות שלך דרכו ומקלט ה- IR עדיין פועל

- שמור מספיק מקום במבנה עבור הארדואינו ולוח הלחמה

- ודא שיש חור מאחור לכוחו של הארדואינו

הוספתי תכנית גסה לחיווט.

בהצלחה ותהנה!

מוּמלָץ: