משחק ניחוש צבעים מרחוק IR: 3 שלבים
משחק ניחוש צבעים מרחוק IR: 3 שלבים
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 עדיין פועל

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

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

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

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