Mục tiêu và dụng cụ
Trong hoạt động này, một micro:bit gửi các dấu chấm và gạch bằng sóng vô tuyến; micro:bit còn lại ghép chúng thành ký tự mã Morse và hiển thị trên màn hình LED. Cách làm giúp học sinh phân biệt tín hiệu được truyền đi với thông điệp được giải mã.
Chuẩn bị hai micro:bit có nguồn điện và máy tính để lập trình bằng Microsoft MakeCode. Hai thiết bị sẽ dùng cùng một chương trình: thiết bị được bấm nút là máy gửi, thiết bị còn lại là máy nhận.
Thống nhất quy ước trước khi gửi
Bấm A để gửi dấu chấm (.), bấm B để gửi dấu gạch (-), rồi bấm đồng thời A+B để báo kết thúc một chữ cái. Sau khi kết thúc chữ cái, bấm A+B thêm một lần nếu muốn tạo khoảng cách giữa hai từ.
Ví dụ, SOS được viết là … — …: bấm A ba lần rồi A+B; bấm B ba lần rồi A+B; cuối cùng bấm A ba lần rồi A+B. Thử truyền chậm, đợi chữ vừa giải mã xuất hiện trên màn hình trước khi bắt đầu chữ tiếp theo.
Lập trình hai micro:bit
Trong MakeCode, tạo một dự án cho micro:bit, chuyển sang chế độ JavaScript và nhập chương trình dưới đây. Tải cùng chương trình vào cả hai thiết bị. Lệnh radio.setGroup(42) đặt chúng vào cùng một nhóm vô tuyến; nếu đổi số nhóm, hãy đổi giống nhau trên cả hai.
let code = ""
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let patterns = [
".-", "-…", "-.-.", "-..", ".", "..-.", "–.", "….", "..", ".—",
"-.-", ".-..", "–", "-.", "—", ".–.", "–.-", ".-.", "…", "-",
"..-", "…-", ".–", "-..-", "-.–", "–..",
"—–", ".—-", "..—", "…–", "….-", "…..", "-….", "–…", "—..", "—-."
]
radio.setGroup(42)
input.onButtonPressed(Button.A, function () {
radio.sendString(".")
})
input.onButtonPressed(Button.B, function () {
radio.sendString("-")
})
input.onButtonPressed(Button.AB, function () {
radio.sendString("/")
})
radio.onReceivedString(function (message) {
if (message == "." || message == "-") {
code += message
} else if (message == "/") {
if (code.length > 0) {
let position = patterns.indexOf(code)
basic.showString(position >= 0 ? alphabet.charAt(position) : "?")
code = ""
} else {
basic.clearScreen()
basic.pause(300)
}
}
})
Mỗi lần bấm nút, máy gửi truyền một chuỗi ngắn. Máy nhận giữ các dấu chấm, gạch trong biến code cho đến khi nhận dấu kết thúc (/), rồi tìm mẫu tương ứng để hiển thị chữ hoặc số. Nếu không tìm thấy mẫu, màn hình hiện dấu hỏi.
Tiến hành truyền một thông điệp
Cấp nguồn cho cả hai micro:bit và đặt chúng gần nhau để bắt đầu. Chọn một thiết bị làm máy gửi; không bấm nút trên máy nhận. Trước tiên, gửi chữ A bằng cách bấm A, B, rồi A+B. Máy nhận sẽ hiển thị A.
Tiếp theo, gửi SOS theo quy ước ở trên. Muốn tách hai từ, sau khi bấm A+B để kết thúc chữ cuối của từ thứ nhất, hãy bấm A+B lần nữa. Chương trình dùng thao tác này để xóa màn hình, báo hiệu khoảng cách từ; nó không lưu cả câu để đọc lại.
Kiểm tra và xử lý lỗi thường gặp
Nếu máy nhận không hiện ký tự, hãy kiểm tra cả hai thiết bị đã được nạp chương trình, được cấp nguồn và dùng cùng số nhóm vô tuyến. Sau đó thử lại với chữ E: bấm A rồi A+B.
Nếu màn hình hiện dấu hỏi, hãy đối chiếu thứ tự chấm, gạch với bảng mã Morse và kiểm tra đã bấm A+B đúng lúc. Nếu bấm nhầm khi đang gửi một chữ, hãy đợi ký tự sai xuất hiện rồi gửi lại chữ đó; chương trình mẫu không có chức năng xóa một tín hiệu vừa gửi.
Thảo luận và mở rộng
Cho hai học sinh luân phiên làm người gửi và người nhận. Trước khi bấm nút, người gửi viết thông điệp thành các nhóm chấm, gạch; người nhận ghi lại ký tự quan sát được và so sánh với thông điệp ban đầu.
Chương trình mẫu giải mã A–Z và các chữ số 0–9, chưa xử lý dấu tiếng Việt hoặc dấu câu. Để mở rộng, học sinh có thể bổ sung một tín hiệu báo bắt đầu thông điệp, thiết kế cách sửa ký tự bấm nhầm, hoặc lưu các chữ đã nhận để hiển thị cả câu.

