สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: วัสดุที่ต้องการ
- ขั้นตอนที่ 2: เชื่อมต่อสายทั้งหมดสำหรับ Arduino
- ขั้นตอนที่ 3: การตั้งค่า LEDs และ Breadboard
- ขั้นตอนที่ 4: การเชื่อมต่อคอนโทรลเลอร์
- ขั้นตอนที่ 5:
- ขั้นตอนที่ 6: รหัสตอนที่ 1
- ขั้นตอนที่ 7: รหัสตอนที่ 2
- ขั้นตอนที่ 8: รหัสตอนที่ 3
ในคำแนะนำนี้ฉันจะแสดงวิธีใช้คอนโทรลเลอร์ SNES เชื่อมต่อกับ Arduino และสร้างเกม Simon Says อย่างง่าย
สิ่งนี้สามารถใช้ในการสร้างเกมที่มีความซับซ้อนมากขึ้นหรืออาจจะลองทำมินิคอนโซลที่ใช้ Arduino ในที่สุดฉันจะได้รับวิดีโอขึ้นของเกมในการดำเนินการ แต่ฉันไม่รู้ว่าเมื่อไหร่
วัสดุ:
ขั้นตอนที่ 1: วัสดุที่ต้องการ
วัสดุที่จำเป็นมีดังนี้:
-1 Arduino
-1 เขียงหั่นขนมเล็ก ๆ
คอนโทรลเลอร์ SNES รุ่นเก่า -1 ตัวที่คุณจะไม่ต้องเสียใจ
-10-15 สายจัมเปอร์ (ฉันใช้ 11)
-5 LEDs
-เทป
ขั้นตอนที่ 2: เชื่อมต่อสายทั้งหมดสำหรับ Arduino
เสียบสายจัมเปอร์เข้ากับพิน 2-9 ที่ arduino ดูด้านล่างเพื่อดูว่าแต่ละหมุดทำอะไรพร้อมกับโทนสีที่แนะนำของฉัน
Pin 2: Strobe Pin เชื่อมต่อกับสายสีส้มจากตัวควบคุมดังนั้นฉันจะทำให้จัมเปอร์สีชมพูหรือสีส้ม
เข็มที่ 3: เข็มนาฬิกา เชื่อมต่อกับสายสีเหลืองจากคอนโทรลเลอร์ดังนั้นฉันแนะนำจัมเปอร์สีเหลือง
Pin 4: Data Pin สายสีแดงบนคอนโทรลเลอร์ดังนั้นจัมเปอร์สีแดงจะดีที่สุด
Pin 5: Power สำหรับไฟ led ด้านบน
Pin 6: Power สำหรับไฟ led ด้านขวา
Pin 7: Power สำหรับไฟ led ด้านล่าง
Pin 8: Power สำหรับไฟ LED ด้านซ้าย
หมุด 5-8 ควรมีสายจัมเปอร์สีเดียวกัน ฉันเลือกสีเขียวเข้ม
Pin 9: Power สำหรับไฟแสดงสถานะของเกม ฉันใช้ไฟเขียว
5V: ขั้วต่อสายไฟเชื่อมต่อกับสายสีขาวจากคอนโทรลเลอร์ดังนั้นฉันจึงใช้จัมเปอร์สีขาว
GND: สายสีน้ำตาลจากคอนโทรลเลอร์ฉันใช้จัมเปอร์สีดำ
GND: ใช้เพื่อเชื่อมต่อบริเวณทั้งหมดจากเขียงหั่นขนมกลับไปที่ arduino ฉันใช้สีฟ้าสำหรับสายกราวด์ทั้งหมด
ขั้นตอนที่ 3: การตั้งค่า LEDs และ Breadboard
วางไฟ LED ของคุณบนเขียงหั่นขนมในรูปเพชร ตรวจสอบให้แน่ใจว่าไม่มีพิน LED 2 ตัวที่ใช้ร่วมกันในแถวหมายเลขเดียวกัน เดินสายแคโทดทั้งหมด (หมุดสั้น ๆ บนไฟ LED) ไปยังเส้นกราวด์บนเขียงหั่นขนมของคุณจากนั้นต่อสายกราวด์ของคุณเข้ากับ GND หนึ่งอันบนอาร์ดิโน เชื่อมต่อจัมเปอร์บนพิน 5-8 กับแอโนดของแอลอีดีของคุณตามตำแหน่งในขั้นตอนสุดท้าย
สำหรับ LED ตัวบ่งชี้เกมเพียงแค่นำมันออกจากตัวอื่น ๆ เชื่อมต่อขั้วบวกของมันกับ Pin 9 และแคโทดของมันกับรางพื้น
ขั้นตอนที่ 4: การเชื่อมต่อคอนโทรลเลอร์
จนถึงจุดนี้คุณไม่ต้องยุ่งกับคอนโทรลเลอร์เลย ตอนนี้คุณต้องตัดปลอกพลาสติกออกจากปลายสายเพื่อให้คุณสามารถไปที่สายด้านใน พวกเขาควรจะมีปลายโลหะเล็ก ๆ (ดูรูป) ดังนั้นมันควรจะค่อนข้างง่ายที่จะขอสายจัมเปอร์ใช่ไหม?
ไม่ถูกต้อง.
ก่อนอื่นให้พันสายไฟของคอนโทรลเลอร์ไปยังโต๊ะทำงานโดย arduino ถ้าคุณปล่อยให้มันเคลื่อนที่คุณจะมีเวลาในการเชื่อมต่อที่ดี สายจัมเปอร์ของฉันหลุดออกมาจากสิ่งเล็ก ๆ น้อย ๆ โลหะดังนั้นฉันจึงเอามีดพกและสอดปลายออกเป็นชิ้น ๆ (ดูรูป) เพื่อที่ฉันจะได้ติดจัมเปอร์ลวดตั้งฉากกับสิ่งที่เป็นซ็อกเก็ต เมื่อต่อสาย 5 เส้นเข้ากับตัวควบคุมตรวจดูให้แน่ใจว่าสายไม่ได้สัมผัสกันและคุณได้จับคู่สีอย่างถูกต้อง
ขั้นตอนที่ 5:
ณ จุดนี้คุณควรมีทุกสิ่งที่มีสายอย่างถูกต้องและพร้อมที่จะไป ดาวน์โหลดร่าง Arduino ที่เชื่อมโยงรวบรวมจากนั้นอัปโหลดไปยัง Arduino ของคุณ ในการเล่นให้รอให้ไฟ LED ตัวบ่งชี้เกมหยุดกะพริบจากนั้นใช้ AXBY เป็นทิศทางสำคัญทั้ง 4 ทิศทาง ในขั้นตอนต่อไปฉันจะพยายามอธิบายรหัส แต่ถ้าคุณต้องการเพียงแค่เกมที่ใช้งานได้คุณสามารถหยุดที่นี่
Simon_Says_snes.ino
ขั้นตอนที่ 6: รหัสตอนที่ 1
พื้นหลังเล็กน้อยก่อนว่าตัวควบคุมส่งข้อมูลอย่างไร ในการรับข้อมูลจากคอนโทรลเลอร์คุณต้องตั้งค่า strobe pin ให้สูงจากนั้นอ่านบิตแรกของข้อมูล (บิตสำคัญน้อยที่สุด) ในการรับบิตที่สองคุณสามารถสลับเข็มนาฬิกาแล้วอ่านจากเข็มข้อมูล คุณทำเช่นนี้ 16 ครั้ง สถานะของคอนโทรลเลอร์คือหมายเลข 2 ไบต์โดย 12 ไบต์สำคัญน้อยที่สุดที่มีปุ่มถูกกดอยู่ในขณะนี้และไบต์ที่สำคัญที่สุด 4 ไบต์ไม่มีประโยชน์
ดังนั้น 7 บรรทัดแรกนั้นค่อนข้างง่ายเพราะพวกเขาเพียงกำหนดชื่อให้กับคอนโทรลเลอร์ 3 ตัวและตัวบ่งชี้เกม
บรรทัดที่ 8-20 ประกาศข้อมูลฐานสิบหกที่ใช้ในการตรวจสอบว่ามีการกดปุ่มใดบนคอนโทรลเลอร์ ค่าฐานสิบหกแต่ละค่าจะเปิดบิตแยกต่างหากในสตรีมข้อมูลดังนั้นวิธีที่คุณสามารถใช้การเลื่อนบิตเพื่อกำหนดว่ามีการกดปุ่มบางปุ่มหรือใช้บิตและ
ตัวแปร 'array' เป็นเพียงอาร์เรย์ของจำนวนเต็มที่มีความยาว 30 int วิธีนี้จะเก็บลำดับของการกดสำหรับเกม
'pos' เป็นตัวแปรตำแหน่ง เพิ่มเติมในภายหลัง
'timeForPress' คือระยะเวลาที่คุณต้องกดปุ่ม
ถัดไปคือวิธีการตั้งค่า () เราเริ่มต้นด้วยการสร้างเครื่องกำเนิดตัวเลขสุ่มแล้วตั้งค่าโหมดพินสำหรับแต่ละหมุด 2-9 ต่อไปเราจะเปิดการสื่อสารแบบอนุกรมเพื่อจุดประสงค์ในการดีบั๊กและตั้งค่าลำดับของปุ่มเป็น '4's ทั้งหมด ฉันทำสิ่งนี้ b / c ระบบการนับสำหรับ LEDs เพียงแค่ขึ้นไปที่ 3 ดังนั้น 4 จึงเป็นเพียงตัวยึดตำแหน่ง ตอนนี้เราตั้งค่า timeForPress เป็น 1,000 และเรียกใช้วิธี genSequence () ซึ่งเติมอาร์เรย์ของเราด้วยจำนวนเต็มแบบสุ่มระหว่าง 0 ถึง 3 (รวม) ต่อไปมันตั้งค่าตำแหน่งของเราเป็น 0 เพื่อแสดงว่ามันยังไม่เริ่มเกมและจากนั้นจะกะพริบตัวบ่งชี้เกมเพื่อแสดงว่าเกมกำลังจะเริ่มขึ้น
ขั้นตอนที่ 7: รหัสตอนที่ 2
ในขั้นตอนนี้ฉันจะกล่าวถึงวิธีที่ใช้ในการรับข้อมูลจากคอนโทรลเลอร์อย่างรวดเร็ว ฉันบอกคุณถึงทฤษฎีในขั้นตอนก่อนหน้า แต่ตอนนี้ฉันจะจัดโครงแบบการเรียกใช้งานจริง
ฉันคิดว่าฉันได้รหัสนี้เล็กน้อยจากคำสั่งนี้ ไม่แน่ใจทั้งหมด
มีสามวิธีที่ใช้ในการตรวจสอบอินพุตคอนโทรลเลอร์:
ปุ่ม ()
ไฟแฟลช ()
shiftin ()
ปุ่ม () วิธีแรกตั้งค่าตัวแปรส่งคืนและตัวนับสถานที่ จากนั้น strobe (โดยใช้ strobe ()) และป้อน for () ลูป ในการวนรอบมันจะอ่านและเก็บข้อมูลทีละหนึ่งบิตโดยใช้วิธีการ shiftin () และผู้ประกอบการระดับบิต
วิธี strobe () ค่อนข้างตรงไปตรงมา โดยทั่วไปเพียงแค่ตั้งค่า strobe pin เป็น HIGH จากนั้นกลับสู่ LOW ทันที เรื่องง่าย ๆ สิ่งนี้บอกให้คอนโทรลเลอร์เริ่มส่งข้อมูล
วิธี shiftin () อ่านข้อมูลจริง ใช้ข้อมูลจากดาต้าพินแล้วสลับพินนาฬิกาซึ่งบอกให้คอนโทรลเลอร์ส่งบิตถัดไป
ใช้เพียงสามวิธีเท่านั้นคุณสามารถอ่านสถานะของคอนโทรลเลอร์ได้ คุณไม่ควรเรียก strobe () หรือ shiftin () โดยตรง ในบันทึกย่อสุดท้ายเมื่อตรวจสอบเพื่อดูว่ามีการกดปุ่มคุณต้องใช้ตัวดำเนินการ 2 บิต เครื่องหมาย ~ (tilde) ไม่ใช่ค่าบิตและกลับค่าข้อมูลจากนั้นปุ่ม & จะตรวจสอบสถานะเทียบกับปุ่มใด ๆ ที่คุณต้องการกด
ขั้นตอนที่ 8: รหัสตอนที่ 3
นี่เป็นขั้นตอนสุดท้ายเกี่ยวกับรหัส ฉันเพิ่งจะเคลือบอย่างรวดเร็วเกี่ยวกับการทำงานของลูปเกมเนื่องจากมันควรจะง่ายต่อการติดตามสำหรับโปรแกรมเมอร์มือใหม่
วิธี loop () เริ่มต้นด้วยการพิมพ์สถานะของคอนโทรลเลอร์อย่างจริงจัง จากนั้นจะเล่นลำดับที่เก็บไว้ในอาร์เรย์จากนั้นตรวจสอบอินพุตของผู้ใช้ด้วยเมธอด readAndCheckInput ซึ่งเป็นหลักสำหรับลูปที่มีคำสั่ง if อยู่ หากคุณทำผิดพลาดมันจะหลุดออกจากลูปและทำสิ่งที่กระพริบตาก็จบลง
ฉันเดาว่านั่นหมายถึงการกวดวิชานี้จบแล้ว! หากคุณทำเกมเจ๋ง ๆ ได้โปรดแสดงความคิดเห็นและใส่รูปภาพเพราะฉันชอบที่จะเห็นพวกเขา!
โชคดี!