Compare commits

...

28 Commits

Author SHA1 Message Date
5261b2b270 0.2.24 2016-04-05 13:54:55 -07:00
1adede163a Bump kindscript to 0.2.25 2016-04-05 13:54:53 -07:00
bb80874ef9 fixing docs enum 2016-04-05 13:54:48 -07:00
9e9d11cb94 0.2.23 2016-04-05 13:28:03 -07:00
c004aa4b1b Bump kindscript to 0.2.24 2016-04-05 13:28:01 -07:00
cdd4798945 namspace docs 2016-04-05 13:23:42 -07:00
0f56142317 updated about 2016-04-05 10:36:23 -07:00
6927085d64 0.2.22 2016-04-04 22:46:48 -07:00
c1b654f092 Bump kindscript to 0.2.23 2016-04-04 22:46:46 -07:00
2f551c97b5 0.2.21 2016-04-04 22:38:41 -07:00
01e6aab376 0.2.20 2016-04-04 22:33:39 -07:00
df17ba09ae updated links 2016-04-04 22:33:13 -07:00
9c09a427c9 0.2.19 2016-04-04 22:17:12 -07:00
4b35f0f751 Bump kindscript to 0.2.22 2016-04-04 22:17:10 -07:00
bb03cc4357 static microbit image (svg) 2016-04-04 22:15:52 -07:00
6f8b17e4ba 0.2.18 2016-04-04 21:52:10 -07:00
60c5dfc539 Bump kindscript to 0.2.21 2016-04-04 21:52:09 -07:00
bca5839b49 Forever moved to common sim 2016-04-04 21:52:03 -07:00
47e3737245 Use common helpers/core 2016-04-04 21:18:16 -07:00
b8d5ec853e Prep for moving common stuff out to main ks 2016-04-04 20:28:08 -07:00
46d42e5300 0.2.17 2016-04-04 19:13:35 -07:00
ffabb9b16d Bump kindscript to 0.2.19 2016-04-04 19:13:34 -07:00
d62c10d278 Use the improved default parameters 2016-04-04 19:11:33 -07:00
e2b2aa7ff1 0.2.16 2016-04-04 19:04:04 -07:00
664c8dcd35 Bump kindscript to 0.2.18 2016-04-04 19:04:03 -07:00
bd7430b642 Add Buffer.get/setNumber and i2c methods 2016-04-04 19:02:40 -07:00
61fd28d840 Move all target stuff to kindtarget.json 2016-04-04 18:03:52 -07:00
c33df897d5 Remove unused code 2016-04-04 12:56:57 -07:00
54 changed files with 766 additions and 953 deletions

View File

@ -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.

View File

@ -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, () => {})
```

View File

@ -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

View File

@ -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(() => {})
```

View File

@ -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

View File

