Bài 10: Đàn Piano trái cây - MakerEdu Inventor Kit for Micro:bit

From MakerLab Wiki
Jump to navigation Jump to search

Mô tả dự án

Trong bài này bạn sẽ sử dụng lá cây để làm các phím đàn, kết hợp với "còi báo" tích hợp sẵn trên mạch Micro:bit để là một chiếc đàn piano mini.

... hình thumnail

Các bước thực hiện

Danh sách thiết bị

  • 1x Cáp MicroUSB.
  • 1x Bo mạch Micro:Bit.
  • 4x Dây kẹp cá sấu
Icon-Info-White.png Chú ý:
...
  • Dùng 3 dây kẹp cá sấu kết nối giữa lá cây với các chân P0, P1, P2.
  • Và 1 dây kẹp cá sấu kết với chân GND, đầu dây còn lại để bạn cầm.
  • Điều này giúp tạo thành 1 vòng mạch điện kín cho Micro:bit mỗi khi tay bạn chạm vào lá cây.

Chuẩn bị trước dự án

Các bước thực hiện

  1. Tạo một dự án mới trong phần mềm MakeCode.
  2. Bạn có thể lập trình kéo thả từng mã khối theo hình dưới trong mục [Blocks] hoặc copy đoạn code dưới và paste vào mục [JavaScript] để tiến hành nhanh hơn.
  3. Nạp chương trình vào Micro:Bit.

Blocks

Microbit V2 Go Bai 6.png

Javascript

// Khối "Button 0" - do người dùng tạo
function Button_0() {
  if (input.pinIsPressed(TouchPin.P0)) {
    line0 = 0
  } else {
    line0 = 1
  }
}

// Khối "Button 1" - do người dùng tạo
function Button_1() {
  if (input.pinIsPressed(TouchPin.P1)) {
    line1 = 0
  } else {
    line1 = 1
  }
}

// Khối "Button 2" - do người dùng tạo
function Button_2() {
  if (input.pinIsPressed(TouchPin.P2)) {
    line2 = 0
  } else {
    line2 = 1
  }
}

// Khối "play music notes" - do người dùng tạo
function play_music_notes() {
  if (line2 && (line1 && !(line0))) {
    music.ringTone(262)
  } else if (line2 && (!(line1) && line0)) {
    music.ringTone(294)
  } else if (line2 && (!(line1) && !(line0))) {
    music.ringTone(330)
  } else if (!(line2) && (line1 && line0)) {
    music.ringTone(349)
  } else if (!(line2) && (line1 && !(line0))) {
    music.ringTone(392)
  } else if (!(line2) && (!(line1) && line0)) {
    music.ringTone(440)
  } else if (!(line2) && (!(line1) && !(line0))) {
    music.ringTone(494)
  } else {
    music.stopAllSounds()
  }
}

// Khai báo các biến
let line2 = 0
let line1 = 0
let line0 = 0

// Khối "on start" - thực hiện 1 lần khi khởi động
music.setVolume(255)
basic.showIcon(IconNames.EighthNote)

// Khối "forever" - vòng lặp chính của chương trình
basic.forever(function () {
  Button_0()
  Button_1()
  Button_2()
  play_music_notes()
})

Giải thích code

Chương trình hoạt động:

Trong khối [ on start ].

  1. Đầu tiên bo mạch sẽ bật âm lượng còi lên mức cao nhất qua khối [ set volume "255" ].
  2. Và cho hiển thị kí hiệu 🎼.

Phần khởi động này để chúng ta biết chương trình đã sẵn sàng.

Trong khối [ forever ].

  • Thực hiện lệnh gọi tuần tự các khối do người dùng tạo.
  • Đầu tiên là khối "Button_0", đến "Button_1", "Button_2".
  • Cuối cùng là khối "play_music_notes" và cứ thế lặp lại.

Vai trò của nhóm các khối [ function "Button_..." ]:

Trong khối "Button_0".

  • Đọc giá trị Digital từ chân P0.
  • Nếu phát hiện chân đang được nhấn, hay chạm → biến "line0" được đặt thành 0.
  • Ngược lại, biến "line0" đặt thành 1.

Chức năng này cũng tương tự với các khối "Button_1" cho chân P1"Button_2" cho chân P2.

Chân Biến Đang nhấn Không nhấn
P0 line0 0 1
P1 line1 0 1
P2 line2 0 1

Vai trò của khối [ function "play_music_notes" ]:

Dựa theo giá trị hiện tại của các biến "line0", "line1", "line2" chương trình sẽ ra quyết định.

  • Phát ra note nhạc nào bằng khối [ ring tone (Hz)... ].
  • Hoặc dừng phát nhạc bằng khối [ stop all sounds ].
line0 line1 line2 Còi
nhấn . . Đồ - [ C ]
. nhấn . Rê - [ D ]
nhấn . . Mi - [ E ]
. nhấn nhấn Fa - [ F ]
nhấn nhấn . Sol - [ G ]
nhấn . nhấn La - [ A ]
nhấn nhấn nhấn Si - [ B ]
. . . Dừng phát nhạc

Kết quả

...

... hình dự án