บทเพลง Arduino Mario Bros. : 4 ขั้นตอน

บทเพลง Arduino Mario Bros. : 4 ขั้นตอน

สารบัญ:

Anonim

เกิดอะไรขึ้นในโครงการนี้เราจะสร้าง SUPER MARIO BROS ที่มีชื่อเสียงอีกครั้ง บทเพลง!!!! เราจะทำสิ่งนี้โดยใช้ arduino และลำโพง piezo ขอให้สนุก!

วัสดุ:

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ

สำหรับโครงการนี้คุณจะต้อง:

อาร์ดิโน

สายจัมเปอร์

คลิปจระเข้

arduino piezo - ลำโพง

แผ่นขนมปัง (ไม่จำเป็น)

Your A - GAME

หมายเหตุ: ฉันจะไม่ใช้ขนมปังในโครงการนี้

ขั้นตอนที่ 2: ตั้งค่า

ใน Arduino ของคุณคุณจะต้องแนบปลายด้านหนึ่งของจัมเปอร์หนึ่งไปยัง D3 และอีกปลายหนึ่งของอีกด้านกับกราวด์ (GND)

จากนั้นใช้คลิปจระเข้ของคุณ คลิปปลายด้านหนึ่งของแต่ละคลิปไปที่ปลายอีกด้านหนึ่งของจัมเปอร์ D3 หรือจัมเปอร์ GND

อีกด้านหนึ่งของคลิปจระเข้ที่เชื่อมต่อ GND จะถูกตัดเข้าไปที่ด้านขวาของส่วนเงินซึ่งอยู่ที่ด้านล่างของลำโพง (ดังที่เห็นในภาพที่มีให้) และปลายอีกด้านของ D3 - คลิปที่เชื่อมต่อทางด้านซ้าย ส่วนเงิน

จากนั้นเสียบ arduino ของคุณเข้ากับคอมพิวเตอร์เปิด arduino IDE และเตรียมพร้อมโค้ด!

ขั้นตอนที่ 3: การเข้ารหัส

