Mục lục:

Trò chơi đoán màu từ xa IR-Remote: 3 bước
Trò chơi đoán màu từ xa IR-Remote: 3 bước

Video: Trò chơi đoán màu từ xa IR-Remote: 3 bước

Video: Trò chơi đoán màu từ xa IR-Remote: 3 bước
Video: Chinese Drama ❤️ Anh chàng trả thù nhầm hại chớt bố vợ, vợ anh uất hận trùng sinh & cái kết 2024, Tháng mười một
Anonim
Trò chơi đoán màu từ xa IR
Trò chơi đoán màu từ xa IR

Trong phần hướng dẫn này, tôi sẽ chỉ cho bạn cách điều khiển đèn LED RGB bằng điều khiển từ xa IR và tạo ra một trò chơi thú vị từ nó!

Bước 1: Các bộ phận cần thiết

Các bộ phận cần thiết
Các bộ phận cần thiết

Các phần bạn sẽ cần cho dự án này là:

- arduino one- RGB Led- IR-Sensor

(số lượng led tùy thuộc vào trò chơi, số lượng cuộc sống hoặc) - 2 led xanh - 1 led vàng - 1 led cam- 3 led đỏ

Bước 2: Mã

#bao gồm

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 không thể thay đổi (RECV_PIN); giải mã kết quả;

// màu đầu vào

int input = {-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;

// tạo màu

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// biến trò chơi

int diff = 200;

int levelNumber = 1;

int cấp = {-1, -1, -1, -1};

int t = 0;

int level1 = 255;

int level2 = 0; int level3 = 0; int level4 = 0;

int lives = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

Serial.begin (9600); không thể thay đổi.enableIRIn (); // khởi động pinMode thu (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

void loop () {

if (unacv.decode (& results)) // nhận tín hiệu từ remote {Serial.println (results.value, DEC); // hiển thị các tín hiệu nhận được từ mỗi nút được nhấn. // nhận công tắc tín hiệu tiếp theo (results.value) {// chuyển tín hiệu thành số trên các nút và gán các hành động cho các nút

trường hợp 109562864:

addWaarde (1); nghỉ;

trường hợp 109562824:

addWaarde (2); nghỉ;

trường hợp 109562856:

addWaarde (3); nghỉ;

trường hợp 109562872:

addWaarde (4); nghỉ;

trường hợp 109562820:

addWaarde (5); nghỉ;

trường hợp 109562852:

addWaarde (6); nghỉ;

trường hợp 109562868:

addWaarde (7); nghỉ;

trường hợp 109562828:

addWaarde (8); nghỉ;

trường hợp 109562860:

addWaarde (9); nghỉ;

trường hợp 109562876:

addWaarde (0); nghỉ;

case 109562818: // oud ding enter / R CLK

handleInput (); nghỉ;

case 109562816: // oud ding power

handleColor (); nghỉ; case 109562878: // oud ding hủy / L CLK resetColor (); nghỉ;

case 109562866: // lege knop midden

randomColor (); nghỉ;

trường hợp 109562830: // pijltje naar rechts

displayEverything (); nghỉ; case 109562838: // esc case 109562822: // AV source resetEverything (); nghỉ; }

// gán các nút trên điều khiển từ xa để điều khiển màu sắc: bằng cách này, người chơi có thể xem màu sắc trông như thế nào và cách kết hợp chúng, // trước khi bắt đầu trò chơi. switch (results.value) {case 109562840: rood = 255; nghỉ;

trường hợp 109562844:

rên rỉ = 255; nghỉ;

trường hợp 109562850:

blauw = 255; nghỉ;

trường hợp 109562836:

rood = 0; rên rỉ = 0; blauw = 0; nghỉ; }

}

analogWrite (redPin, abs (255 - rood)); // điều khiển led RGB: ngược lại, vì của tôi có dây ngược.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));

// điều khiển đèn led trực tiếp

if (lives == 2) {levens1 = 0; } if (lives == 1) {levens2 = 0; } if (lives == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// điều khiển dẫn mức

if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; cấp2 = 255; } if (levelNumber == 3) {level1 = 255; cấp2 = 255; cấp3 = 255; } if (levelNumber == 4) {level1 = 255; cấp2 = 255; cấp3 = 255; cấp4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int value) {// thêm giá trị được nhấn vào danh sách

if (indexNumber == 3) {

trở lại; }

if (input [indexNumber] == -1) {

input [indexNumber] = giá trị; indexNumber ++; }}

void handleInput () {// tạo 'waarde' (giá trị) ra khỏi danh sách

waarde = abs (đầu vào [0] * 100 + đầu vào [1] * 10 + đầu vào [2]); đầu vào [0] = -1; // reset de signalen input [1] = -1; đầu vào [2] = -1;

indexNumber = 0;

Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }

void addColor (int waarde) {// thêm 'waarde' 3 chữ số vào danh sách

if (indexColor == 3) {

trở lại; }

if (color [indexColor] == -1) {

color [indexColor] = waarde; if (color [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// làm cho ánh sáng chuyển thành màu ngẫu nhiên và lưu nó trong các biến

roodRandom = ngẫu nhiên (0, 255);

groenRandom = random (0, 255);

blauwRandom = random (0, 255);

rood = roodRandom;

groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// biến 'waarde' từ danh sách thành biến 'Gok' (đoán)

roodGok = color [0]; groenGok = color [1]; blauwGok = color [2]; // kiểm tra xem các biến Gok có khác biệt quá nhiều với màu thực ngẫu nhiên hay không: nếu có, hiển thị kết quả phỏng đoán trong ba giây, nhấp nháy màu xanh lục và thay đổi màu lần nữa, thêm một cấp độ bắt cóc làm cho sự khác biệt được phép nhỏ hơn // nếu không, hiển thị đoán trong ba giây, nhấp nháy màu đỏ và trừ một mạng // nếu bạn hết mạng, trò chơi sẽ bắt đầu lại nếu (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); chậm trễ (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); chậm trễ (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); chậm trễ (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; khác - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); chậm trễ (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

cuộc sống--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); chậm trễ (100); resetEverything (); }

}

void resetColor () {// sử dụng cho các giá trị đặt lại, khi nhấn nhầm hoặc mọi lần đoán mới (chỉ để chắc chắn)

màu [0] = -1; màu [1] = -1; màu [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// khởi động lại trò chơi

màu [0] = -1; màu [1] = -1; màu [2] = -1;

indexNumber = 0;

indexColor = 0;

cuộc sống = 3;

rood = 0; rên rỉ = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

cấp1 = 255;

cấp2 = 0; cấp3 = 0; cấp 4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// sử dụng điều này để hiển thị thông tin quan trọng trên màn hình nối tiếp

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 ("groen ="); Serial.println (Groen); Serial.print ("blauw ="); Serial.println (blauw);

Serial.print ("waarde opgeslagen:");

Serial.println (waarde); }

Bước 3: Xây dựng

Xây dựng
Xây dựng
Xây dựng
Xây dựng
Xây dựng
Xây dựng
Xây dựng
Xây dựng

Bạn rõ ràng muốn có một bản dựng đẹp cho dự án này. phần này khá dễ hiểu, nhưng có một số điều cần lưu ý: - giữ cho bảng điều khiển phía trước mỏng để bạn vẫn có thể dán đèn led của mình qua nó và bộ thu IR vẫn hoạt động

- giữ đủ không gian trong bản dựng cho arduino và bảng hàn

- đảm bảo có một lỗ ở phía sau để cấp nguồn cho arduino

Tôi đã thêm một sơ đồ sơ bộ cho hệ thống dây điện.

Chúc may mắn và vui vẻ!

Đề xuất: