2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ในคำแนะนำนี้ฉันจะแสดงวิธีควบคุม RGB led โดยใช้รีโมท IR และสร้างเกมสนุก ๆ ออกมา!
ขั้นตอนที่ 1: อะไหล่ที่จำเป็น
ส่วนที่คุณต้องการสำหรับโครงการนี้คือ:
- arduino one- RGB Led- IR-Sensor
(นับนำขึ้นอยู่กับเกมจำนวนชีวิตหรือ) - ไฟ LED สีเขียว 2 ดวง - ไฟ LED สีเหลือง 1 ดวง - ไฟ LED สีส้ม 1 ดวง - ไฟ LED สีแดง 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 = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
//สร้างสี
int rood สุ่ม = 0; int groen สุ่ม = 0; int blauw สุ่ม = 0;
// ตัวแปรของเกม
ความแตกต่างภายใน = 200;
int levelNumber = 1;
ระดับ int = {-1, -1, -1, -1};
int เสื้อ = 0;
int ระดับ 1 = 255;
int ระดับ 2 = 0; int ระดับ 3 = 0; int ระดับ 4 = 0;
int ชีวิต = 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); โหมดพิน (กรีนพิน, เอาต์พุต); โหมดพิน (บลูพิน, เอาต์พุต);
โหมดพิน (levensPin1, OUTPUT);
โหมดพิน (levensPin2, เอาต์พุต); โหมดพิน (levensPin3, เอาต์พุต);
}
วงเป็นโมฆะ () {
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: //oud ding enter/R CLK
จัดการอินพุต (); หยุดพัก;
กรณีที่ 109562816: //oud ding power
จัดการสี (); หยุดพัก; กรณี 109562878: //oud ding ยกเลิก/L CLK resetColor(); หยุดพัก;
กรณี 109562866: //lege knop midden
สุ่มสี(); หยุดพัก;
กรณี 109562830: // pijltje naar rechts
แสดงทุกอย่าง (); หยุดพัก; กรณี 109562838: // กรณี esc 109562822: // แหล่ง AV รีเซ็ตทุกอย่าง (); หยุดพัก; }
// กำหนดปุ่มบนรีโมทเพื่อควบคุมสี: ด้วยวิธีนี้ ผู้เล่นจะเห็นว่าสีเป็นอย่างไรและจะรวมมันอย่างไร
// ก่อนเริ่มเกม สวิตช์ (results.value) { กรณี 109562840: rood = 255; หยุดพัก;
กรณี 109562844:
โกรน = 255; หยุดพัก;
กรณี 109562850:
โบลว์ = 255; หยุดพัก;
กรณี 109562836:
ร็อด = 0; โกรน = 0; โบลว์ = 0; หยุดพัก; }
}
analogWrite(redPin, abs(255 - rood)); // ควบคุม RGB led: ย้อนกลับเพราะของฉันเป็นแบบย้อนกลับ
analogWrite(greenPin, abs(255 - groen)); analogWrite(bluePin, abs (255 - blauw));
// ควบคุมไฟ LED สด
ถ้า (ชีวิต == 2) { levens1 = 0; } ถ้า (ชีวิต == 1){ levens2 = 0; } ถ้า (ชีวิต == 0){ levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// ควบคุมระดับ leds
ถ้า (ระดับ == 1) { ระดับ 1 = 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 (ระดับพิน 1 ระดับ 1); analogWrite (ระดับพิน2, ระดับ2); analogWrite (ระดับพิน 3 ระดับ 3); analogWrite (ระดับพิน4, ระดับ4);
}
เป็นโมฆะ addWaarde (ค่า int) {// เพิ่มค่าที่กดลงในรายการ
ถ้า (indexNumber == 3) {
กลับ; }
ถ้า (อินพุต [ดัชนีหมายเลข] == -1){
อินพุต[indexNumber] = ค่า; ดัชนีหมายเลข++; } }
ถือเป็นโมฆะ handleInput () { // สร้าง 'waarde' (ค่า) ออกจากรายการ
waarde = abs(อินพุต[0] * 100 + อินพุต[1] * 10 + อินพุต[2]); อินพุต[0] = -1; // รีเซ็ตอินพุตสัญญาณ[1] = -1; อินพุต [2] = -1;
indexNumber = 0;
Serial.print("ตัวเลือก: "); Serial.println(waarde); เพิ่มสี(waarde); }
เป็นโมฆะ addColor (int waarde) {// เพิ่ม 'waarde' 3 หลักในรายการ
ถ้า (indexColor == 3) {
กลับ; }
ถ้า (สี[ดัชนีสี] == -1){
สี[indexColor] = waarde; ถ้า (สี[ดัชนีสี] > 255){ สี[ดัชนีสี] = 255; } indexColor++; }
}
void randomColor(){ // ทำให้แสงเปลี่ยนเป็นสีสุ่มและบันทึกไว้ในตัวแปร
roodRandom = สุ่ม (0, 255);
groenRandom = สุ่ม (0, 255);
blauwRandom = สุ่ม (0, 255);
rood = rood สุ่ม;
groen = groen สุ่ม; blauw = blauw สุ่ม; Serial.print("roodRandom = "); Serial.println(roodRandom); Serial.print("สุ่มสุ่ม = "); Serial.println(สุ่มสุ่ม); Serial.print("blauwRandom = "); Serial.println(blauwRandom);
}
void handleColor() {// เปลี่ยน 'waarde' จากรายการเป็นตัวแปร 'Gok' (เดา)
roodGok = สี[0]; groenGok = สี [1]; blauwGok = สี[2]; // ตรวจสอบว่าตัวแปร Gok แตกต่างกันมากเกินไปกับสีสุ่มจริงหรือไม่: ถ้าใช่ ให้แสดงการเดาเป็นเวลาสามวินาที กะพริบเป็นสีเขียวและเปลี่ยนสีอีกครั้ง เพิ่มระดับ abd ทำให้ความแตกต่างที่อนุญาตมีขนาดเล็กลง // ถ้าไม่ ให้แสดง เดาสามวินาที กะพริบเป็นสีแดงแล้วหักหนึ่งชีวิต // ถ้าคุณหมดชีวิต เกมจะเริ่มอีกครั้งถ้า (abs((rood + groen + 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 (บลูพิน, 255); ล่าช้า (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (บลูพิน, 255); ล่าช้า (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (300);
Serial.print("roodGok = ");
Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); รีเซ็ตสี(); สุ่มสี(); ระดับหมายเลข++; ต่าง -= 50; } อื่น ๆ { analogWrite (redPin, abs (255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); ล่าช้า (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);
รีเซ็ตสี();
ชีวิต--; } ถ้า (ชีวิต == 0){ analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (บลูพิน, 255); ล่าช้า (100); รีเซ็ตทุกอย่าง (); }
}
void resetColor(){ // ใช้สำหรับรีเซ็ตค่า สำหรับการกดผิดหรือการเดาใหม่ทุกครั้ง (เพื่อความแน่นอน)
สี[0] = -1; สี [1] = -1; สี [2] = -1;
indexNumber=0;
ดัชนีสี=0; }
เป็นโมฆะ resetEverything(){ // เริ่มเกมใหม่
สี[0] = -1; สี [1] = -1; สี [2] = -1;
indexNumber=0;
ดัชนีสี=0;
ชีวิต = 3;
ร็อด = 0; โกรน = 0; โบลว์ = 0;
สุ่ม = 0;
สุ่ม = 0; สุ่ม = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
ระดับ 1 = 255;
ระดับ 2 = 0; ระดับ 3 = 0; ระดับ 4 = 0;
ระดับหมายเลข = 1;
เสื้อ = 0;
}
ถือเป็นโมฆะ 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("สุ่มสุ่ม = "); Serial.println(สุ่มสุ่ม); Serial.print("blauwRandom = "); Serial.println(blauwRandom);
Serial.print("rood = ");
Serial.println(rood); Serial.print("groen = "); Serial.println(เกรียน); Serial.print("blauw = "); Serial.println(blauw);
Serial.print("ตัวเลือก: ");
Serial.println(waarde); }
ขั้นตอนที่ 3: สร้าง
เห็นได้ชัดว่าคุณต้องการงานสร้างที่ดีสำหรับโครงการนี้ ส่วนนี้ค่อนข้างเปิดกว้างสำหรับการตีความ แต่มีบางสิ่งที่ต้องคำนึงถึง: - รักษาแผงด้านหน้าให้บาง เพื่อให้คุณสามารถติดไฟ LED ผ่านส่วนนี้และตัวรับสัญญาณ IR ยังคงทำงาน
- ให้พื้นที่เพียงพอในการสร้างสำหรับ Arduino และบอร์ดประสาน
- ตรวจสอบให้แน่ใจว่ามีรูที่ด้านหลังสำหรับพลังของ Arduino
ฉันได้เพิ่มโครงร่างคร่าวๆ สำหรับการเดินสาย
ขอให้โชคดีและสนุก!