Ir para conteúdo
3DFinder
Entrar

Você está no 3DFinder

Buscamos em Thingiverse, MakerWorld e Printables ao mesmo tempo para te dar o melhor de cada uma.

Buscar mais como este
Modelo 3D BBC MICRO:BIT Morse code walkie talkies por cadin no Printables

Descrição

Video of it in action [https://docs.google.com/presentation/d/1tPr8-Wlly2cKCD7v7oQrFnrQZWnOcuxOu6znksW3VAs/edit?usp=sharing](https://docs.google.com/presentation/d/1tPr8-Wlly2cKCD7v7oQrFnrQZWnOcuxOu6znksW3VAs/edit?usp=sharing)

Also, sadly, you can only do one letter at a time. I tried to do multiple, but the CPU went from cold to blistering hot in a matter of seconds. I am working on an update to send numerous letters at once

Parts:

Micro: bit

Case (included in files): Case Remixed From [https://www.printables.com/model/319713-bbc-microbit-v2-case](https://www.printables.com/model/319713-bbc-microbit-v2-case)

power 

: link to get the micro bit and a battery pack [https://www.elexp.com/collections/microbit/products/01microbitgomicro-bit-board-go-kit](https://www.elexp.com/collections/microbit/products/01microbitgomicro-bit-board-go-kit)

First, unbox everything and make sure all packaging is taken off

Then put the Micro: Bit into the bottom casing

Then, put the top Piece of the casing on. It should snap in place. But you might have to shimmy it

Then plug it into your computer via USB and go to [https://makecode.microbit.org/](https://makecode.microbit.org/) 

Then sign in and make a new project and name it anything you want, and click on JavaScript tape and delete anything already in there so it's blank

Then make sure your Micro: Bit is connected and copy and paste this code into the blank JavaScript editor

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")
        }
    }
})

Then click download, and then wait until it says it's done downloading, and unplug your micro bit from your pc

YOUR DONE now, all you do is make as many as you want, and start talking in ideal conditions, you can reach 70 meters (230 feet) 

A button (.)

B button (-)

The logo touch sensor has a secret: you click it to turn it on, and you hold it to turn it off

It has a startup melody

It has channels hold both the A and B button for 5 seconds until you hear a tone ( there will be a light that blink 5 times) then you can selct a chanel it start a 0 and goes to 45 the Hold the A and B button again for 5 seconds( another blinking light) and it will selct the channel show a cheack mark then your on the new chanel 

It does make beeps when you click the A and B buttons, and when holding both buttons 

Hope you enjoy, I think there a lot of fun to use 

P.S. I made this for a school Project 

(Updates Coming Soon)

Printables

BBC MICRO:BIT Morse code walkie talkies

Publicado em 13 de dez de 2025

7
Curtidas
3
Downloads
Categoria Other Gadgets
Tags
gadget microbit walkietalkie morsecode
Licença Creative Commons — Attribution — Noncommercial — Share Alike
Arquivos (1)
MicroBit Case.stl 491.9 KB
Ver no Printables (abre em nova aba)

Gostou deste modelo? Crie uma conta grátis para salvar seus favoritos e voltar a eles depois.

Criar conta