Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
5261b2b270 | |||
1adede163a | |||
bb80874ef9 | |||
9e9d11cb94 | |||
c004aa4b1b | |||
cdd4798945 | |||
0f56142317 | |||
6927085d64 | |||
c1b654f092 | |||
2f551c97b5 | |||
01e6aab376 | |||
df17ba09ae | |||
9c09a427c9 | |||
4b35f0f751 | |||
bb03cc4357 | |||
6f8b17e4ba | |||
60c5dfc539 | |||
bca5839b49 | |||
47e3737245 | |||
b8d5ec853e | |||
46d42e5300 | |||
ffabb9b16d | |||
d62c10d278 | |||
e2b2aa7ff1 | |||
664c8dcd35 | |||
bd7430b642 | |||
61fd28d840 | |||
c33df897d5 |
@ -1,3 +1,8 @@
|
||||
```sim
|
||||
basic.forever(() => {
|
||||
basic.showString("Hi!");
|
||||
})
|
||||
```
|
||||
# About
|
||||
|
||||
The [BBC micro:bit](https://www.microbit.co.uk) is a [pocket-size computer](/device) with a 5x5 display of 25 LEDs, Bluetooth and sensors that can be programmed by anyone.
|
||||
|
@ -22,12 +22,9 @@ Learn how to creating a message with a **string**, `show string` to write your m
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
basic.showString('Hi!')
|
||||
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
|
||||
```
|
||||
|
||||
|
@ -20,7 +20,7 @@ Learn how to **show LEDs**, to show an image on the BBC micro:bit's LED screen.
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -28,10 +28,7 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
|
||||
basic.pause(100)
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -23,18 +23,11 @@ Learn how to control a blinking LED. We will be learning how to create a blinkin
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
led.plot(0, 0)
|
||||
|
||||
led.unplot(0, 0)
|
||||
|
||||
basic.pause(100)
|
||||
|
||||
basic.forever(() => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
basic.forever(() => {})
|
||||
```
|
||||
|
||||
|
||||
|
@ -17,23 +17,13 @@ Learn the functions of **on data received**, **send number** and **receive numbe
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
|
||||
```cards
|
||||
basic.showNumber(0)
|
||||
|
||||
input.acceleration(Dimension.X)
|
||||
|
||||
led.plotBarGraph(0, 1023)
|
||||
|
||||
radio.onDataReceived(() => {
|
||||
|
||||
|
||||
})
|
||||
|
||||
radio.onDataReceived(() => {})
|
||||
radio.sendNumber(0)
|
||||
|
||||
radio.receiveNumber()
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -21,17 +21,12 @@ Learn how to use an if statements to run code run code depending on whether a co
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
input.compassHeading()
|
||||
|
||||
basic.forever(() => {})
|
||||
|
||||
let x = 0
|
||||
|
||||
if (true) {}
|
||||
|
||||
basic.showString("Hello!")
|
||||
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
|
@ -21,22 +21,12 @@ Learn how to creating a **variable** to keep track of the current count. We will
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
input.compassHeading()
|
||||
|
||||
basic.forever(() => {
|
||||
|
||||
|
||||
})
|
||||
|
||||
basic.forever(() => {})
|
||||
let x = 0
|
||||
|
||||
if (true) {
|
||||
|
||||
}
|
||||
|
||||
if (true) {}
|
||||
basic.showString("Hello!")
|
||||
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -44,7 +34,6 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
```
|
||||
|
||||
* **variable**: [read more...](/microbit/reference/variables/var)
|
||||
|
@ -21,21 +21,11 @@ Learn how to use an if statements to run code run code depending on whether a co
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
|
||||
input.onGesture(Gesture.Shake, () => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
input.onGesture(Gesture.Shake, () => {})
|
||||
let x = 0
|
||||
x = Math.random(3)
|
||||
|
||||
if (true) {
|
||||
|
||||
}
|
||||
|
||||
Math.random(3)
|
||||
if (true) {}
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -43,10 +33,6 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -21,13 +21,11 @@ Learn how to creating a **while loop**, `while condition do` to repeat code whil
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
let x = 0
|
||||
basic.showNumber(0)
|
||||
while (true) {
|
||||
|
||||
basic.pause(20)
|
||||
}
|
||||
while (true) {}
|
||||
basic.pause(20)
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -20,13 +20,8 @@ Learn how to `show LEDs` by showing an image on the LED screen. We will be learn
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
basic.forever(() => {
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
```cards
|
||||
basic.forever(() => {})
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -34,11 +29,8 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
basic.pause(100)
|
||||
|
||||
basic.clearScreen()
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -19,15 +19,10 @@ Learn how to create game blocks to keep track of the current score. We will be l
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
game.addScore(1)
|
||||
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
basic.showNumber(0)
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -18,15 +18,10 @@ Learn how to creating a message with a **game over** to write your message. We w
|
||||
## Documentation
|
||||
|
||||
|
||||
```docs
|
||||
```cards
|
||||
game.gameOver()
|
||||
|
||||
basic.showString("Hello!")
|
||||
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -19,21 +19,12 @@ Learn how to get the acceleration **acceleration**, `acceleration` value (g-forc
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
|
||||
basic.forever(() => {
|
||||
|
||||
|
||||
})
|
||||
|
||||
```cards
|
||||
basic.forever(() => {})
|
||||
let x = 0
|
||||
|
||||
input.acceleration(Dimension.X)
|
||||
|
||||
Math.abs(0)
|
||||
|
||||
led.setBrightness(255)
|
||||
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -41,7 +32,6 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -21,22 +21,12 @@ Learn how to create numbers randomly by using the input of the BBC micro:bit. We
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
|
||||
})
|
||||
|
||||
```cards
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
let x = 0
|
||||
|
||||
basic.showNumber(0)
|
||||
|
||||
Math.random(3)
|
||||
|
||||
basic.clearScreen()
|
||||
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -26,10 +26,8 @@ Learn how to control a blinking LED. We will be learning how to create a blinkin
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
for (let i = 0; i < 5; i++) {
|
||||
|
||||
}
|
||||
```cards
|
||||
for (let i = 0; i < 5; i++) {}
|
||||
basic.showNumber(0)
|
||||
basic.pause(100)
|
||||
|
||||
|
@ -22,19 +22,11 @@ Learn how to use the **pin pressed**, `on pin pressed` to run code when the user
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
if (true) {
|
||||
|
||||
}
|
||||
|
||||
input.onPinPressed(TouchPin.P0, () => {
|
||||
|
||||
})
|
||||
```cards
|
||||
if (true) {}
|
||||
input.onPinPressed(TouchPin.P0, () => {})
|
||||
let x = 0
|
||||
Math.random(3)
|
||||
basic.showNumber(0)
|
||||
basic.pause(100)
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
@ -19,14 +19,10 @@ Learn how to creating **conditionals**, `if condition do` to conditionally run c
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
if (true) {
|
||||
|
||||
}
|
||||
```cards
|
||||
if (true) {}
|
||||
Math.random(3)
|
||||
input.onGesture(Gesture.Shake, () => {
|
||||
|
||||
})
|
||||
input.onGesture(Gesture.Shake, () => {})
|
||||
basic.showNumber(7)
|
||||
basic.clearScreen()
|
||||
basic.showString("Hello!")
|
||||
|
@ -20,13 +20,9 @@ On Logo Up
|
||||
Learn how to plot image **on logo up**, `on logo up` to run code when the micro:bit screen is facing up and vertically orientated. We will be learning how to plot an image with the logo up, basic show LEDs, and logo down.
|
||||
|
||||
## Documentation
|
||||
```docs
|
||||
input.onLogoUp(() => {
|
||||
|
||||
})
|
||||
input.onLogoDown(() => {
|
||||
|
||||
})
|
||||
```cards
|
||||
input.onLogoUp(() => {})
|
||||
input.onLogoDown(() => {})
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -34,8 +30,6 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -21,11 +21,9 @@ Learn how to **set brightness** of an image `set brightness` to set the brightne
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
led.setBrightness(255)
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -33,7 +31,6 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -15,14 +15,13 @@ Running Time
|
||||
Learn how to use running time. We will be learning how to create a pogo game using variables, forever loop, conditionals, on button pressed, as well as simple commands, such as show LEDs and clear screen.
|
||||
|
||||
## Documentation
|
||||
```docs
|
||||
```cards
|
||||
let jumps = 0
|
||||
let acc = input.acceleration(Dimension.Y)
|
||||
basic.showNumber(jumps)
|
||||
basic.showNumber(radio.receiveNumber())
|
||||
basic.showNumber(0)
|
||||
radio.receiveNumber()
|
||||
led.stopAnimation()
|
||||
jumps = jumps + 1;
|
||||
radio.sendNumber(jumps)
|
||||
radio.sendNumber(0)
|
||||
basic.forever(() => { })
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
@ -32,11 +31,8 @@ basic.showLeds(`
|
||||
. # # # .
|
||||
`)
|
||||
basic.clearScreen()
|
||||
if (acc > 2000) {
|
||||
|
||||
}
|
||||
if (true) {}
|
||||
radio.onDataReceived(() => { })
|
||||
|
||||
```
|
||||
## Objectives
|
||||
|
||||
|
@ -23,10 +23,8 @@ Learn how to create a **local variable**, `var t :=time` where you can store dat
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
input.onGesture(Gesture.Shake, () => {
|
||||
|
||||
})
|
||||
```cards
|
||||
input.onGesture(Gesture.Shake, () => {})
|
||||
Math.random(3)
|
||||
let x = 0
|
||||
basic.showLeds(`
|
||||
|
@ -19,11 +19,9 @@ Learn how to create images that look like a rotating animation by using a while
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
let x = 0
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -32,10 +30,8 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
`)
|
||||
basic.pause(100)
|
||||
while (true) {
|
||||
|
||||
basic.pause(20)
|
||||
}
|
||||
while (true) {}
|
||||
basic.pause(20)
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -23,7 +23,7 @@ Learn how to **clear screen**, `clear screen` to turn off all the LED lights on
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
basic.clearScreen()
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
@ -32,10 +32,7 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -24,10 +24,8 @@ Learn how to **show LEDs** to turn on a LED light pattern on the LED screen. We
|
||||
* **show LEDs** : [read more...](/microbit/reference/basic/show-leds)
|
||||
* **on button pressed** : [read more...](/microbit/reference/input/on-button-pressed)
|
||||
|
||||
```docs
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
```cards
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -35,7 +33,6 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -25,7 +25,7 @@ Learn how to show LEDs with a, `pause` to pause program execution for a specifie
|
||||
* **pause** : [read more...](/microbit/reference/basic/pause)
|
||||
* **forever** : [read more...](/microbit/reference/basic/forever)
|
||||
|
||||
```docs
|
||||
```cards
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -34,8 +34,5 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
`)
|
||||
basic.pause(100)
|
||||
basic.forever(() => {
|
||||
|
||||
})
|
||||
|
||||
basic.forever(() => {})
|
||||
```
|
||||
|
@ -22,14 +22,10 @@ Learn how to use an if statement to run code run code depending on whether a con
|
||||
## Documentation
|
||||
|
||||
|
||||
```docs
|
||||
if (true) {
|
||||
|
||||
}
|
||||
```cards
|
||||
if (true) {}
|
||||
let x = 0
|
||||
input.onGesture(Gesture.Shake, () => {
|
||||
|
||||
})
|
||||
input.onGesture(Gesture.Shake, () => {})
|
||||
Math.random(3)
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
|
@ -17,14 +17,11 @@ For Loop
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
led.plot(0, 0)
|
||||
led.unplot(0, 0)
|
||||
for (let i = 0; i < 5; i++) {
|
||||
|
||||
}
|
||||
for (let i = 0; i < 5; i++) {}
|
||||
basic.pause(100)
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -17,15 +17,12 @@ Learn how to get the ambient temperature (degree Celsius °C). The temperature i
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
input.temperature()
|
||||
let x = 0
|
||||
basic.showNumber(7)
|
||||
basic.showString("Hello!")
|
||||
input.onGesture(Gesture.Shake, () => {
|
||||
|
||||
})
|
||||
|
||||
input.onGesture(Gesture.Shake, () => {})
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -21,7 +21,7 @@ Learn how to use an if statement to run code run code depending on whether a con
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
@ -29,16 +29,11 @@ basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
`)
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
})
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
let x = 0
|
||||
Math.random(3)
|
||||
if (true) {
|
||||
|
||||
}
|
||||
if (true) {}
|
||||
basic.showString("Hello!")
|
||||
|
||||
```
|
||||
|
||||
## Objectives
|
||||
|
@ -21,7 +21,7 @@ Learn how to get the **acceleration**, `acceleration` in one of three specified
|
||||
|
||||
## Documentation
|
||||
|
||||
```docs
|
||||
```cards
|
||||
basic.forever(() => {
|
||||
})
|
||||
let x = 0
|
||||
|
@ -1,113 +1,25 @@
|
||||
# Reference
|
||||
|
||||
## micro:bit
|
||||
|
||||
```namespaces
|
||||
basic.showString("Hello!");
|
||||
input.onButtonPressed(Button.A, () => {});
|
||||
led.plot(0,0);
|
||||
radio.sendNumber(0);
|
||||
music.playTone(music.noteFrequency(Note.C), music.beat(BeatFraction.Whole));
|
||||
game.createSprite();
|
||||
pins.digitalReadPin(DigitalPin.P0);
|
||||
serial.WriteLine("Hello!")
|
||||
control.inBackground(() => {});
|
||||
```
|
||||
|
||||
## Language
|
||||
|
||||
### @section full
|
||||
|
||||
### ~column
|
||||
|
||||
### Basic
|
||||
|
||||
[show number](/microbit/reference/basic/show-number)
|
||||
|
||||
~~~~block
|
||||
basic.showNumber(2)
|
||||
~~~~
|
||||
|
||||
[show string](/microbit/reference/basic/show-string)
|
||||
|
||||
~~~~block
|
||||
basic.showString('Hello!')
|
||||
~~~~
|
||||
|
||||
[show LEDs](/microbit/reference/basic/show-leds)
|
||||
|
||||
~~~~block
|
||||
basic.showLeds(`. . . . .
|
||||
. # . # .
|
||||
. . . . .
|
||||
# . . . #
|
||||
. # # # .`)
|
||||
~~~~
|
||||
|
||||
[clear screen](/microbit/reference/basic/clear-screen)
|
||||
|
||||
~~~~block
|
||||
basic.clearScreen()
|
||||
~~~~
|
||||
|
||||
[forever](/microbit/reference/basic/forever)
|
||||
|
||||
~~~~block
|
||||
basic.forever(() => { })
|
||||
~~~~
|
||||
|
||||
[pause](/microbit/reference/basic/pause)
|
||||
|
||||
```block
|
||||
basic.pause(200)
|
||||
```
|
||||
|
||||
### Input
|
||||
|
||||
[on button pressed](/microbit/reference/input/on-button-pressed)
|
||||
|
||||
```block
|
||||
input.onButtonPressed(Button.A, () => {})
|
||||
```
|
||||
|
||||
[on pin pressed](/microbit/reference/input/on-pin-pressed)
|
||||
|
||||
```block
|
||||
input.onPinPressed(TouchPin.P0, () => {})
|
||||
```
|
||||
|
||||
[on shake](/microbit/reference/input/on-shake)
|
||||
|
||||

|
||||
|
||||
[on logo up](/microbit/reference/on-logo-up)
|
||||
|
||||

|
||||
|
||||
[on logo down](/microbit/reference/on-logo-down)
|
||||
|
||||

|
||||
|
||||
[on screen up](/microbit/reference/on-screen-up)
|
||||
|
||||

|
||||
|
||||
[on screen down](/microbit/reference/on-screen-down)
|
||||
|
||||

|
||||
|
||||
[button is pressed](/microbit/reference/button-is-pressed)
|
||||
|
||||

|
||||
|
||||
[compass heading](/microbit/reference/compass-heading)
|
||||
|
||||

|
||||
|
||||
[temperature](/microbit/reference/temperature)
|
||||
|
||||

|
||||
|
||||
[acceleration](/microbit/reference/input/acceleration)
|
||||
|
||||

|
||||
|
||||
[rotation](/microbit/reference/rotation)
|
||||
|
||||

|
||||
|
||||
[magnetic force](/microbit/reference/magnetic-force)
|
||||
|
||||

|
||||
|
||||
[running time](/microbit/reference/running-time)
|
||||
|
||||

|
||||
|
||||
### Loops
|
||||
|
||||
[for](/microbit/reference/loops/for)
|
||||
@ -132,8 +44,6 @@ while(true) {}
|
||||
basic.forever(() => {})
|
||||
```
|
||||
|
||||
|
||||
|
||||
### ~
|
||||
|
||||
### ~column
|
||||
@ -199,6 +109,10 @@ x;
|
||||
let x = 0;
|
||||
x+=1;
|
||||
```
|
||||
### ~
|
||||
|
||||
### ~column
|
||||
|
||||
|
||||
### Math
|
||||
|
||||
@ -237,224 +151,8 @@ Random value
|
||||
```block
|
||||
Math.random(5);
|
||||
```
|
||||
|
||||
### LED
|
||||
|
||||
[plot](/microbit/reference/led/plot)
|
||||
|
||||
```block
|
||||
led.plot(2,2)
|
||||
```
|
||||
|
||||
[unplot](/microbit/reference/led/unplot)
|
||||
|
||||
```block
|
||||
led.unplot(2,2)
|
||||
```
|
||||
|
||||
[point](/microbit/reference/point)
|
||||
|
||||
```block
|
||||
led.point(2,2)
|
||||
```
|
||||
|
||||
[brightness](/microbit/reference/brightness)
|
||||
|
||||
```block
|
||||
led.brightness()
|
||||
```
|
||||
|
||||
[set brightness](/microbit/reference/set-brightness)
|
||||
|
||||
```block
|
||||
led.setBrightness(255)
|
||||
```
|
||||
|
||||
[stop animation](/microbit/reference/stop-animation)
|
||||
|
||||
```block
|
||||
led.stopAnimation()
|
||||
```
|
||||
|
||||
[plot bar graph](/microbit/reference/led/plot-bar-graph)
|
||||
|
||||
```block
|
||||
led.plotBarGraph(0, 1023)
|
||||
```
|
||||
|
||||
### Game
|
||||
|
||||
[create sprite](/microbit/reference/game/create-sprite)
|
||||
|
||||

|
||||
|
||||
[move](/microbit/reference/game/move)
|
||||
|
||||

|
||||
|
||||
[turn](/microbit/reference/game/turn)
|
||||
|
||||

|
||||
|
||||
[change](/microbit/reference/game/change)
|
||||
|
||||

|
||||
|
||||
[set](/microbit/reference/game/set)
|
||||
|
||||

|
||||
|
||||
[reports](/microbit/reference/reports)
|
||||
|
||||

|
||||
|
||||
[touching](/microbit/reference/touching)
|
||||
|
||||

|
||||
|
||||
[touching edge](/microbit/reference/touching-edge)
|
||||
|
||||

|
||||
|
||||
[if on edge, bounce](/microbit/reference/logic/if-on-edge-bounce)
|
||||
|
||||

|
||||
|
||||
[change score by](/microbit/reference/change-score-by)
|
||||
|
||||

|
||||
|
||||
[score](/microbit/reference/score)
|
||||
|
||||

|
||||
|
||||
[start countdown](/microbit/reference/start-countdown)
|
||||
|
||||

|
||||
|
||||
[game over](/microbit/reference/game-over)
|
||||
|
||||

|
||||
|
||||
### Music
|
||||
|
||||
[play tone](/microbit/reference/play-tone)
|
||||
|
||||

|
||||
|
||||
[ring tone](/microbit/reference/ring-tone)
|
||||
|
||||

|
||||
|
||||
[rest](/microbit/reference/rest)
|
||||
|
||||

|
||||
|
||||
[tempo](/microbit/reference/tempo)
|
||||
|
||||

|
||||
|
||||
[set tempo](/microbit/reference/set-tempo)
|
||||
|
||||

|
||||
|
||||
[change tempo](/microbit/reference/music/set-tempo)
|
||||
|
||||

|
||||
|
||||
### Comments
|
||||
|
||||
[comment](/microbit/reference/comment)
|
||||
|
||||
### Images
|
||||
|
||||
[show image](/microbit/reference/show-image)
|
||||
|
||||

|
||||
|
||||
[scroll image](/microbit/reference/scroll-image)
|
||||
|
||||

|
||||
|
||||
[create image](/microbit/reference/create-image)
|
||||
|
||||

|
||||
|
||||
|
||||
### ~
|
||||
|
||||
### ~column
|
||||
|
||||
### Pins
|
||||
|
||||
[digital read pin](/microbit/reference/pins/digital-read-pin)
|
||||
|
||||

|
||||
|
||||
[digital write pin](/microbit/reference/pins/digital-write-pin)
|
||||
|
||||

|
||||
|
||||
[analog read pin](/microbit/reference/pins/analog-read-pin)
|
||||
|
||||

|
||||
|
||||
[analog write pin](/microbit/reference/pins/analog-write-pin)
|
||||
|
||||

|
||||
|
||||
[analog set period](/microbit/reference/pins/analog-set-period)
|
||||
|
||||

|
||||
|
||||
[servo write pin](/microbit/reference/pins/servo-write-pin)
|
||||
|
||||

|
||||
|
||||
[servo set pulse](/microbit/reference/pins/servo-set-pulse)
|
||||
|
||||

|
||||
|
||||
[map](/microbit/reference/map)
|
||||
|
||||

|
||||
|
||||
|
||||
## Devices
|
||||
|
||||
Functions in this category require to be connected to a remote device.
|
||||
|
||||
[tell camera to](/microbit/reference/devices/tell-camera-to)
|
||||
|
||||

|
||||
|
||||
[tell remote control to](/microbit/reference/devices/tell-remote-control-to)
|
||||
|
||||

|
||||
|
||||
[raise alert to](/microbit/reference/devices/raise-alert-to)
|
||||
|
||||

|
||||
|
||||
[on notified](/microbit/reference/on-notified)
|
||||
|
||||

|
||||
|
||||
[on gamepad button](/microbit/reference/on-gamepad-button)
|
||||
|
||||

|
||||
|
||||
[on notified](/microbit/reference/on-notified)
|
||||
|
||||

|
||||
|
||||
[signal strength](/microbit/reference/signal-strength)
|
||||
|
||||

|
||||
|
||||
[on signal strength changed](/microbit/reference/on-signal-strength-changed)
|
||||
|
||||

|
||||
|
||||
### ~
|
||||
|
||||
|
35
docs/reference/basic.md
Normal file
35
docs/reference/basic.md
Normal file
@ -0,0 +1,35 @@
|
||||
# Basic
|
||||
|
||||
Provides access to basic micro:bit functionality.
|
||||
|
||||
|
||||
```cards
|
||||
basic.showNumber(0);
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
. . # . .
|
||||
. . . . .
|
||||
. . . . .
|
||||
`);
|
||||
basic.showString("Hello!");
|
||||
basic.clearScreen();
|
||||
basic.forever(() => {
|
||||
|
||||
});
|
||||
basic.pause(100);
|
||||
basic.plotLeds(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
. . # . .
|
||||
. . . . .
|
||||
. . . . .
|
||||
`);
|
||||
basic.showAnimation(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
. . # . .
|
||||
. . . . .
|
||||
. . . . .
|
||||
`);
|
||||
```
|
11
docs/reference/control.md
Normal file
11
docs/reference/control.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Control
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
control.inBackground(() => {
|
||||
|
||||
});
|
||||
control.reset();
|
||||
```
|
12
docs/reference/game.md
Normal file
12
docs/reference/game.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Game
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
game.addScore(1);
|
||||
game.score();
|
||||
game.startCountdown(10000);
|
||||
game.gameOver();
|
||||
game.setScore(0);
|
||||
```
|
21
docs/reference/images.md
Normal file
21
docs/reference/images.md
Normal file
@ -0,0 +1,21 @@
|
||||
# Images
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
images.createImage(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
. . # . .
|
||||
. . . . .
|
||||
. . . . .
|
||||
`);
|
||||
images.createBigImage(`
|
||||
. . . . .
|
||||
. . . . .
|
||||
. . # . .
|
||||
. . . . .
|
||||
. . . . .
|
||||
`);
|
||||
```
|
42
docs/reference/input.md
Normal file
42
docs/reference/input.md
Normal file
@ -0,0 +1,42 @@
|
||||
# Input
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
|
||||
});
|
||||
input.onGesture(Gesture.Shake, () => {
|
||||
|
||||
});
|
||||
input.onPinPressed(TouchPin.P0, () => {
|
||||
|
||||
});
|
||||
input.buttonIsPressed(Button.A);
|
||||
input.compassHeading();
|
||||
input.temperature();
|
||||
input.acceleration(Dimension.X);
|
||||
input.lightLevel();
|
||||
input.rotation(Rotation.Pitch);
|
||||
input.magneticForce(Dimension.X);
|
||||
input.runningTime();
|
||||
input.setAccelerometerRange(AcceleratorRange.OneG);
|
||||
input.pinIsPressed(TouchPin.P0);
|
||||
input.calibrate();
|
||||
input.onLogoDown(() => {
|
||||
|
||||
});
|
||||
input.onLogoUp(() => {
|
||||
|
||||
});
|
||||
input.onScreenDown(() => {
|
||||
|
||||
});
|
||||
input.onScreenUp(() => {
|
||||
|
||||
});
|
||||
input.onShake(() => {
|
||||
|
||||
});
|
||||
```
|
21
docs/reference/led.md
Normal file
21
docs/reference/led.md
Normal file
@ -0,0 +1,21 @@
|
||||
# Led
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
led.plot(0, 0);
|
||||
led.unplot(0, 0);
|
||||
led.point(0, 0);
|
||||
led.brightness();
|
||||
led.setBrightness(255);
|
||||
led.stopAnimation();
|
||||
led.plotBarGraph(0, 1023);
|
||||
led.fadeIn();
|
||||
led.fadeOut();
|
||||
led.plotAll();
|
||||
led.screenshot();
|
||||
led.toggle(0, 0);
|
||||
led.toggleAll();
|
||||
led.setDisplayMode(DisplayMode.BackAndWhite);
|
||||
```
|
15
docs/reference/music.md
Normal file
15
docs/reference/music.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Music
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
music.playTone(0, 0);
|
||||
music.ringTone(0);
|
||||
music.rest(0);
|
||||
music.noteFrequency(Note.C);
|
||||
music.beat();
|
||||
music.tempo();
|
||||
music.changeTempoBy(20);
|
||||
music.setTempo(120);
|
||||
```
|
17
docs/reference/pins.md
Normal file
17
docs/reference/pins.md
Normal file
@ -0,0 +1,17 @@
|
||||
# Pins
|
||||
|
||||
|
||||
|
||||
|
||||
```cards
|
||||
pins.digitalReadPin(DigitalPin.P0);
|
||||
pins.digitalWritePin(DigitalPin.P0, 0);
|
||||
pins.analogReadPin(AnalogPin.P0);
|
||||
pins.analogWritePin(AnalogPin.P0, 1023);
|
||||
pins.analogSetPeriod(AnalogPin.P0, 20000);
|
||||
pins.servoWritePin(AnalogPin.P0, 180);
|
||||
pins.servoSetPulse(AnalogPin.P0, 1500);
|
||||
pins.map(0, 0, 1023, 0, 4);
|
||||
pins.analogPitch(0, 0);
|
||||
pins.analogSetPitchPin(AnalogPin.P0);
|
||||
```
|
94
docs/static/microbitheart.svg
vendored
Normal file
94
docs/static/microbitheart.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 26 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,5 +1,19 @@
|
||||
#include "ksbit.h"
|
||||
|
||||
enum class NumberFormat {
|
||||
Int8LE = 1,
|
||||
UInt8LE,
|
||||
Int16LE,
|
||||
UInt16LE,
|
||||
Int32LE,
|
||||
Int8BE,
|
||||
UInt8BE,
|
||||
Int16BE,
|
||||
UInt16BE,
|
||||
Int32BE,
|
||||
// UInt32,
|
||||
};
|
||||
|
||||
//% indexerGet=BufferMethods::getByte indexerSet=BufferMethods::setByte
|
||||
namespace BufferMethods {
|
||||
//%
|
||||
@ -17,6 +31,70 @@ namespace BufferMethods {
|
||||
return buf->payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a number in specified format in the buffer.
|
||||
*/
|
||||
//%
|
||||
void setNumber(Buffer buf, NumberFormat format, int offset, int value)
|
||||
{
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
|
||||
ManagedBuffer b(buf);
|
||||
|
||||
// Assume little endian
|
||||
#define WRITEBYTES(isz, swap) isz = value; b.writeBytes(offset, (uint8_t*)&isz, sizeof(isz), swap); break
|
||||
|
||||
switch (format) {
|
||||
case NumberFormat::Int8LE: WRITEBYTES(i8, false);
|
||||
case NumberFormat::UInt8LE: WRITEBYTES(u8, false);
|
||||
case NumberFormat::Int16LE: WRITEBYTES(i16, false);
|
||||
case NumberFormat::UInt16LE: WRITEBYTES(u16, false);
|
||||
case NumberFormat::Int32LE: WRITEBYTES(i32, false);
|
||||
case NumberFormat::Int8BE: WRITEBYTES(i8, true);
|
||||
case NumberFormat::UInt8BE: WRITEBYTES(u8, true);
|
||||
case NumberFormat::Int16BE: WRITEBYTES(i16, true);
|
||||
case NumberFormat::UInt16BE: WRITEBYTES(u16, true);
|
||||
case NumberFormat::Int32BE: WRITEBYTES(i32, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a number in specified format from the buffer.
|
||||
*/
|
||||
//%
|
||||
int getNumber(Buffer buf, NumberFormat format, int offset)
|
||||
{
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
|
||||
ManagedBuffer b(buf);
|
||||
|
||||
// Assume little endian
|
||||
#define READBYTES(isz, swap) b.readBytes((uint8_t*)&isz, offset, sizeof(isz), swap); return isz
|
||||
|
||||
switch (format) {
|
||||
case NumberFormat::Int8LE: READBYTES(i8, false);
|
||||
case NumberFormat::UInt8LE: READBYTES(u8, false);
|
||||
case NumberFormat::Int16LE: READBYTES(i16, false);
|
||||
case NumberFormat::UInt16LE: READBYTES(u16, false);
|
||||
case NumberFormat::Int32LE: READBYTES(i32, false);
|
||||
case NumberFormat::Int8BE: READBYTES(i8, true);
|
||||
case NumberFormat::UInt8BE: READBYTES(u8, true);
|
||||
case NumberFormat::Int16BE: READBYTES(i16, true);
|
||||
case NumberFormat::UInt16BE: READBYTES(u16, true);
|
||||
case NumberFormat::Int32BE: READBYTES(i32, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Returns the length of a Buffer object. */
|
||||
//% property
|
||||
int length(Buffer s) {
|
||||
|
@ -1,81 +1,31 @@
|
||||
#include "ksbit.h"
|
||||
#include <limits.h>
|
||||
|
||||
namespace StringMethods {
|
||||
|
||||
/**
|
||||
* Returns the character at the specified index.
|
||||
* @param pos The zero-based index of the desired character.
|
||||
*/
|
||||
namespace String_ {
|
||||
//%
|
||||
StringData *charAt(StringData *s, int pos) {
|
||||
return ManagedString((char)ManagedString(s).charAt(pos)).leakData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Unicode value of the character at the specified location.
|
||||
* @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.
|
||||
*/
|
||||
//%
|
||||
int charCodeAt(StringData *s, int index) {
|
||||
return ManagedString(s).charAt(index);
|
||||
return ManagedString(s).charAt(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string that contains the concatenation of two or more strings.
|
||||
* @param other The string to append to the end of the string.
|
||||
*/
|
||||
//%
|
||||
StringData *concat(StringData *s, StringData *other) {
|
||||
ManagedString a(s), b(other);
|
||||
return (a + b).leakData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether relative order of two strings (in ASCII encoding).
|
||||
* @param that String to compare to target string
|
||||
*/
|
||||
//%
|
||||
int compare(StringData *s, StringData *that) {
|
||||
return strcmp(s->data, that->data);
|
||||
}
|
||||
|
||||
/** Returns the length of a String object. */
|
||||
//% property
|
||||
int length(StringData *s) {
|
||||
return s->len;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace BooleanMethods {
|
||||
// Cache the string literals "true" and "false" when used.
|
||||
// Note that the representation of booleans stays the usual C-one.
|
||||
|
||||
static const char sTrue[] __attribute__ ((aligned (4))) = "\xff\xff\x04\x00" "true\0";
|
||||
static const char sFalse[] __attribute__ ((aligned (4))) = "\xff\xff\x05\x00" "false\0";
|
||||
|
||||
/**
|
||||
* Returns a string representation of an object.
|
||||
*/
|
||||
//%
|
||||
StringData* toString(bool v)
|
||||
{
|
||||
if (v) {
|
||||
return (StringData*)(void*)sTrue;
|
||||
} else {
|
||||
return (StringData*)(void*)sFalse;
|
||||
}
|
||||
}
|
||||
int length(StringData *s) { return s->len; }
|
||||
|
||||
//%
|
||||
bool bang(bool v) { return !v; }
|
||||
}
|
||||
|
||||
namespace String_ {
|
||||
/**
|
||||
* Make a string from the given ASCII character code.
|
||||
*/
|
||||
//%
|
||||
StringData *fromCharCode(int code)
|
||||
{
|
||||
@ -94,18 +44,35 @@ namespace String_ {
|
||||
}
|
||||
}
|
||||
|
||||
namespace NumberMethods {
|
||||
/**
|
||||
* Returns a string representation of a number.
|
||||
*/
|
||||
|
||||
namespace Boolean_ {
|
||||
// Cache the string literals "true" and "false" when used.
|
||||
// Note that the representation of booleans stays the usual C-one.
|
||||
|
||||
static const char sTrue[] __attribute__ ((aligned (4))) = "\xff\xff\x04\x00" "true\0";
|
||||
static const char sFalse[] __attribute__ ((aligned (4))) = "\xff\xff\x05\x00" "false\0";
|
||||
|
||||
//%
|
||||
StringData* toString(bool v)
|
||||
{
|
||||
if (v) {
|
||||
return (StringData*)(void*)sTrue;
|
||||
} else {
|
||||
return (StringData*)(void*)sFalse;
|
||||
}
|
||||
}
|
||||
|
||||
//%
|
||||
bool bang(bool v) { return !v; }
|
||||
}
|
||||
|
||||
namespace Number_ {
|
||||
//%
|
||||
StringData* toString(int n)
|
||||
{
|
||||
return ManagedString(n).leakData();
|
||||
}
|
||||
}
|
||||
|
||||
namespace NumberImpl {
|
||||
// +, - and friends are handled directly by assembly instructions
|
||||
// The comparisons are here as they are more code-size efficient
|
||||
|
||||
@ -130,11 +97,6 @@ namespace NumberImpl {
|
||||
}
|
||||
|
||||
namespace Math_ {
|
||||
/**
|
||||
* Returns the value of a base expression taken to a specified power.
|
||||
* @param x The base value of the expression.
|
||||
* @param y The exponent value of the expression.
|
||||
*/
|
||||
//%
|
||||
int pow(int x, int y)
|
||||
{
|
||||
@ -150,9 +112,6 @@ namespace Math_ {
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a pseudorandom number between 0 and `max`.
|
||||
*/
|
||||
//%
|
||||
int random(int max) {
|
||||
if (max == INT_MIN)
|
||||
@ -165,10 +124,6 @@ namespace Math_ {
|
||||
return uBit.random(max);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the square root of a number.
|
||||
* @param x A numeric expression.
|
||||
*/
|
||||
//%
|
||||
int sqrt(int x)
|
||||
{
|
||||
@ -176,7 +131,7 @@ namespace Math_ {
|
||||
}
|
||||
}
|
||||
|
||||
namespace ArrayImpl {
|
||||
namespace Array_ {
|
||||
//%
|
||||
RefCollection *mk(uint32_t flags)
|
||||
{
|
||||
@ -334,65 +289,3 @@ namespace ksrt {
|
||||
uBit.panic(code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
namespace buffer {
|
||||
|
||||
RefBuffer *mk(uint32_t size)
|
||||
{
|
||||
RefBuffer *r = new RefBuffer();
|
||||
r->data.resize(size);
|
||||
return r;
|
||||
}
|
||||
|
||||
char *cptr(RefBuffer *c)
|
||||
{
|
||||
return (char*)&c->data[0];
|
||||
}
|
||||
|
||||
int count(RefBuffer *c) { return c->data.size(); }
|
||||
|
||||
void fill(RefBuffer *c, int v)
|
||||
{
|
||||
memset(cptr(c), v, count(c));
|
||||
}
|
||||
|
||||
void fill_random(RefBuffer *c)
|
||||
{
|
||||
int len = count(c);
|
||||
for (int i = 0; i < len; ++i)
|
||||
c->data[i] = uBit.random(0x100);
|
||||
}
|
||||
|
||||
void add(RefBuffer *c, uint32_t x) {
|
||||
c->data.push_back(x);
|
||||
}
|
||||
|
||||
inline bool in_range(RefBuffer *c, int x) {
|
||||
return (0 <= x && x < (int)c->data.size());
|
||||
}
|
||||
|
||||
uint32_t at(RefBuffer *c, int x) {
|
||||
if (in_range(c, x)) {
|
||||
return c->data[x];
|
||||
}
|
||||
else {
|
||||
error(ERR_OUT_OF_BOUNDS);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void set(RefBuffer *c, int x, uint32_t y) {
|
||||
if (!in_range(c, x))
|
||||
return;
|
||||
c->data[x] = y;
|
||||
}
|
||||
}
|
||||
|
||||
namespace bitvm_bits {
|
||||
RefBuffer *create_buffer(int size)
|
||||
{
|
||||
return buffer::mk(size);
|
||||
}
|
||||
}
|
||||
|
99
libs/microbit/core.d.ts
vendored
99
libs/microbit/core.d.ts
vendored
@ -4,14 +4,14 @@ interface Array<T> {
|
||||
/**
|
||||
* Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.
|
||||
*/
|
||||
//% shim=ArrayImpl::length
|
||||
//% shim=Array_::length
|
||||
length: number;
|
||||
|
||||
/**
|
||||
* Appends new elements to an array.
|
||||
* @param items New elements of the Array.
|
||||
*/
|
||||
//% shim=ArrayImpl::push
|
||||
//% shim=Array_::push
|
||||
push(item: T): void;
|
||||
|
||||
/**
|
||||
@ -41,11 +41,11 @@ interface Array<T> {
|
||||
slice(start: number, end: number): T[];
|
||||
|
||||
/** Removes the first occurence of an object. Returns true if removed. */
|
||||
//% shim=ArrayImpl::removeElement
|
||||
//% shim=Array_::removeElement
|
||||
removeElement(element:T) : boolean;
|
||||
|
||||
/** Removes the object at position index. */
|
||||
//% shim=ArrayImpl::removeAt
|
||||
//% shim=Array_::removeAt
|
||||
removeAt(idx:number) : void;
|
||||
|
||||
|
||||
@ -69,31 +69,110 @@ interface Array<T> {
|
||||
* @param searchElement The value to locate in the array.
|
||||
* @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.
|
||||
*/
|
||||
//% shim=ArrayImpl::indexOf
|
||||
//% shim=Array_::indexOf
|
||||
indexOf(searchElement: T, fromIndex?: number): number;
|
||||
|
||||
|
||||
[n: number]: T;
|
||||
}
|
||||
|
||||
declare interface String {
|
||||
/**
|
||||
* Returns the character at the specified index.
|
||||
* @param pos The zero-based index of the desired character.
|
||||
*/
|
||||
//% shim=String_::charAt
|
||||
charAt(pos: number): string;
|
||||
|
||||
/**
|
||||
* Returns the Unicode value of the character at the specified location.
|
||||
* @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.
|
||||
*/
|
||||
//% shim=String_::charCodeAt
|
||||
charCodeAt(index: number): number;
|
||||
|
||||
/**
|
||||
* Returns a string that contains the concatenation of two or more strings.
|
||||
* @param other The string to append to the end of the string.
|
||||
*/
|
||||
//% shim=String_::concat
|
||||
concat(other: string): string;
|
||||
|
||||
/**
|
||||
* Determines whether relative order of two strings (in ASCII encoding).
|
||||
* @param that String to compare to target string
|
||||
*/
|
||||
//% shim=String_::compare
|
||||
compare(that: string): number;
|
||||
|
||||
/** Returns the length of a String object. */
|
||||
//% property shim=String_::length
|
||||
length: number;
|
||||
|
||||
interface String {
|
||||
[index: number]: string;
|
||||
}
|
||||
|
||||
|
||||
interface Buffer {
|
||||
[index: number]: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts A string to an integer.
|
||||
* @param s A string to convert into a number.
|
||||
*/
|
||||
//% shim=String_::toNumber
|
||||
//% shim=String_::toNumber
|
||||
declare function parseInt(s: string): number;
|
||||
|
||||
interface Object {}
|
||||
interface Function {}
|
||||
interface IArguments {}
|
||||
interface RegExp {}
|
||||
|
||||
|
||||
declare interface Boolean {
|
||||
/**
|
||||
* Returns a string representation of an object.
|
||||
*/
|
||||
//% shim=Boolean_::toString
|
||||
toString(): string;
|
||||
}
|
||||
|
||||
declare namespace String {
|
||||
|
||||
/**
|
||||
* Make a string from the given ASCII character code.
|
||||
*/
|
||||
//% shim=String_::fromCharCode
|
||||
function fromCharCode(code: number): string;
|
||||
}
|
||||
|
||||
|
||||
declare interface Number {
|
||||
/**
|
||||
* Returns a string representation of a number.
|
||||
*/
|
||||
//% shim=Number_::toString
|
||||
toString(): string;
|
||||
}
|
||||
|
||||
declare namespace Math {
|
||||
|
||||
/**
|
||||
* Returns the value of a base expression taken to a specified power.
|
||||
* @param x The base value of the expression.
|
||||
* @param y The exponent value of the expression.
|
||||
*/
|
||||
//% shim=Math_::pow
|
||||
function pow(x: number, y: number): number;
|
||||
|
||||
/**
|
||||
* Returns a pseudorandom number between 0 and `max`.
|
||||
*/
|
||||
//% shim=Math_::random
|
||||
function random(max: number): number;
|
||||
|
||||
/**
|
||||
* Returns the square root of a number.
|
||||
* @param x A numeric expression.
|
||||
*/
|
||||
//% shim=Math_::sqrt
|
||||
function sqrt(x: number): number;
|
||||
}
|
||||
|
15
libs/microbit/enums.d.ts
vendored
15
libs/microbit/enums.d.ts
vendored
@ -271,4 +271,19 @@ declare namespace pins {
|
||||
declare namespace serial {
|
||||
}
|
||||
|
||||
|
||||
declare enum NumberFormat {
|
||||
Int8LE = 1,
|
||||
UInt8LE = 2,
|
||||
Int16LE = 3,
|
||||
UInt16LE = 4,
|
||||
Int32LE = 5,
|
||||
Int8BE = 6,
|
||||
UInt8BE = 7,
|
||||
Int16BE = 8,
|
||||
UInt16BE = 9,
|
||||
Int32BE = 10,
|
||||
// UInt32,
|
||||
}
|
||||
|
||||
// Auto-generated. Do not edit. Really.
|
||||
|
6
libs/microbit/helpers.ts
Normal file
6
libs/microbit/helpers.ts
Normal file
@ -0,0 +1,6 @@
|
||||
namespace console {
|
||||
export function log(msg: string) {
|
||||
serial.writeString(msg);
|
||||
serial.writeString("\r\n");
|
||||
}
|
||||
}
|
@ -7,10 +7,11 @@
|
||||
"dal.d.ts",
|
||||
"enums.d.ts",
|
||||
"shims.d.ts",
|
||||
"core.d.ts",
|
||||
"ks-core.d.ts",
|
||||
"ksbit.h",
|
||||
"core.cpp",
|
||||
"mbit.ts",
|
||||
"ks-helpers.ts",
|
||||
"helpers.ts",
|
||||
"images.cpp",
|
||||
"basic.cpp",
|
||||
"input.cpp",
|
||||
@ -22,6 +23,7 @@
|
||||
"led.ts",
|
||||
"music.ts",
|
||||
"pins.cpp",
|
||||
"pins.ts",
|
||||
"serial.cpp",
|
||||
"serial.ts",
|
||||
"buffer.cpp"
|
||||
@ -32,69 +34,5 @@
|
||||
"config": {
|
||||
"MESSAGE_BUS_LISTENER_DEFAULT_FLAGS": "MESSAGE_BUS_LISTENER_QUEUE_IF_BUSY"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"id": "microbit",
|
||||
"name": "BBC micro:bit",
|
||||
"title": "JavaScript for BBC micro:bit",
|
||||
"cloud": {
|
||||
"workspace": false,
|
||||
"packages": true
|
||||
},
|
||||
"blocksprj": {
|
||||
"id": "blocksprj",
|
||||
"config": {
|
||||
"name": "{0} block",
|
||||
"dependencies": {
|
||||
"microbit": "*",
|
||||
"microbit-radio": "*"
|
||||
},
|
||||
"description": "",
|
||||
"files": [
|
||||
"main.blocks",
|
||||
"main.blocks.ts",
|
||||
"README.md"
|
||||
]
|
||||
},
|
||||
"files": {
|
||||
"main.blocks": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"device_print_message\"><value name=\"text\"><shadow type=\"text\"><field name=\"TEXT\">Hello!</field></shadow></value></block></xml>",
|
||||
"main.blocks.ts": "\n",
|
||||
"README.md": "Describe your project here!"
|
||||
}
|
||||
},
|
||||
"tsprj": {
|
||||
"id": "tsprj",
|
||||
"config": {
|
||||
"name": "{0} bit",
|
||||
"dependencies": {
|
||||
"microbit": "*",
|
||||
"microbit-radio": "*"
|
||||
},
|
||||
"description": "",
|
||||
"files": [
|
||||
"main.ts",
|
||||
"README.md"
|
||||
]
|
||||
},
|
||||
"files": {
|
||||
"main.ts": "basic.showString('Hello!')\n",
|
||||
"README.md": "Describe your project here!"
|
||||
}
|
||||
},
|
||||
"compile": {
|
||||
"isNative": false,
|
||||
"hasHex": true
|
||||
},
|
||||
"simulator": {
|
||||
"autoRun": true
|
||||
},
|
||||
"compileService": {
|
||||
"gittag": "v0.1.5",
|
||||
"serviceId": "ws"
|
||||
},
|
||||
"serial": {
|
||||
"manufacturerFilter": "^mbed$",
|
||||
"log": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,64 +0,0 @@
|
||||
type Action = () => void;
|
||||
|
||||
namespace helpers {
|
||||
export function arraySplice<T>(arr: T[], start: number, len: number) {
|
||||
if (start < 0) {
|
||||
return;
|
||||
}
|
||||
for (let i = 0; i < len; ++i) {
|
||||
arr.removeAt(start)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace console {
|
||||
export function log(msg: string) {
|
||||
serial.writeString(msg);
|
||||
serial.writeString("\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
namespace Math {
|
||||
export function clamp(min: number, max:number, value:number): number {
|
||||
return Math.min(max, Math.max(min, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the absolute value of a number (the value without regard to whether it is positive or negative).
|
||||
* For example, the absolute value of -5 is the same as the absolute value of 5.
|
||||
* @param x A numeric expression for which the absolute value is needed.
|
||||
*/
|
||||
export function abs(x: number): number
|
||||
{
|
||||
return x < 0 ? -x : x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sign of the x, indicating whether x is positive, negative or zero.
|
||||
* @param x The numeric expression to test
|
||||
*/
|
||||
export function sign(x: number): number
|
||||
{
|
||||
if (x == 0) return 0;
|
||||
if (x > 0) return 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the larger of two supplied numeric expressions.
|
||||
*/
|
||||
export function max(a:number, b:number): number
|
||||
{
|
||||
if (a >= b) return a;
|
||||
return b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the smaller of two supplied numeric expressions.
|
||||
*/
|
||||
export function min(a:number, b:number): number
|
||||
{
|
||||
if (a <= b) return a;
|
||||
return b;
|
||||
}
|
||||
}
|
@ -195,25 +195,24 @@ namespace pins {
|
||||
{
|
||||
return ManagedBuffer(size).leakData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Read `size` bytes from a 7-bit I2C `address`.
|
||||
*/
|
||||
//%
|
||||
Buffer i2cReadBuffer(int address, int size, bool repeat = false)
|
||||
{
|
||||
Buffer buf = createBuffer(size);
|
||||
uBit.i2c.read(address << 1, (char*)buf->payload, size, repeat);
|
||||
return buf;
|
||||
}
|
||||
|
||||
// TODO:
|
||||
void i2cReadBuffer(int address, RefBuffer *buf)
|
||||
/**
|
||||
* Write bytes to a 7-bit I2C `address`.
|
||||
*/
|
||||
//%
|
||||
void i2cWriteBuffer(int address, Buffer buf, bool repeat = false)
|
||||
{
|
||||
uBit.i2c.read(address << 1, buf->cptr(), buf->size());
|
||||
}
|
||||
|
||||
void i2cWriteBuffer(int address, RefBuffer *buf)
|
||||
{
|
||||
uBit.i2c.write(address << 1, buf->cptr(), buf->size());
|
||||
}
|
||||
|
||||
int i2cReadRaw(int address, char *data, int length, int repeated)
|
||||
{
|
||||
return uBit.i2c.read(address, data, length, repeated);
|
||||
}
|
||||
|
||||
int i2cWriteRaw(int address, const char *data, int length, int repeated)
|
||||
{
|
||||
return uBit.i2c.write(address, data, length, repeated);
|
||||
uBit.i2c.write(address << 1, (char*)buf->payload, buf->length, repeat);
|
||||
}
|
||||
}
|
||||
|
@ -13,4 +13,49 @@ namespace pins {
|
||||
export function map(value: number, fromLow: number, fromHigh: number, toLow: number, toHigh: number): number {
|
||||
return ((value - fromLow) * (toHigh - toLow)) / (fromHigh - fromLow) + toLow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read one number from 7-bit I2C address.
|
||||
*/
|
||||
export function i2cReadNumber(address: number, format: NumberFormat): number {
|
||||
let buf = pins.i2cReadBuffer(address, pins.sizeOf(format))
|
||||
return buf.getNumber(format, 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* Write one number to a 7-bit I2C address.
|
||||
*/
|
||||
export function i2cWriteNumber(address: number, value: number, format: NumberFormat): void {
|
||||
let buf = createBuffer(pins.sizeOf(format))
|
||||
buf.setNumber(format, 0, value)
|
||||
pins.i2cWriteBuffer(address, buf)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size in bytes of specified number format.
|
||||
*/
|
||||
export function sizeOf(format: NumberFormat) {
|
||||
switch (format) {
|
||||
case NumberFormat.Int8LE:
|
||||
case NumberFormat.UInt8LE:
|
||||
case NumberFormat.Int8BE:
|
||||
case NumberFormat.UInt8BE:
|
||||
return 1;
|
||||
case NumberFormat.Int16LE:
|
||||
case NumberFormat.UInt16LE:
|
||||
case NumberFormat.Int16BE:
|
||||
case NumberFormat.UInt16BE:
|
||||
return 2;
|
||||
case NumberFormat.Int32LE:
|
||||
case NumberFormat.Int32BE:
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
interface Buffer {
|
||||
[index: number]: number;
|
||||
// rest defined in buffer.cpp
|
||||
}
|
||||
|
110
libs/microbit/shims.d.ts
vendored
110
libs/microbit/shims.d.ts
vendored
@ -1,90 +1,6 @@
|
||||
// Auto-generated. Do not edit.
|
||||
|
||||
|
||||
declare interface String {
|
||||
/**
|
||||
* Returns the character at the specified index.
|
||||
* @param pos The zero-based index of the desired character.
|
||||
*/
|
||||
//% shim=StringMethods::charAt
|
||||
charAt(pos: number): string;
|
||||
|
||||
/**
|
||||
* Returns the Unicode value of the character at the specified location.
|
||||
* @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.
|
||||
*/
|
||||
//% shim=StringMethods::charCodeAt
|
||||
charCodeAt(index: number): number;
|
||||
|
||||
/**
|
||||
* Returns a string that contains the concatenation of two or more strings.
|
||||
* @param other The string to append to the end of the string.
|
||||
*/
|
||||
//% shim=StringMethods::concat
|
||||
concat(other: string): string;
|
||||
|
||||
/**
|
||||
* Determines whether relative order of two strings (in ASCII encoding).
|
||||
* @param that String to compare to target string
|
||||
*/
|
||||
//% shim=StringMethods::compare
|
||||
compare(that: string): number;
|
||||
|
||||
/** Returns the length of a String object. */
|
||||
//% property shim=StringMethods::length
|
||||
length: number;
|
||||
}
|
||||
|
||||
|
||||
declare interface Boolean {
|
||||
/**
|
||||
* Returns a string representation of an object.
|
||||
*/
|
||||
//% shim=BooleanMethods::toString
|
||||
toString(): string;
|
||||
}
|
||||
declare namespace String {
|
||||
|
||||
/**
|
||||
* Make a string from the given ASCII character code.
|
||||
*/
|
||||
//% shim=String_::fromCharCode
|
||||
function fromCharCode(code: number): string;
|
||||
}
|
||||
|
||||
|
||||
declare interface Number {
|
||||
/**
|
||||
* Returns a string representation of a number.
|
||||
*/
|
||||
//% shim=NumberMethods::toString
|
||||
toString(): string;
|
||||
}
|
||||
declare namespace Math {
|
||||
|
||||
/**
|
||||
* Returns the value of a base expression taken to a specified power.
|
||||
* @param x The base value of the expression.
|
||||
* @param y The exponent value of the expression.
|
||||
*/
|
||||
//% shim=Math_::pow
|
||||
function pow(x: number, y: number): number;
|
||||
|
||||
/**
|
||||
* Returns a pseudorandom number between 0 and `max`.
|
||||
*/
|
||||
//% shim=Math_::random
|
||||
function random(max: number): number;
|
||||
|
||||
/**
|
||||
* Returns the square root of a number.
|
||||
* @param x A numeric expression.
|
||||
*/
|
||||
//% shim=Math_::sqrt
|
||||
function sqrt(x: number): number;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//% color=45 weight=31
|
||||
declare namespace images {
|
||||
@ -375,7 +291,7 @@ declare namespace control {
|
||||
*/
|
||||
//% weight=21 blockGap=12 blockId="control_raise_event" block="raise event|from source %src=control_event_source|with value %value=control_event_value" blockExternalInputs=1
|
||||
//% mode.defl=1 shim=control::raiseEvent
|
||||
function raiseEvent(src: number, value: number, mode: EventCreationMode): void;
|
||||
function raiseEvent(src: number, value: number, mode?: EventCreationMode): void;
|
||||
|
||||
/**
|
||||
* Raises an event in the event bus.
|
||||
@ -541,6 +457,18 @@ declare namespace pins {
|
||||
*/
|
||||
//% shim=pins::createBuffer
|
||||
function createBuffer(size: number): Buffer;
|
||||
|
||||
/**
|
||||
* Read `size` bytes from a 7-bit I2C `address`.
|
||||
*/
|
||||
//% repeat.defl=0 shim=pins::i2cReadBuffer
|
||||
function i2cReadBuffer(address: number, size: number, repeat?: boolean): Buffer;
|
||||
|
||||
/**
|
||||
* Write bytes to a 7-bit I2C `address`.
|
||||
*/
|
||||
//% repeat.defl=0 shim=pins::i2cWriteBuffer
|
||||
function i2cWriteBuffer(address: number, buf: Buffer, repeat?: boolean): void;
|
||||
}
|
||||
|
||||
|
||||
@ -577,6 +505,18 @@ declare namespace serial {
|
||||
|
||||
//% indexerGet=BufferMethods::getByte indexerSet=BufferMethods::setByte
|
||||
declare interface Buffer {
|
||||
/**
|
||||
* Write a number in specified format in the buffer.
|
||||
*/
|
||||
//% shim=BufferMethods::setNumber
|
||||
setNumber(format: NumberFormat, offset: number, value: number): void;
|
||||
|
||||
/**
|
||||
* Read a number in specified format from the buffer.
|
||||
*/
|
||||
//% shim=BufferMethods::getNumber
|
||||
getNumber(format: NumberFormat, offset: number): number;
|
||||
|
||||
/** Returns the length of a Buffer object. */
|
||||
//% property shim=BufferMethods::length
|
||||
length: number;
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "kindscript-microbit",
|
||||
"version": "0.2.15",
|
||||
"version": "0.2.24",
|
||||
"description": "BBC micro:bit target for KindScript",
|
||||
"keywords": [
|
||||
"JavaScript",
|
||||
@ -17,7 +17,6 @@
|
||||
"files": [
|
||||
"README.md",
|
||||
"kindtarget.json",
|
||||
"kindtheme.json",
|
||||
"built/*.js",
|
||||
"built/*.json",
|
||||
"built/*.d.ts",
|
||||
@ -30,6 +29,6 @@
|
||||
"typescript": "^1.8.7"
|
||||
},
|
||||
"dependencies": {
|
||||
"kindscript": "0.2.17"
|
||||
"kindscript": "0.2.25"
|
||||
}
|
||||
}
|
||||
|
@ -145,6 +145,7 @@ namespace ks.rt {
|
||||
|
||||
namespace ks.rt.basic {
|
||||
export var pause = thread.pause;
|
||||
export var forever = thread.forever;
|
||||
|
||||
export function showNumber(x: number, interval: number) {
|
||||
if (interval < 0) return;
|
||||
@ -198,17 +199,6 @@ namespace ks.rt.basic {
|
||||
scrollImage(leds, interval, 5);
|
||||
}
|
||||
|
||||
export function forever(a: RefAction) {
|
||||
function loop() {
|
||||
runtime.runFiberAsync(a)
|
||||
.then(() => Promise.delay(20))
|
||||
.then(loop)
|
||||
.done()
|
||||
}
|
||||
incr(a)
|
||||
loop()
|
||||
}
|
||||
|
||||
export function plotLeds(leds: Image): void {
|
||||
leds.copyTo(0, 5, board().image, 0)
|
||||
runtime.queueDisplayUpdate()
|
||||
|
Reference in New Issue
Block a user