Bỏ qua, tới nội dung chính
F3D
Bộ đàm mã Morse BBC MICRO:BIT 1

4 hình

Dụng Cụ Tiện Ích

Bộ đàm mã Morse BBC MICRO:BIT

Remix từ Vỏ Case cho BBC Micro:Bit V2 Tác giả Udenjpg

Tác giả cadin_3801868

Lượt tải
1
Lượt thích
2
Lượt coi
19

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.

Mở Studio

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ó:

Đầ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)

Coi thêm Ẩn bớ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

0 bình luận

Coi tất cả