Mục lục:

Trò chơi điện tử Cyclone LED: 4 bước
Trò chơi điện tử Cyclone LED: 4 bước

Video: Trò chơi điện tử Cyclone LED: 4 bước

Video: Trò chơi điện tử Cyclone LED: 4 bước
Video: Arduino Based Smart RGB LED Arcade Game with 10 Gaming Levels. Have Fun with Cyclone Arduino Game 2024, Tháng mười một
Anonim
Image
Image
Cài đặt trong Fixture
Cài đặt trong Fixture

Mục đích của dự án này là tạo ra một trò chơi đơn giản sử dụng Arduino có thể tương tác và giải trí cho trẻ em. Tôi nhớ trò chơi arcade Cyclone là một trong những trò chơi arcade yêu thích của tôi khi tôi còn nhỏ, vì vậy tôi quyết định nhân rộng nó. Đây là một dự án rất đơn giản bao gồm Arduino, chuỗi các đèn LED có thể nhấn riêng lẻ và một nút nhấn.

Mục tiêu của trò chơi là dừng đèn xe đạp khi nó đến đèn LED (màu đỏ) được chỉ định. Nếu thành công, mức độ khó sẽ tăng lên. Nếu không thành công, chu kỳ ánh sáng sẽ khởi động lại ở mức độ khó hiện tại.

Hướng dẫn này là một nguồn tài nguyên khổng lồ cho cốt lõi mã hóa của tôi.

Bước 1: Thu thập nguồn cung cấp

  • Các thành phần chính:

    • Arduino (tôi đã sử dụng UNO)
    • Chuỗi đèn LED có thể định địa chỉ riêng (tôi đã sử dụng liên kết)
    • Nút nhấn (Tôi đã sử dụng liên kết)
    • Bảng mạch in (PCB) hoặc bảng mạch bánh mì
    • Bộ nguồn (Tôi đã sử dụng hai bộ nguồn riêng biệt, bạn có thể lấy một bộ nếu bạn sáng tạo)

      • 5V 3A cho đèn LED
      • 9V 1A cho Arduino
  • Khung:

    • Vỏ thiết bị điện tử (Tôi đã sửa đổi một đèn cố định bằng gỗ từ Goodwill)
    • Vỏ đèn LED (Tôi đã sửa đổi đồng hồ treo tường tiêu chuẩn của bạn và các lỗ khoan bằng cách sử dụng số nhận dạng phút làm dấu lỗ. Hãy sử dụng đồng hồ gỗ nếu có thể để việc khoan dễ dàng hơn.)
    • Vỏ nút (tôi đã sử dụng một ống PVC khuỷu tay)
  • Công cụ / Vật liệu khác:

    • Dây dự phòng cho mạch của bạn
    • Điện trở 10K (điện trở kéo xuống cho công tắc) và 470 ohm (cho dây dữ liệu trên đèn LED)
    • Khoan để tạo lỗ để đặt đèn LED của bạn và tạo bất kỳ lỗ cần thiết nào trên thiết bị cố định của bạn để luồn dây qua
    • Hàn sắt để hàn mạch của bạn với PCB
    • Súng bắn keo nóng để cố định đèn LED vào thiết bị cố định của bạn
    • Velcro hoặc một số phương tiện để bảo mật khung với nhau
    • Các miếng đệm tùy chọn cho các lỗ được khoan để dây đi qua

Bước 2: Tải lên mã

Đảm bảo bạn tải xuống và thêm thư viện "FastLED"

Cốt lõi của mã (void loop) bao gồm hai trạng thái: nút nhấn cao (Kết thúc trò chơi) và nút nhấn thấp (Đang chơi). Khi người dùng nhấn nút, địa chỉ đèn LED đã dừng bật sẽ được so sánh với địa chỉ của đèn LED trung tâm. Nếu chúng không giống nhau, tất cả các đèn sẽ nhấp nháy màu đỏ hai lần và mức hiện tại sẽ khởi động lại. Nếu chúng giống nhau, cylon (tập lệnh thư viện FastLED) chạy hai lần, mức độ khó tăng lên và tiếp tục chơi. Sau khi người chơi vượt qua cấp độ cuối cùng, cylon chạy lần thứ tám và trò chơi khởi động lại ở cấp độ 1.

// Trò chơi lốc xoáy

