תוכן עניינים:
וִידֵאוֹ: משחק ניחוש צבעים מרחוק IR: 3 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
במדריך זה, אראה לך כיצד לשלוט על 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 עדיין פועל
- שמור מספיק מקום במבנה עבור הארדואינו ולוח הלחמה
- ודא שיש חור מאחור לכוחו של הארדואינו
הוספתי תכנית גסה לחיווט.
בהצלחה ותהנה!
מוּמלָץ:
אוקטרינה: משחק התאמת צבעים עם נוריות WS2812 RGB: 6 שלבים
אוקטרין: משחק התאמת צבעים עם נוריות WS2812 RGB: אוקטרינה, צבע הקסם. הוא היה חי וזוהר ותוסס והוא הפיגמנט הבלתי מעורער של הדמיון, מכיוון שבכל מקום שהוא הופיע סימן לכך שחומר בלבד הוא משרת בכוחות המוח הקסום. זה היה קוסם
555 טיימר מרחוק מרחוק טלוויזיה: 3 שלבים
555 טיימר מרחוק טלוויזיה מרחוק: כיצד פועל משבש הטלוויזיה? הלד בשלט פולט אור אינפרא אדום בלתי נראה המתאים לקודים בינאריים ספציפיים. קודים בינאאריים אלה מכילים פקודות כמו
בוחר צבעים של Arduino RGB - בחר צבעים מאובייקטים חיים אמיתיים: 7 שלבים (עם תמונות)
בוחר הצבעים של Arduino RGB - בחר צבעים מאובייקטים חיים אמיתיים: בחר בקלות צבעים מאובייקטים פיזיים בעזרת בורר הצבעים RGB המבוסס על Arduino זה, המאפשר לך לשחזר את הצבעים שאתה רואה באובייקטים חיים במחשב האישי או בטלפון הנייד שלך. פשוט לחץ על כפתור כדי לסרוק את צבע האובייקט באמצעות TCS347 זול
משחק ניחוש מספר פייתון פשוט: 11 שלבים
משחק ניחוש מספר פייתון פשוט: במדריך זה נלמד כיצד ליצור משחק ניחוש מספר פייתון פשוט ביישום Pycharm. פייתון היא שפת סקריפטים שמתאימה הן למתחילים והן למומחים כאחד. סגנון הקידוד ב- Python קל לקריאה והמשך
"התאמת צבעים" (משחק רפלקס): 4 שלבים
"התאמת צבעים" (משחק רפלקס): מבוא: לפרויקט הלימודים שלי לא הייתי בטוח מה לעשות, אבל לאחר מחשבה מסוימת, החלטתי לעשות משחק רפלקס. אחרי הכל, אנחנו בית ספר למשחקים. היינו צריכים לעשות משהו אינטראקטיבי וייחודי, כך שמשחק יהיה מושלם! אני שמח איך הכל