sparkfun / pxt-gamer-bit

SparkFun gamer:bit package for Microsoft MakeCode - beta
https://makecode.microbit.org/pkg/sparkfun/pxt-gamer-bit
MIT License
4 stars 13 forks source link
microbit pxt sparkfun

gamer:bit

SparkFun Gamer:bit

The package adds support for the controller:bit and gamer:bit add-on board from SparkFun.

To use this package, go to https://makecode.microbit.org, click Add package and search for gamerbit.

~ hint

This package is still under development and subject to changes.

~

Usage

Pin names

The micro:bit pins are named to match gamepad functions:

The button pins are automatically configured as pull-up when using the package.

Reading button states

Use the logical plug-in blocks to read if the button is pressed.

if (gamerbit.isPressed(GamerBitPin.P0)) {
    led.plot(0, 0)
} else {
    led.unplot(0, 0)
}

Example turns on LED when button is pressed

Button events

Custom code can be run when a button event happens.

They can be triggered on:

gamerbit.onEvent(GamerBitPin.P0, GamerBitEvent.Down, () => {
    led.plot(0, 0)
})
gamerbit.onEvent(GamerBitPin.P0, GamerBitEvent.Up, () => {
    led.unplot(0, 0)
})

Example turns on LED when button is pressed

Examples

Example: Remote controlled a microservo

This program uses the left, right, up buttons and sends the servo angle over radio.

// gamer:bit code
gamerbit.onEvent(GamerBitPin.P0, GamerBitEvent.Down, () => {
    // go straight
    radio.sendNumber(90)
});
gamerbit.onEvent(GamerBitPin.P1, GamerBitEvent.Down, () => {
    // turn left
    radio.sendNumber(45)
});
gamerbit.onEvent(GamerBitPin.P2, GamerBitEvent.Down, () => {
    // turn right
    radio.sendNumber(135)
});

// robot code
radio.onDataPacketReceived( ({ receivedNumber }) =>  {
    pins.servoWritePin(AnalogPin.P0, receivedNumber)
})

Example: Sending a packet of data over wireless

The following program creates a bit field from the state of the buttons on the gamer:bit and sends it with the radio. This is meant to be decoded with the moto:bit example to make a simple RC robot.

let packet = 0
basic.forever(() => {
    packet = 0
    if (gamerbit.isPressed(GamerBitPin.P0)) {
        led.plot(1, 0)
        packet = packet + 128
    } else {
        led.unplot(1, 0)
    }
    if (gamerbit.isPressed(GamerBitPin.P1)) {
        led.plot(0, 1)
        packet = packet + 64
    } else {
        led.unplot(0, 1)
    }
    if (gamerbit.isPressed(GamerBitPin.P2)) {
        led.plot(2, 1)
        packet = packet + 32
    } else {
        led.unplot(2, 1)
    }
    if (gamerbit.isPressed(GamerBitPin.P8)) {
        led.plot(1, 2)
        packet = packet + 16
    } else {
        led.unplot(1, 2)
    }
    if (gamerbit.isPressed(GamerBitPin.P12)) {
        led.plot(3, 2)
        packet = packet + 8
    } else {
        led.unplot(3, 2)
    }
    if (gamerbit.isPressed(GamerBitPin.P16)) {
        led.plot(4, 2)
        packet = packet + 4
    } else {
        led.unplot(4, 2)
    }
    if (gamerbit.isPressed(GamerBitPin.P5)) {
        led.plot(3, 0)
        packet = packet + 2
    } else {
        led.unplot(3, 0)
    }
    if (gamerbit.isPressed(GamerBitPin.P11)) {
        led.plot(4, 0)
        packet = packet + 1
    } else {
        led.unplot(4, 0)
    }
    radio.sendNumber(packet)
})
radio.setGroup(13)

License

MIT

Supported targets