/*

Arduino Mario Bros Tunes ด้วย Piezo Buzzer และ PWM เชื่อมต่อด้านบวกของ Buzzer เพื่อพิน 3 จากนั้นด้านลบไปยังตัวต้านทาน 1k ohm เชื่อมต่อด้านอื่น ๆ ของตัวต้านทาน 1 k ohm กับขากราวด์ (GND) บน Arduino โดย: Dipto Pratyaksa อัพเดตครั้งล่าสุด: 31/3/13 * / / ************************************* ************** * ค่าคงที่สาธารณะ *********************************** **************** / #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_F1 44 #define NOTE_F1 44 #define NOTE_F1 44 # กำหนด NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 # กำหนด NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_D2 73 #define NOTE_D2 73 #define NOTE_G2 49 #define NOTE_G1 49 #define NOTE_G1 49 #define NOTE_G1 49 #define NOTE_G1 49 #define หมายเหตุ 98 # กำหนด NOTE_GS2 104 # กำหนด NOTE_A2 110 # กำหนด NOTE_AS2 117 # กำหนด NOTE_B2 123 # กำหนด Define NOTE_C3 131 # กำหนดกำหนด NOTE_CS3 156 #define NOTE_DS3 156 #define NOTE_DS3 156 #define NOTE_E3 กำหนด NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 # กำหนด NOTE_CS4 277 # กำหนด NOTE_D4 294 #define NOTE_D4 291 # 0 # กำหนด NOTE_F4 349 # กำหนด NOTE_FS4 370 # กำหนด NOTE_G4 392 # กำหนด NOTE_GS4 415 # กำหนด NOTE_A4 440 # กำหนดกำหนด NOTE_AS4 466 # กำหนดนิยาม NOTE_B4 494 # กำหนดกำหนด NOTE_4 559 # กำหนด NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 # 6ddine 11d6ddine # 116 116 # 11dine Dine 9_D5 1032 # 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_C6 2593 #define NOTE_C6 1568 #define NOTE_C6 1568 #define NOTE_C6 1568 #define NOTE_G6 1568 #define NOTE_AS6 1865 #define NOTE_C6 2268 #define NOTE_A6 กำหนด NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 # Define NOTE_C8 4186 # กำหนด lodyPin 3 // ธีมหลักมาริโอเมโลดี้ int melody = {NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_G7, NOTE_A7, 0, NOTE_7, 0, NOTE_F7 NOTE_D7, NOTE_B6, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_A6, 0, NOTE_G6, NOTE_G6, NOTE_G6, 0, NOTE_G6, 0, NOTE_G6, 0, 0 NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0}; // มาริโอหลักพวกเขาจังหวะจังหวะ = {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,}; // Underworld เมโลดี้ int underworld_melody = {NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_C4, NOTE_A3, NOTE_A4, NOTE_AS4, NOTE_A4, NOTE_A4, NOTE_A3, หมายเหตุ NOTE_AS4, NOTE_A4, NOTE_GS4, NOTE_DS4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_GS3, 0, 0, 0}; // Underwolrd tempo int underworld_tempo = {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 6, 18, 18, 18, 18, 6, 6, 6, 6, 6, 6, 6, 18, 18, 18, 18 18, 18, 10, 10, 10, 10, 10, 10, 3, 3, 3}; void setup (void) {pinMode (3, OUTPUT); // buzzer pinMode (13, OUTPUT); // ตัวบ่งชี้ที่นำเมื่อร้องเพลงโน้ต} void loop () {// ร้องเพลงร้องเพลง (1); ร้องเพลง (1); ร้องเพลง (2); } int song = 0; void sing (int s) {// ย้ำเหนือโน้ตของทำนองเพลง: song = s; if (song == 2) {Serial.println ("'ธีม Underworld'"); int size = sizeof (underworld_melody) / sizeof (int); สำหรับ (int thisNote = 0; thisNote <size; thisNote ++) {// เพื่อคำนวณระยะเวลาบันทึกย่อใช้เวลาหนึ่งวินาที // หารด้วยประเภทบันทึก //เช่น. บันทึกประจำไตรมาส = 1,000/4, โน้ตที่แปด = 1,000/8, ฯลฯ int noteDuration = 1000 / อันเดอร์เวิร์ล _ เทมโป นี่หมายเหตุ buzz (melodyPin, underworld_melody thisNote, noteDuration); // เพื่อแยกบันทึกย่อให้ตั้งเวลาน้อยที่สุดระหว่างกัน // ระยะเวลาของบันทึก + 30% ดูเหมือนว่าจะทำงานได้ดี: int pauseBetweenNotes = noteDuration * 1.30; ล่าช้า (pauseBetweenNotes); // หยุดการเล่นเสียง: buzz (melodyPin, 0, noteDuration); }} else {Serial.println ("'Mario Theme'"); int size = sizeof (ทำนอง) / sizeof (int); สำหรับ (int thisNote = 0; thisNote <size; thisNote ++) {// เพื่อคำนวณระยะเวลาบันทึกย่อใช้เวลาหนึ่งวินาที // หารด้วยประเภทบันทึก //เช่น. บันทึกประจำไตรมาส = 1,000/4, โน้ตที่แปด = 1000/8, ฯลฯ int noteDuration = 1000 / จังหวะ thisNote; buzz (melodyPin, melody thisNote, noteDuration); // เพื่อแยกบันทึกย่อให้ตั้งเวลาน้อยที่สุดระหว่างกัน // ระยะเวลาของบันทึก + 30% ดูเหมือนว่าจะทำงานได้ดี: int pauseBetweenNotes = noteDuration * 1.30; ล่าช้า (pauseBetweenNotes); // หยุดการเล่นเสียง: buzz (melodyPin, 0, noteDuration); }}} void buzz (int targetPin, long frequency, long length) {digitalWrite (13, HIGH); long delayValue = 1000000 / ความถี่ / 2; // คำนวณค่าความล่าช้าระหว่างช่วงการเปลี่ยนภาพ //// มูลค่า 1 วินาทีของ microseconds หารด้วยความถี่จากนั้นแบ่งครึ่งตั้งแต่ //// มีสองเฟสในแต่ละวงจร numCycles = ความถี่ * ความยาว / 1,000; // คำนวณจำนวนรอบสำหรับการจับเวลาที่เหมาะสม //// ความถี่ทวีคูณซึ่งเป็นวัฏจักรจริงต่อวินาทีโดยจำนวนวินาทีถึง //// ได้รับจำนวนรอบทั้งหมดเพื่อผลิต (ยาว i = 0; i <numCycles; i ++) {// สำหรับระยะเวลาที่คำนวณได้ … digitalWrite (targetPin, HIGH); // เขียนเสียงกริ่งสูงเพื่อดัน diaphram delayMicroseconds (delayValue); // รอการคำนวณค่าความล่าช้า digitalWrite (targetPin, LOW); // เขียนเสียงกริ่งขาต่ำเพื่อดึง diaphram delayMicroseconds (delayValue); // รออีกครั้งหรือค่าความล่าช้าในการคำนวณ} digitalWrite (13, LOW); }

หมายเหตุ: ในรหัสด้านบน LED กำลังถูกใช้คุณสามารถทำได้เช่นกันหากคุณต้องการ

ขั้นตอนที่ 4: เสร็จสิ้น !!

ว้าวคุณทำได้แล้ว !! ให้ตบเบา ๆ ด้วยตัวคุณเองที่ด้านหลังและเพลิดเพลินกับซาวด์แทร็กของมาริโอ