สารบัญ:
วีดีโอ: เกมอาเขต Cyclone LED: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
จุดประสงค์ของโครงการนี้คือการสร้างเกมง่ายๆ โดยใช้ Arduino ที่จะโต้ตอบและสนุกสนานสำหรับเด็ก ๆ ฉันจำได้ว่าเกมอาเขต Cyclone เป็นหนึ่งในเกมอาร์เคดที่ฉันชอบเมื่อตอนที่ฉันยังเด็ก ดังนั้นฉันจึงตัดสินใจทำซ้ำ นี่เป็นโครงการที่เรียบง่ายมากที่ประกอบด้วย Arduino สตริงของไฟ LED ที่สามารถระบุตำแหน่งแยกกันได้ และปุ่มกด
เป้าหมายของเกมคือการหยุดไฟจักรยานเมื่อถึงไฟ LED (สีแดง) ที่ระบุ หากสำเร็จ ระดับความยากจะเพิ่มขึ้น หากไม่สำเร็จ รอบไฟจะรีสตาร์ทที่ระดับความยากในปัจจุบัน
คำแนะนำนี้เป็นแหล่งข้อมูลขนาดใหญ่สำหรับแกนหลักของการเข้ารหัสของฉัน
ขั้นตอนที่ 1: รวบรวมเสบียง
-
องค์ประกอบหลัก:
- Arduino (ฉันใช้ UNO)
- สตริงของไฟ LED ที่กำหนดแอดเดรสได้ทีละรายการ (ฉันใช้ลิงก์)
- ปุ่มกด (ฉันใช้ลิงก์)
- แผงวงจรพิมพ์ (PCB) หรือเขียงหั่นขนม
-
พาวเวอร์ซัพพลาย (ฉันใช้พาวเวอร์ซัพพลายสองอันแยกกัน คุณอาจใช้พาวเวอร์ซัพพลายหนึ่งตัวหากคุณมีความคิดสร้างสรรค์)
- 5V 3A สำหรับ LEDs
- 9V 1A สำหรับ Arduino
-
กรอบ:
- ที่อยู่อาศัยอิเล็กทรอนิกส์ (ฉันแก้ไขโคมไฟไม้จากค่าความนิยม)
- ตัวเรือน LED (ฉันแก้ไขนาฬิกาแขวนมาตรฐานและรูเจาะโดยใช้ตัวระบุนาทีเป็นเครื่องหมายบอกรู ใช้นาฬิกาไม้ถ้าเป็นไปได้เพื่อให้การเจาะง่ายขึ้น)
- ตัวเรือนปุ่ม (ฉันใช้ท่อพีวีซีข้อศอก)
-
เครื่องมือ / วัสดุอื่น ๆ:
- เดินสายสำรองสำหรับวงจรของคุณ
- ตัวต้านทาน 10K (ตัวต้านทานแบบดึงลงสำหรับสวิตช์) และ 470 โอห์ม (สำหรับสายดาต้าบน LED)
- เจาะเพื่อสร้างรูสำหรับใส่ LED ของคุณ และทำรูที่จำเป็นในฟิกซ์เจอร์ของคุณเพื่อส่งผ่านสายไฟ
- หัวแร้งสำหรับบัดกรีวงจรของคุณกับ PCB
- ปืนกาวร้อนสำหรับยึดไฟ LED กับโคมของคุณ
- เวลโครหรือวิธีการยึดโครงเข้าด้วยกัน
- ปะเก็นเสริมสำหรับรูเจาะสำหรับสายไฟที่จะผ่าน
ขั้นตอนที่ 2: อัปโหลดรหัส
ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดและเพิ่มไลบรารี "FastLED"
แก่นของรหัส (วงเป็นโมฆะ) ประกอบด้วยสองสถานะ: ปุ่มกดสูง (จบเกม) และปุ่มกดต่ำ (กำลังเล่น) เมื่อผู้ใช้กดปุ่ม ไฟ LED ที่ไฟถูกหยุดจะถูกนำไปเปรียบเทียบกับที่อยู่ของ LED ตรงกลาง หากไม่เหมือนกัน ไฟทั้งหมดจะกะพริบเป็นสีแดงสองครั้งและระดับปัจจุบันจะเริ่มต้นใหม่ หากเหมือนกัน ไซลอน (สคริปต์ไลบรารี FastLED) จะทำงานสองครั้ง ระดับความยากจะเพิ่มขึ้น และเล่นต่อ เมื่อผู้เล่นเอาชนะด่านสุดท้าย ไซลอนจะทำงานเป็นครั้งที่แปดและเกมจะรีสตาร์ทที่ระดับ 1
//เกมไซโคลน
#include "FastLED.h" // สูงสุด 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB //range 0-24 #define BRIGHTNESS 50 // คำจำกัดความของระดับความยาก #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 // ความยากลำบากในการเริ่มต้น = 1; // กำหนดอาร์เรย์ของไฟ LED ไฟ LED CRGB [NUM_LEDS]; // ผู้เล่นชนะในรอบนี้หรือไม่? แท็กนี้ใช้สำหรับพารามิเตอร์ความยาก บูล wonThisRound = false; // ตำแหน่งเริ่มต้นของไฟจักรยาน int LEDaddress = 0; // เกมกำลังทำงานอยู่เหรอ? bool เล่น = จริง; // นี่เป็นชัยชนะครั้งแรกเหรอ? bool CycleEnded = จริง; // รายละเอียดปุ่ม const int buttonPin = 9; int buttonState = 0; // เริ่มต้นไลบรารี led และฟังก์ชั่น arduino ถือเป็นโมฆะการตั้งค่า () { FastLED.addLeds (ไฟ LED, NUM_LEDS); FastLED.setBrightness(ความสว่าง); pinMode (ปุ่มพิน, อินพุต); Serial.begin(9600); } // เนื้อและมันฝรั่ง // สองโหมด - การเล่นและจบเกม void loop () { //END GAME buttonState = digitalRead (buttonPin); ถ้า (buttonState == สูง) { เล่น = เท็จ; // ผู้ใช้กดปุ่มและไฟ LED หยุดอยู่ที่ที่อยู่ที่ชนะ สำหรับ (int i = 0; i < NUM_LEDS; i++) { leds = CRGB::Black; } ไฟ LED[CENTER_LED] = CRGB::สีแดง; ไฟ LED [ที่อยู่ LED] = CRGB::สีเขียว; FastLED.show(); ถ้า (CycleEnded = true) { int diff = abs (CENTER_LED - LEDaddress); // ค้นหาระยะห่างระหว่างไฟ LED ที่สว่างและไฟ LED ตรงกลางหาก (diff == 0) { wonThisRound = true; // ผู้เล่นสามารถเอาชนะระดับได้สำเร็จหาก (ยาก != MISSION_IMPOSSIBLE) { สำหรับ (int i = 0; i <2; i++) { cylon(); } } if (ความยากลำบาก == MISSION_IMPOSSIBLE) { สำหรับ (int i = 0; i <8; i++) { cylon(); } ความยาก = 0; } เพิ่มความยากลำบาก (); wonThisRound = เท็จ; } อื่น ๆ { ล่าช้า (1000); สำหรับ (int i = 0; i <2; i++) { flash(); } } CycleEnded = เท็จ; } LEDaddress = 0; ล่าช้า (250); buttonState = digitalRead (ปุ่มพิน); ถ้า (buttonState == LOW) { Playing = true; } } // กำลังเล่นถ้า (กำลังเล่น) { สำหรับ (int i = 0; i < NUM_LEDS; i++) { leds = CRGB:: Black; //ปิดไฟ LED ทั้งหมด } ไฟ LED[CENTER_LED] = CRGB::Red; // ตั้งค่าสีนำตรงกลางเป็นไฟ LED สีเขียว [LEDaddress] = CRGB::Green; //ตั้งค่าสี led cyling เป็นสีแดง FastLED.show(); // เริ่มต้น LEDaddress วงจรไฟ ++; // ตั้งค่าวงจรแสงเป็นหนึ่งดวงในแต่ละครั้งหาก (LEDaddress == NUM_LEDS) { LEDaddress = 0; } ล่าช้า (getTime (ยาก)); buttonState = digitalRead (ปุ่มพิน); ถ้า (buttonState == สูง) { เล่น = เท็จ; CycleEnded = จริง; } } } // พารามิเตอร์ระดับ int getTime (int diff) // ส่งคืนการหน่วงเวลาสำหรับการเคลื่อนไหวแบบ led ตามความยากลำบาก { int timeValue = 0; สวิตช์ (แตกต่าง) { กรณีง่าย: timeValue = 100; หยุดพัก; กรณี MEDIUM: timeValue = 80; หยุดพัก; กรณียาก: timeValue = 60; หยุดพัก; กรณี ON_SPEED: timeValue = 40; หยุดพัก; กรณี SONIC_SPEED: timeValue = 30; หยุดพัก; กรณี ROCKET_SPEED: timeValue = 20; หยุดพัก; กรณี LIGHT_SPEED: timeValue = 13; หยุดพัก; กรณี MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue;// คืนจำนวนการหน่วงเวลา } // ค่าความยากที่ชนะเพิ่มพารามิเตอร์ void เพิ่มDifficulty() { if (ยาก != MISSION_IMPOSSIBLE && wonThisRound) { ความยาก++; } } // LED ที่หายไป แสดงแฟลชเป็นโมฆะ () { fill_solid (ไฟ LED, NUM_LEDS, CRGB:: สีแดง); FastLED.show(); ล่าช้า (500); fill_solid(ไฟ LED, NUM_LEDS, CRGB::Black); FastLED.show(); ล่าช้า (500); } // ชนะ LED แสดงโมฆะ fadeall () { สำหรับ (int i = 0; i < NUM_LEDS; i ++) { leds .nscale8 (250); } } void cylon() { คงที่ uint8_t hue = 0; Serial.print("x"); // ขั้นแรกให้เลื่อน led ไปในทิศทางเดียวสำหรับ (int i = 0; i = 0; i--) {// ตั้งค่า i'th led เป็นไฟ led สีแดง = CHSV(hue++, 255, 255); // แสดงไฟ LED FastLED.show(); // ตอนนี้เราได้แสดงไฟ LED แล้ว ให้รีเซ็ต i'th led เป็นสีดำ // leds = CRGB::Black; เฟดดอลล์(); // รอสักครู่ก่อนที่เราจะวนซ้ำและทำอีกครั้งล่าช้า (10); } }
ขั้นตอนที่ 3: ติดตั้งใน Fixture
ฉันจะไม่ลงรายละเอียดในส่วนนี้ มีหลายพันวิธีในการดำเนินการในส่วนนี้ และฉันคิดว่าคุณควรมีความคิดสร้างสรรค์ในการทำให้มันออกมาเป็นอย่างที่คุณชอบ อย่างที่กล่าวไปแล้ว นาฬิกานั้นค่อนข้างสะดวกที่จะใช้สำหรับใส่หลอด LED เพราะมีตัวบ่งชี้นาทีที่ฉันสามารถใช้เป็นเครื่องหมายดอกสว่านได้ นอกจากนี้ ฝาแก้วยังช่วยให้ฉันใช้เป็นโต๊ะได้อีกด้วย
แถบตีนตุ๊กแกมีประโยชน์มากเช่นกันสำหรับการยึดอุปกรณ์ LED เข้ากับอุปกรณ์อิเล็กทรอนิกส์ ฉันยังใช้เวลโครบน Arduino สิ่งนี้ทำให้สะดวกมากในการดึง Arduino ออกหากฉันต้องการแก้ไขรหัส
แนะนำ:
FPGA Cyclone IV DueProLogic ควบคุมกล้อง Raspberry Pi: 5 ขั้นตอน
FPGA Cyclone IV DueProLogic ควบคุมกล้อง Raspberry Pi: แม้ว่า FPGA DueProLogic จะได้รับการออกแบบอย่างเป็นทางการสำหรับ Arduino แต่เราจะทำให้ FPGA และ Raspberry Pi 4B สื่อสารกันได้ มีการใช้งานสามงานในบทช่วยสอนนี้: (A) กดปุ่มสองปุ่มบนพร้อมกัน FPGA เพื่อพลิกมุมของ
FPGA Cyclone IV DueProLogic - ปุ่มกดและไฟ LED: 5 ขั้นตอน
FPGA Cyclone IV DueProLogic - ปุ่มกดและไฟ LED: ในบทช่วยสอนนี้ เราจะใช้ FPGA เพื่อควบคุมวงจร LED ภายนอก เราจะใช้งานต่อไปนี้ (A) ใช้ปุ่มกดบน FPGA Cyclone IV DuePrologic เพื่อควบคุม LED (B) Flash LED บน & ปิดเป็นระยะVideo demo Lab
FPGA Cyclone IV DueProLogic ควบคุมเซอร์โวมอเตอร์: 4 ขั้นตอน
FPGA Cyclone IV DueProLogic ควบคุมเซอร์โวมอเตอร์: ในบทช่วยสอนนี้ เราจะเขียนโค้ด Verilog เพื่อควบคุมเซอร์โวมอเตอร์ เซอร์โว SG-90 ผลิตโดย Waveshare เมื่อคุณซื้อเซอร์โวมอเตอร์ คุณอาจได้รับแผ่นข้อมูลที่แสดงแรงดันไฟฟ้าขณะทำงาน แรงบิดสูงสุด และ Pu
ป่อง! - เกมอาเขต Arduino!: 3 ขั้นตอน
ป่อง! - เกมอาร์เคด Arduino!: เราจะสร้างเกมอาร์เคดสไตล์โป่งซึ่งใช้ชิ้นส่วนจาก "โครงการ UNO R3 ชุดเริ่มต้นที่สมบูรณ์ที่สุด" ชุดอุปกรณ์จาก Elegoo Inc. การเปิดเผยข้อมูลอย่างครบถ้วน - ชิ้นส่วนส่วนใหญ่ที่ให้มาสำหรับคำแนะนำนี้จัดทำโดย Elegoo
Cyclone (เกม Arduino LED): 6 ขั้นตอน (พร้อมรูปภาพ)
Cyclone (เกม Arduino LED): ในบทช่วยสอนนี้ ฉันจะสอนวิธีสร้างเกม LED ที่มีโค้ดหรือประสบการณ์เพียงเล็กน้อย! ฉันมีความคิดนี้มาระยะหนึ่งแล้วและในที่สุดก็เริ่มสร้างมันขึ้นมา เป็นเกมสนุก ๆ ที่ทำให้เรานึกถึงเกมอาร์เคดทั้งหมด มีแบบฝึกหัดอื่นเ