#include "FastLED.h" // lên đến 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // phạm vi 0-64 #define BRIGHTNESS 50 // Định nghĩa mức độ khó #define EASY 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // Độ khó bắt đầu từ độ khó = 1; // Xác định mảng led CRGB led [NUM_LEDS]; // Người chơi có thắng trong vòng này không? Thẻ này được sử dụng cho các thông số độ khó. bool wonThisRound = false; // Vị trí bắt đầu của đèn đi qua int LEDaddress = 0; // Trò chơi có đang chạy không? bool Playing = true; // Đây có phải là chiến thắng đầu tiên không? bool CycleEnded = true; // Chi tiết nút const int buttonPin = 9; int buttonState = 0; // Khởi tạo thư viện led và các hàm arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Thịt và khoai tây // Hai chế độ - Đang chơi và Kết thúc trò chơi void loop () {// KẾT THÚC TRÒ CHƠI buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Đang phát = false; // Người dùng đã nhấn nút và đèn LED đã dừng trên địa chỉ chiến thắng. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Đen; } leds [CENTER_LED] = CRGB:: Đỏ; leds [LEDaddress] = CRGB:: Màu xanh lá cây; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Tìm khoảng cách giữa đèn led sáng và đèn led trung tâm if (diff == 0) {wonThisRound = true; // Người chơi thành công vượt qua cấp độ if (khó! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (khó khăn == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } khó khăn = 0; } gainDifficulty (); wonThisRound = false; } else {delay (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDaddress = 0; chậm trễ (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Đang phát = true; }} // CHƠI if (Đang phát) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Tắt tất cả các led} leds [CENTER_LED] = CRGB:: Red; // Đặt màu đèn led trung tâm thành đèn led xanh lục [LEDaddress] = CRGB:: Green; // Đặt màu led cyling thành đỏ FastLED.show (); // Khởi tạo chu kỳ ánh sáng LEDaddress ++; // Đặt chu kỳ ánh sáng cho một đèn LED tại một thời điểm if (LEDaddress == NUM_LEDS) {LEDaddress = 0; } delay (getTime (khó khăn)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Đang phát = false; CycleEnded = true; }}} // Tham số mức int getTime (int diff) // Trả về độ trễ thời gian cho chuyển động của led dựa trên độ khó {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; nghỉ; trường hợp MEDIUM: timeValue = 80; nghỉ; case HARD: timeValue = 60; nghỉ; case ON_SPEED: timeValue = 40; nghỉ; case SONIC_SPEED: timeValue = 30; nghỉ; case ROCKET_SPEED: timeValue = 20; nghỉ; case LIGHT_SPEED: timeValue = 13; nghỉ; case MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Trả về lượng thời gian trễ} // Tham số tăng độ khó chiến thắng void tăngDifficulty () {if (khó! = MISSION_IMPOSSIBLE && wonThisRound) {khó ++; }} // Mất đèn LED Hiển thị void flash () {fill_solid (led, NUM_LEDS, CRGB:: Red); FastLED.show (); chậm trễ (500); fill_solid (led, NUM_LEDS, CRGB:: Black); FastLED.show (); chậm trễ (500); } // Giành LED Hiển thị void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Đầu tiên trượt led theo một hướng for (int i = 0; i = 0; i--) {// Đặt led thứ i thành led đỏ = CHSV (hue ++, 255, 255); // Hiển thị các led FastLED.show (); // bây giờ chúng ta đã hiển thị led, hãy đặt lại led thứ i thành màu đen // leds = CRGB:: Black; phaiall (); // Chờ một chút trước khi lặp lại và thực hiện lại delay (10); }}

Bước 3: Cài đặt trong Fixture

Cài đặt trong Fixture
Cài đặt trong Fixture
Cài đặt trong Fixture
Cài đặt trong Fixture

Tôi sẽ không đi vào chi tiết trong phần này. Có hàng nghìn cách khác nhau để thực hiện phần này và tôi nghĩ bạn nên sáng tạo để làm cho nó trông theo cách bạn thích. Điều đó đang được nói, đồng hồ khá thuận tiện để sử dụng cho các đèn LED vì nó có các chỉ số phút mà tôi có thể sử dụng làm dấu khoan. Ngoài ra, nắp kính cũng cho phép tôi sử dụng nó như một chiếc bàn.

Khóa dán cũng rất hữu ích để giữ cố định đèn LED vào bộ cố định vỏ thiết bị điện tử. Tôi cũng đã sử dụng khóa dán trên Arduino. Điều này rất thuận tiện cho việc kéo Arduino ra nếu tôi muốn sửa đổi mã.

Đề xuất: