תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
במדריך זה, אראה לך כיצד לשלוט על 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 עדיין פועל
- שמור מספיק מקום במבנה עבור הארדואינו ולוח הלחמה
- ודא שיש חור מאחור לכוחו של הארדואינו
הוספתי תכנית גסה לחיווט.
בהצלחה ותהנה!