@ -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(`
. . . . .
. . . . .

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)
```

View File

@ -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!")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(`

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(() => {})
```

View File

@ -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(`
. . . . .

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -21,7 +21,7 @@ Learn how to get the **acceleration**, `acceleration` in one of three specified
## Documentation
```docs
```cards
basic.forever(() => {
})
let x = 0

View File

@ -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)
![](/static/mb/blocks/contents-22.jpg)
[on logo up](/microbit/reference/on-logo-up)
![](/static/mb/on-logo-up-0.jpg)
[on logo down](/microbit/reference/on-logo-down)
![](/static/mb/on-logo-down-0.jpg)
[on screen up](/microbit/reference/on-screen-up)
![](/static/mb/on-screen-up-0.jpg)
[on screen down](/microbit/reference/on-screen-down)
![](/static/mb/on-screen-down-0.jpg)
[button is pressed](/microbit/reference/button-is-pressed)
![](/static/mb/button-is-pressed-0.png)
[compass heading](/microbit/reference/compass-heading)
![](/static/mb/compass-heading-0.png)
[temperature](/microbit/reference/temperature)
![](/static/mb/temperature-0.png)
[acceleration](/microbit/reference/input/acceleration)
![](/static/mb/acceleration-0.png)
[rotation](/microbit/reference/rotation)
![](/static/mb/rotation-0.png)
[magnetic force](/microbit/reference/magnetic-force)
![](/static/mb/magnetic-force-0.png)
[running time](/microbit/reference/running-time)
![](/static/mb/running-time-0.png)
### 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)
![](/static/mb/create-sprite-0.png)
[move](/microbit/reference/game/move)
![](/static/mb/game-library/move-0.png)
[turn](/microbit/reference/game/turn)
![](/static/mb/game-library/turn-0.png)
[change](/microbit/reference/game/change)
![](/static/mb/change-0.png)
[set](/microbit/reference/game/set)
![](/static/mb/blocks/contents-21.png)
[reports](/microbit/reference/reports)
![](/static/mb/game-library/position-0.png)
[touching](/microbit/reference/touching)
![](/static/mb/game-library/touching-0.png)
[touching edge](/microbit/reference/touching-edge)
![](/static/mb/game-library/touching-edge-0.png)
[if on edge, bounce](/microbit/reference/logic/if-on-edge-bounce)
![](/static/mb/game-library/if-on-edge-bounce-0.png)
[change score by](/microbit/reference/change-score-by)
![](/static/mb/game-library/pic1.png)
[score](/microbit/reference/score)
![](/static/mb/game-library/pic2.png)
[start countdown](/microbit/reference/start-countdown)
![](/static/mb/game-library/pic3.png)
[game over](/microbit/reference/game-over)
![](/static/mb/game-library/pic0.png)
### Music
[play tone](/microbit/reference/play-tone)
![](/static/mb/play-tone-0.jpg)
[ring tone](/microbit/reference/ring-tone)
![](/static/mb/ring-tone-0.jpg)
[rest](/microbit/reference/rest)
![](/static/mb/rest-0.jpg)
[tempo](/microbit/reference/tempo)
![](/static/mb/tempo-0.jpg)
[set tempo](/microbit/reference/set-tempo)
![](/static/mb/change-tempo-0.jpg)
[change tempo](/microbit/reference/music/set-tempo)
![](/static/mb/change-tempo-by-0.jpg)
### Comments
[comment](/microbit/reference/comment)
### Images
[show image](/microbit/reference/show-image)
![](/static/mb/show-image-0.png)
[scroll image](/microbit/reference/scroll-image)
![](/static/mb/scroll-image-0.png)
[create image](/microbit/reference/create-image)
![](/static/mb/create-image-0.png)
### ~
### ~column
### Pins
[digital read pin](/microbit/reference/pins/digital-read-pin)
![](/static/mb/digital-read-pin-0.png)
[digital write pin](/microbit/reference/pins/digital-write-pin)
![](/static/mb/digital-write-pin-0.png)
[analog read pin](/microbit/reference/pins/analog-read-pin)
![](/static/mb/analog-read-pin-0.png)
[analog write pin](/microbit/reference/pins/analog-write-pin)
![](/static/mb/blocks/contents-23.png)
[analog set period](/microbit/reference/pins/analog-set-period)
![](/static/mb/analog-set-period-0.png)
[servo write pin](/microbit/reference/pins/servo-write-pin)
![](/static/mb/servo-write-pin-0.png)
[servo set pulse](/microbit/reference/pins/servo-set-pulse)
![](/static/mb/servo-set-pulse-0.png)
[map](/microbit/reference/map)
![](/static/mb/map-0.png)
## Devices
Functions in this category require to be connected to a remote device.
[tell camera to](/microbit/reference/devices/tell-camera-to)
![](/static/mb/tell-camera-to-0.png)
[tell remote control to](/microbit/reference/devices/tell-remote-control-to)
![](/static/mb/tell-remote-control-to-0.png)
[raise alert to](/microbit/reference/devices/raise-alert-to)
![](/static/mb/raise-alert-to-0.png)
[on notified](/microbit/reference/on-notified)
![](/static/mb/on-notified-0.png)
[on gamepad button](/microbit/reference/on-gamepad-button)
![](/static/mb/on-gamepad-button-0.png)
[on notified](/microbit/reference/on-notified)
![](/static/mb/on-notified-0.png)
[signal strength](/microbit/reference/signal-strength)
![](/static/mb/blocks/contents-24.png)
[on signal strength changed](/microbit/reference/on-signal-strength-changed)
![](/static/mb/blocks/contents-25.png)
### ~

35
docs/reference/basic.md Normal file
View 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
View File

@ -0,0 +1,11 @@
# Control
```cards
control.inBackground(() => {
});
control.reset();
```

12
docs/reference/game.md Normal file
View 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
View File

@ -0,0 +1,21 @@
# Images
```cards
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . . .
`);
images.createBigImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . . .
`);
```

42
docs/reference/input.md Normal file
View 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
View 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
View 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
View 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

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

View File

@ -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) {

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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
View File

@ -0,0 +1,6 @@
namespace console {
export function log(msg: string) {
serial.writeString(msg);
serial.writeString("\r\n");
}
}

View File

@ -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
}
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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
}

View File

@ -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;

View File

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

View File

@ -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()