Ernst Sikora
Published © GPL3+

Calliope mini: Alarm mit Funk-Fernbedienung

Eine Erschütterung oder Bewegung des Calliope mini löst per Funk einen Alarm auf einem zweiten Calliope mini aus.

IntermediateFull instructions provided1 hour72
Calliope mini: Alarm mit Funk-Fernbedienung

Things used in this project

Hardware components

Calliope mini
Calliope mini
×2

Software apps and online services

MakeCode
Microsoft MakeCode

Story

Read more

Code

Calliope 1 - Programm

JavaScript
Aus MakeCode for calliope mini in der Ansicht "Javascript" herauskopiert.
control.onEvent(EventBusSource.MICROBIT_ID_ACCELEROMETER, EventBusValue.MES_ALERT_EVT_ALARM1, function () {
    while (alarm) {
        music.playTone(220, music.beat(BeatFraction.Half))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Whole))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Half))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Whole))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Half))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Half))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(262, music.beat(BeatFraction.Quarter))
        music.playTone(262, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(247, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(247, music.beat(BeatFraction.Quarter))
        music.playTone(247, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Eighth))
        music.rest(music.beat(BeatFraction.Sixteenth))
        music.playTone(220, music.beat(BeatFraction.Whole))
        music.rest(music.beat(BeatFraction.Breve))
    }
})
radio.onReceivedValue(function (name, value) {
    if (name == "alarmRes") {
        if (value == 1) {
            normalBeschleunigung = input.acceleration(Dimension.Strength)
            alarm = false
        }
    }
})
let intensitaet = 0
let normalBeschleunigung = 0
let alarm = false
alarm = false
normalBeschleunigung = input.acceleration(Dimension.Strength)
radio.setTransmitPower(7)
radio.setGroup(169)
music.setTempo(50)
basic.forever(function () {
    radio.sendValue("watchdog", 1)
    if (Math.abs(normalBeschleunigung - input.acceleration(Dimension.Strength)) > 100) {
        if (!(alarm)) {
            alarm = true
            control.raiseEvent(
            EventBusSource.MICROBIT_ID_ACCELEROMETER,
            EventBusValue.MES_ALERT_EVT_ALARM1
            )
        }
        radio.sendValue("beschl", 1)
    }
    intensitaet = randint(120, 255)
    if (alarm) {
        basic.setLedColor(0xff0000)
        basic.pause(100)
        basic.setLedColor(0x007fff)
        basic.pause(100)
    } else {
        basic.setLedColor(basic.rgbw(
        intensitaet,
        intensitaet / 2,
        intensitaet / 3,
        0
        ))
        basic.pause(randint(50, 120))
    }
})

Calliope 2 - Programm

JavaScript
Aus MakeCode for calliope mini in der Ansicht "Javascript" herauskopiert.
input.onButtonPressed(Button.A, function () {
    if (alarm) {
        alarmMute = true
        for (let index = 0; index < 5; index++) {
            radio.sendValue("alarmRes", 1)
            alarm = false
            basic.pause(100)
        }
        alarmMute = false
    }
})
control.onEvent(EventBusSource.MICROBIT_ID_RADIO, EventBusValue.MES_ALERT_EVT_ALARM1, function () {
    while (alarm) {
        music.playTone(262, music.beat(BeatFraction.Quarter))
        music.playTone(330, music.beat(BeatFraction.Quarter))
        music.playTone(392, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Quarter))
    }
})
radio.onReceivedValue(function (name, value) {
    if (name == "watchdog") {
        if (value == 1) {
            watchdogZeit = input.runningTime()
        }
    }
    if (name == "beschl") {
        if (value == 1) {
            if (!(alarm && !(alarmMute))) {
                alarm = true
                control.raiseEvent(
                EventBusSource.MICROBIT_ID_RADIO,
                EventBusValue.MES_ALERT_EVT_ALARM1
                )
            }
        }
    }
})
let alarmMute = false
let alarm = false
let watchdogZeit = 0
watchdogZeit = -10000
let warnung = true
alarm = false
alarmMute = false
radio.setTransmitPower(7)
radio.setGroup(169)
music.setTempo(120)
basic.forever(function () {
    if (Math.abs(input.runningTime() - watchdogZeit) <= 1000) {
        images.createImage(`
            # . # . #
            . # # # .
            . . # . .
            . . # . .
            . . # . .
            `).showImage(0)
        warnung = false
    } else {
        images.createImage(`
            # . . . #
            . # . # .
            . . # . .
            . # . # .
            # . . . #
            `).showImage(0)
        warnung = true
    }
    basic.pause(500)
})
control.inBackground(function () {
    while (true) {
        if (alarm) {
            basic.setLedColor(0xff0000)
            basic.pause(100)
            basic.setLedColor(0x007fff)
            basic.pause(100)
        } else {
            if (warnung) {
                basic.setLedColor(0xff8000)
                basic.pause(100)
                basic.turnRgbLedOff()
                basic.pause(500)
            } else {
                basic.setLedColor(0x00ff00)
                basic.pause(100)
                basic.turnRgbLedOff()
                basic.pause(1000)
            }
        }
    }
})

Credits

Ernst Sikora
8 projects • 16 followers
I am working as a system engineer for embedded systems. One of my hobbies is to build usable devices based on the Arduino platform.

Comments