สารบัญ:

เกมเดาสี IR-Remote: 3 ขั้นตอน
เกมเดาสี IR-Remote: 3 ขั้นตอน

วีดีโอ: เกมเดาสี IR-Remote: 3 ขั้นตอน

วีดีโอ: เกมเดาสี IR-Remote: 3 ขั้นตอน
วีดีโอ: รีวิว วิธีใช้งาน Tuya S06/S08 Universal IR Remote Control สั่งงานผ่านมือถือ WIFI และ Google Home 2024, กรกฎาคม
Anonim
เกมเดาสี IR-Remote
เกมเดาสี IR-Remote

ในคำแนะนำนี้ฉันจะแสดงวิธีควบคุม 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

ฉันได้เพิ่มโครงร่างคร่าวๆ สำหรับการเดินสาย

ขอให้โชคดีและสนุก!

แนะนำ: