
Bộ đàm mã Morse BBC MICRO:BIT
Remix từ Vỏ Case cho BBC Micro:Bit V2 Tác giả Udenjpg
- Lượt tải
- 1
- Lượt thích
- 2
- Lượt coi
- 19
- Bản remix
- 0
- Bình luận
- 0
File 1 491,9 KB
- MicroBit Case.stlSTL · 491,9 KB
Tạo biến thể bằng AI
Dựng một phiên bản khác của mẫu này.
Thông tin
- Mã mẫu
- #167923
- Danh mục
- Dụng Cụ Tiện Ích
- Ngày đăng
Mô tả
Video hoạt động đây nha: https://docs.google.com/presentation/d/1tPr8-Wlly2cKCD7v7oQrFnrQZWnOcuxOu6znksW3VAs/edit?usp=sharing
Bù lại, cái này hơi buồn là mình chỉ gửi được từng ký tự một thôi nha. Mình có thử gửi nhiều ký tự cùng lúc mà CPU nó nóng ran lên trong tích tắc luôn. Mình đang cố gắng cập nhật để gửi được nhiều ký tự cùng lúc nè.
Phần cứng cần có:
-
Micro: bit
-
Vỏ case (có sẵn trong file): Vỏ được remixed từ https://www.f3d.vn/3d-model/167917-vo-case-cho-bbc-microbit-v2
-
Nguồn:
- Link mua micro:bit và pin nè: https://www.elexp.com/collections/microbit/products/01microbitgomicro-bit-board-go-kit
Đầu tiên, mở hộp hết ra và gỡ hết mấy cái bao bì nha.
Sau đó, gắn Micro: Bit vô cái vỏ dưới nè.



Tiếp theo, gắn cái miếng vỏ trên vô. Nó sẽ khớp vô chỗ cũ. Nhưng mà có thể bạn sẽ phải lắc lắc chút.

Rồi cắm vô máy tính qua USB và truy cập https://makecode.microbit.org/
Sau đó đăng nhập và tạo một dự án mới, đặt tên tùy thích, rồi bấm qua tab JavaScript và xóa hết mọi thứ có sẵn trong đó cho nó trống trơn nha.

Rồi đảm bảo Micro: Bit của bạn đã kết nối, copy và paste cái code này vô trình soạn thảo JavaScript trống nha:
input.onLogoEvent(TouchButtonEvent.LongPressed, function () {
basic.clearScreen()
})
// --- Button A: Dot OR Channel Down ---
input.onButtonPressed(Button.A, function () {
if (holdCount > 0) {
return
}
if (isConfiguring) {
// --- CHANNEL MODE ---
radioGroup += 0 - 1
if (radioGroup < 0) {
radioGroup = 0
}
basic.clearScreen()
basic.showNumber(radioGroup)
} else {
// --- MORSE MODE ---
_symbol = "."
// 1. Send Signal IMMEDIATELY (Before sound)
radio.sendString(_symbol)
// 2. Play Sound (Fast Sixteenth beat prevents radio blocking)
music.playTone(523, music.beat(BeatFraction.Sixteenth))
currentMorseCode = "" + currentMorseCode + _symbol
letterTimeout = 0
basic.showString(_symbol)
}
})
// --- Radio Receive ---
radio.onReceivedString(function (receivedString) {
if (isConfiguring) {
return
}
// Play short beep for feedback
music.playTone(600, music.beat(BeatFraction.Sixteenth))
currentMorseCode = "" + currentMorseCode + receivedString
letterTimeout = 0
basic.showString(receivedString)
})
// --- Button B: Dash OR Channel Up ---
input.onButtonPressed(Button.B, function () {
if (holdCount > 0) {
return
}
if (isConfiguring) {
// --- CHANNEL MODE ---
radioGroup += 1
if (radioGroup > 45) {
radioGroup = 45
}
basic.clearScreen()
basic.showNumber(radioGroup)
} else {
// --- MORSE MODE ---
symbol2 = "-"
// 1. Send Signal IMMEDIATELY
radio.sendString(symbol2)
// 2. Play Sound (Fast Sixteenth beat prevents radio blocking)
music.playTone(784, music.beat(BeatFraction.Sixteenth))
currentMorseCode = "" + currentMorseCode + symbol2
letterTimeout = 0
basic.showString(symbol2)
}
})
input.onLogoEvent(TouchButtonEvent.Pressed, function () {
basic.showLeds(
.
# .
# .
.
# .
# .
# . . .
#
.
# #
# .
. . . . .
)
})
let decodedLetter = 0
let found = 0
let symbol2 = ""
let letterTimeout = 0
let currentMorseCode = ""
let _symbol = ""
let isConfiguring = false
let holdCount = 0
let radioGroup = 0
music.play(music.stringPlayable("C D E F G A B C5 ", 150), music.PlaybackMode.UntilDone)
// --- Setup ---
radio.setGroup(radioGroup)
//
*** NEW: Set Transmit Power to MAX (0-7)
***
radio.setTransmitPower(7)
basic.showString("READY")
const MORSE_MAP: any = {
".-": "A", "-...": "B", "-.-.": "C", "-..": "D", ".": "E",
"..-.": "F", "--.": "G", "....": "H", "..": "I", ".---": "J",
"-.-": "K", ".-..": "L", "--": "M", "-.": "N", "---": "O",
".--.": "P", "--.-": "Q", ".-.": "R", "...": "S", "-": "T",
"..-": "U", "...-": "V", ".--": "W", "-..-": "X", "-.--": "Y",
"--..": "Z", "-----": "0", ".----": "1", "..---": "2", "...--": "3",
"....-": "4", ".....": "5", "-....": "6", "--...": "7", "---..": "8",
"----.": "9",
// Compatibility for special characters
"•-": "A", "•": "E"
}
// --- Main Loop (Handles 5s Hold & Timeout) ---
loops.everyInterval(100, function () {
// --- 1. CHECK FOR HOLDING A+B (For 5 Seconds) ---
if (input.buttonIsPressed(Button.AB)) {
holdCount += 1
// Visual indicator
if (holdCount % 5 == 0) {
led.toggle(2, 2)
}
// 50 ticks = 5 Seconds
if (holdCount >= 50) {
holdCount = 0
isConfiguring = !(isConfiguring)
basic.clearScreen()
if (isConfiguring) {
// --- ENTERED CHANNEL MODE ---
music.playTone(988, music.beat(BeatFraction.Half))
basic.showString("CH")
basic.showNumber(radioGroup)
} else {
// --- EXITED & SAVED ---
radio.setGroup(radioGroup)
//
*** RE-APPLY POWER SETTING JUST IN CASE
***
radio.setTransmitPower(7)
music.playTone(262, music.beat(BeatFraction.Half))
basic.showIcon(IconNames.Yes)
basic.pause(500)
basic.showString("READY")
currentMorseCode = ""
}
}
} else {
holdCount = 0
}
// --- 2. MORSE DECODING TIMEOUT ---
if (!(isConfiguring) && holdCount == 0) {
if (currentMorseCode.length > 0) {
letterTimeout += 1
}
// If user stops typing for 5 seconds (50 ticks), decode
if (letterTimeout >= 50) {
letterTimeout = 0
// --- FIX FOR LINE 125 ERROR ---
// Because MORSE_MAP is 'any', this will now work without error
found = MORSE_MAP[currentMorseCode]
if (found) {
decodedLetter = found
basic.showString("" + (decodedLetter))
} else {
basic.showString("?")
}
currentMorseCode = ""
basic.pause(500)
basic.showString("READY")
}
}
})
Rồi bấm download, đợi nó báo tải xong thì rút micro:bit ra khỏi máy tính nha.
XONG RỒI đó nha, giờ chỉ cần làm thêm cái nữa rồi bắt đầu nói chuyện thôi. Trong điều kiện lý tưởng, bạn có thể liên lạc xa tới
70 mét đó nha.
Nút A (chấm .)
Nút B (gạch -)
Cảm biến logo có một bí mật nho nhỏ nè: bạn bấm để bật, và bạn giữ để tắt nha
Nó có nhạc hiệu lúc khởi động nữa đó nha
Nó có kênh nữa, bạn giữ cả nút A và B trong 5 giây cho đến khi nghe thấy tiếng tút (sẽ có đèn nhấp nháy 5 lần) rồi bạn có thể chọn kênh, nó bắt đầu từ 0 và đi tới 45. Rồi giữ cả nút A và B thêm 5 giây nữa (lại nhấp nháy đèn nữa) thì nó sẽ chọn kênh, hiển thị dấu tích rồi bạn đã ở kênh mới
Nó có phát ra tiếng bíp khi bạn bấm nút A và B, và khi giữ cả hai nút luôn nha
Chúc bạn chơi vui vẻ nha, mình thấy cái này vui lắm luôn
Tái bút: Mình làm cái này cho bài tập ở trường đó nha
(Cập nhật sắp ra mắt)
Thông số in
- Định dạng
- stl
- Số file mô hình
- 1
- Tổng dung lượng
- 491,9 KB
- File lớn nhất
- 491,9 KB












