Compare commits
58 Commits
Author | SHA1 | Date | |
---|---|---|---|
0f273131f6 | |||
9ae0c48477 | |||
5f538f418e | |||
859b68b6e3 | |||
6576f7bd66 | |||
5a670f3291 | |||
7129487618 | |||
e1797b457a | |||
c82efa452d | |||
493014af01 | |||
fb4a96d81b | |||
bbf115f33c | |||
5d9c2cf590 | |||
b99231f6e2 | |||
2676907129 | |||
6f4c533ebb | |||
85dcaea979 | |||
8560b31657 | |||
b896588f45 | |||
0b4d4facfe | |||
52ad897ee3 | |||
72582f2a60 | |||
2b2048da7d | |||
e85fa990bd | |||
81a61538c3 | |||
cc8751bd09 | |||
03f933a1c8 | |||
10a77d9fef | |||
773f8a8688 | |||
f67743d935 | |||
237a57ee86 | |||
b80edb43fc | |||
6c9b609fe0 | |||
26d78768c0 | |||
6812767555 | |||
2aa7c91ca7 | |||
baf2c3247f | |||
c9536b0cf2 | |||
7fd7e15bd4 | |||
948b0ef304 | |||
715771b991 | |||
65d48f4b02 | |||
283c331a5e | |||
ba96e94fa7 | |||
7e1248b8dc | |||
cbe280187a | |||
761e4f38cd | |||
a9137f7761 | |||
3274e237cf | |||
5261b2b270 | |||
1adede163a | |||
bb80874ef9 | |||
9e9d11cb94 | |||
c004aa4b1b | |||
cdd4798945 | |||
0f56142317 | |||
6927085d64 | |||
c1b654f092 |
@ -1,3 +1,8 @@
|
|||||||
|
```sim
|
||||||
|
basic.forever(() => {
|
||||||
|
basic.showString("Hi!");
|
||||||
|
})
|
||||||
|
```
|
||||||
# About
|
# 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.
|
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.
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# Lessons
|
# Lessons
|
||||||
|
|
||||||
|
|
||||||
### @short Lessons
|
### @short Lessons
|
||||||
|
|
||||||
### ~column
|
### ~column
|
||||||
|
@ -1,460 +1,17 @@
|
|||||||
# Reference
|
# Reference
|
||||||
|
|
||||||
### @section full
|
```namespaces
|
||||||
|
basic.showString("Hello!");
|
||||||
### ~column
|
input.onButtonPressed(Button.A, () => {});
|
||||||
|
for (let i = 0;i<5;++i) {}
|
||||||
### Basic
|
if (true){}
|
||||||
|
|
||||||
[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)
|
|
||||||
|
|
||||||
```block
|
|
||||||
for(let i = 0;i<5;i++) {}
|
|
||||||
```
|
|
||||||
|
|
||||||
[repeat](/microbit/reference/loops/repeat)
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
[while](/microbit/reference/loops/while)
|
|
||||||
|
|
||||||
```block
|
|
||||||
while(true) {}
|
|
||||||
```
|
|
||||||
|
|
||||||
[forever](/microbit/reference/basic/forever)
|
|
||||||
|
|
||||||
```block
|
|
||||||
basic.forever(() => {})
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### ~
|
|
||||||
|
|
||||||
### ~column
|
|
||||||
|
|
||||||
### Logic
|
|
||||||
|
|
||||||
[if](/microbit/reference/logic/if)
|
|
||||||
|
|
||||||
```block
|
|
||||||
if(false) {
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
[Boolean](/microbit/reference/types/boolean) values: *true*; *false*
|
|
||||||
|
|
||||||
```block
|
|
||||||
true
|
|
||||||
false
|
|
||||||
```
|
|
||||||
|
|
||||||
Boolean binary operators: *and* (conjunction); *or* (disjunction)
|
|
||||||
|
|
||||||
```block
|
|
||||||
true && false;
|
|
||||||
true || false;
|
|
||||||
```
|
|
||||||
|
|
||||||
Boolean negation operator
|
|
||||||
|
|
||||||
```block
|
|
||||||
!true
|
|
||||||
```
|
|
||||||
|
|
||||||
Comparison operators (=, !=, <, >, <=, >=)
|
|
||||||
|
|
||||||
```block
|
|
||||||
0 == 0;
|
|
||||||
1 !- 0;
|
|
||||||
0 < 1;
|
|
||||||
1 > 0;
|
|
||||||
0 <= 1;
|
|
||||||
1 >= 0;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Variables
|
|
||||||
|
|
||||||
[Assign](/microbit/reference/variables/assign) (set) a variable's value
|
|
||||||
|
|
||||||
```block
|
|
||||||
let x = 0;
|
let x = 0;
|
||||||
```
|
|
||||||
|
|
||||||
Get a variable's value
|
|
||||||
|
|
||||||
```block
|
|
||||||
let x = 0;
|
|
||||||
x;
|
|
||||||
```
|
|
||||||
|
|
||||||
[Change](/microbit/reference/variables/change-var) a variable's value
|
|
||||||
|
|
||||||
```block
|
|
||||||
let x = 0;
|
|
||||||
x+=1;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Math
|
|
||||||
|
|
||||||
[Numeric](/microbit/reference/types/number) values: 0, 1, 2, ...
|
|
||||||
|
|
||||||
```block
|
|
||||||
0;
|
|
||||||
1;
|
|
||||||
2;
|
|
||||||
```
|
|
||||||
|
|
||||||
Arithmetic binary operation (+, -, *, /)
|
|
||||||
|
|
||||||
```block
|
|
||||||
0+1;
|
|
||||||
0-1;
|
|
||||||
1*2;
|
|
||||||
3/4;
|
|
||||||
```
|
|
||||||
|
|
||||||
Absolute value
|
|
||||||
|
|
||||||
```block
|
|
||||||
Math.abs(-5);
|
|
||||||
```
|
|
||||||
|
|
||||||
Minimum/maximum of two values
|
|
||||||
|
|
||||||
```block
|
|
||||||
Math.min(0, 1);
|
|
||||||
Math.max(0, 1);
|
|
||||||
```
|
|
||||||
|
|
||||||
Random value
|
|
||||||
|
|
||||||
```block
|
|
||||||
Math.random(5);
|
Math.random(5);
|
||||||
|
led.plot(0,0);
|
||||||
|
radio.sendNumber(0);
|
||||||
|
music.playTone(music.noteFrequency(Note.C), music.beat(BeatFraction.Whole));
|
||||||
|
game.createSprite(2,2);
|
||||||
|
pins.digitalReadPin(DigitalPin.P0);
|
||||||
|
serial.writeLine("Hello!");
|
||||||
|
control.inBackground(() => {});
|
||||||
```
|
```
|
||||||
|
|
||||||
### 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(() => {
|
||||||
|
|
||||||
|
});
|
||||||
|
```
|
@ -126,15 +126,3 @@ This is useful if you have something connected at the other end. As explained ab
|
|||||||
let msg = serial.readString()
|
let msg = serial.readString()
|
||||||
```
|
```
|
||||||
|
|
||||||
* reads an image
|
|
||||||
|
|
||||||
```
|
|
||||||
img = serial.readImage()
|
|
||||||
```
|
|
||||||
|
|
||||||
* reads the state of the screen from serial
|
|
||||||
|
|
||||||
```
|
|
||||||
serial.readScreen()
|
|
||||||
```
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
```
|
39
docs/reference/logic.md
Normal file
39
docs/reference/logic.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Logic
|
||||||
|
|
||||||
|
[if](/microbit/reference/logic/if)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
if(true) {
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[Boolean](/microbit/reference/types/boolean) values: *true*; *false*
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
true
|
||||||
|
false
|
||||||
|
```
|
||||||
|
|
||||||
|
Boolean binary operators: *and* (conjunction); *or* (disjunction)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
true && false;
|
||||||
|
true || false;
|
||||||
|
```
|
||||||
|
|
||||||
|
Boolean negation operator
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
!true
|
||||||
|
```
|
||||||
|
|
||||||
|
Comparison operators (=, !=, <, >, <=, >=)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
0 == 0;
|
||||||
|
1 !- 0;
|
||||||
|
0 < 1;
|
||||||
|
1 > 0;
|
||||||
|
0 <= 1;
|
||||||
|
1 >= 0;
|
||||||
|
```
|
26
docs/reference/loops.md
Normal file
26
docs/reference/loops.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Loops
|
||||||
|
|
||||||
|
Repeat code.
|
||||||
|
|
||||||
|
|
||||||
|
[for](/reference/loops/for)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
for(let i = 0;i<5;i++) {}
|
||||||
|
```
|
||||||
|
|
||||||
|
[repeat](/reference/loops/repeat)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[while](/reference/loops/while)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
while(true) {}
|
||||||
|
```
|
||||||
|
|
||||||
|
[forever](/reference/basic/forever)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
basic.forever(() => {})
|
||||||
|
```
|
37
docs/reference/math.md
Normal file
37
docs/reference/math.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Math
|
||||||
|
|
||||||
|
[Numeric](/reference/types/number) values: 0, 1, 2, ...
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
0;
|
||||||
|
1;
|
||||||
|
2;
|
||||||
|
```
|
||||||
|
|
||||||
|
Arithmetic binary operation (+, -, *, /)
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
0+1;
|
||||||
|
0-1;
|
||||||
|
1*2;
|
||||||
|
3/4;
|
||||||
|
```
|
||||||
|
|
||||||
|
Absolute value
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
Math.abs(-5);
|
||||||
|
```
|
||||||
|
|
||||||
|
Minimum/maximum of two values
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
Math.min(0, 1);
|
||||||
|
Math.max(0, 1);
|
||||||
|
```
|
||||||
|
|
||||||
|
Random value
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
Math.random(5);
|
||||||
|
```
|
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);
|
||||||
|
```
|
17
docs/reference/radio.md
Normal file
17
docs/reference/radio.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Radio
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```cards
|
||||||
|
radio.sendNumber(0);
|
||||||
|
radio.sendNumbers(0, 0, 0, 0);
|
||||||
|
radio.onDataReceived(() => {
|
||||||
|
|
||||||
|
});
|
||||||
|
radio.receiveNumber();
|
||||||
|
radio.receivedNumberAt(0);
|
||||||
|
radio.receivedSignalStrength();
|
||||||
|
radio.setGroup(0);
|
||||||
|
radio.setTransmitPower(0);
|
||||||
|
```
|
21
docs/reference/variables.md
Normal file
21
docs/reference/variables.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
## Variables
|
||||||
|
|
||||||
|
[Assign](/reference/variables/assign) (set) a variable's value
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
let x = 0;
|
||||||
|
```
|
||||||
|
|
||||||
|
Get a variable's value
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
let x = 0;
|
||||||
|
x;
|
||||||
|
```
|
||||||
|
|
||||||
|
[Change](/reference/variables/change-var) a variable's value
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
let x = 0;
|
||||||
|
x+=1;
|
||||||
|
```
|
2
docs/static/microbitlogo.svg
vendored
Normal file
2
docs/static/microbitlogo.svg
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||||
|
<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' width='193.50101' height='32.755001' version='1.1'><g transform='translate(-1.3555,0.63251107)'><title>micro:bit logo</title><path d='m 38.7185,20.11349 c -1.677,0 -3.035,-1.364 -3.035,-3.042 0,-1.678 1.357,-3.038 3.035,-3.038 1.684,0 3.039,1.36 3.039,3.038 0,1.678 -1.355,3.042 -3.039,3.042 m -22.311,-6.077 c -1.677,0 -3.042,1.357 -3.042,3.035 0,1.678 1.363,3.042 3.042,3.042 1.674,0 3.036,-1.364 3.036,-3.042 0,-1.678 -1.363,-3.035 -3.036,-3.035 m -0.003,-5.99 22.576,0 c 4.979,0 9.027,4.047 9.027,9.027 0,4.979 -4.049,9.031 -9.027,9.031 l -22.576,0 c -4.977,0 -9.03,-4.053 -9.03,-9.031 -0.001,-4.98 4.053,-9.027 9.03,-9.027 m 22.576,24.076 c 8.299,0 15.047,-6.75 15.047,-15.049 0,-8.299 -6.748,-15.051 -15.047,-15.051 l -22.576,0 c -8.299,0 -15.049,6.752 -15.049,15.051 0,8.299 6.75,15.049 15.049,15.049 l 22.576,0 m 112.099,-21.953 c 0,-1.453 -1.195,-2.633 -2.662,-2.633 -1.455,0 -2.639,1.18 -2.639,2.633 0,1.471 1.184,2.672 2.639,2.672 1.466,0 2.662,-1.202 2.662,-2.672 z m -66.786,5.445 c 0,-4.764 -2.893,-8.093 -7.031,-8.093 -2.027,0 -3.814,0.851 -5.223,2.47 -1.467,-1.661 -3.152,-2.47 -5.127,-2.47 -4.162,0 -7.066,3.329 -7.066,8.093 l 0,10.466 3.812,0 0,-10.644 c 0,-2.416 1.336,-4.104 3.254,-4.104 1.617,0 3.25,1.409 3.25,4.104 l 0,10.645 3.848,0 0,-10.645 c 0,-2.416 1.338,-4.104 3.252,-4.104 1.863,0 3.217,1.727 3.217,4.104 l 0,10.645 3.814,0 0,-10.467 z m 6.953,-7.632 -3.846,0 0,18.099 3.846,0 0,-18.099 z m 0.569,-5.128 c 0,-1.377 -1.096,-2.454 -2.492,-2.454 -1.4,0 -2.453,1.054 -2.453,2.454 0,1.398 1.078,2.494 2.453,2.494 1.375,0 2.492,-1.117 2.492,-2.494 z m 18.328,20.914 0.576,-0.521 -2.828,-2.658 -0.488,0.455 c -1.252,1.149 -2.504,1.686 -3.945,1.686 -3.064,0 -5.557,-2.557 -5.557,-5.699 0,-3.121 2.492,-5.66 5.557,-5.66 1.432,0 2.646,0.521 3.949,1.693 l 0.512,0.46 2.748,-2.802 -0.49,-0.502 c -1.754,-1.793 -4.016,-2.696 -6.719,-2.696 -2.459,0 -4.869,1.022 -6.605,2.798 -1.738,1.734 -2.691,4.119 -2.691,6.709 0,2.596 0.953,4.979 2.684,6.705 1.771,1.811 4.117,2.811 6.615,2.811 2.401,-0.003 4.647,-0.937 6.682,-2.779 z m 7.25,-6.947 c 0,-3.322 1.145,-4.686 4.217,-5.029 l 0.641,-0.07 0,-3.797 -0.777,0.058 c -5.629,0.458 -8.143,3.247 -8.143,9.048 l 0,9.051 4.062,0 0,-9.261 0,0 z m 21.998,6.923 c 1.762,-1.756 2.729,-4.146 2.729,-6.715 0,-2.565 -0.967,-4.951 -2.723,-6.702 -1.77,-1.809 -4.105,-2.806 -6.576,-2.806 -2.492,0 -4.84,0.997 -6.613,2.806 -1.752,1.792 -2.721,4.174 -2.721,6.702 0,2.53 0.969,4.916 2.721,6.707 1.771,1.81 4.121,2.808 6.613,2.808 2.472,0 4.808,-0.998 6.57,-2.8 z m -1.229,-6.714 c 0,3.18 -2.361,5.665 -5.377,5.665 -2.945,0 -5.346,-2.541 -5.346,-5.665 0,-3.137 2.398,-5.695 5.346,-5.695 2.963,-0.002 5.377,2.558 5.377,5.695 z m 12.917,6.418 c 0,-1.468 -1.195,-2.667 -2.662,-2.667 -1.455,0 -2.639,1.199 -2.639,2.667 0,1.453 1.184,2.632 2.639,2.632 1.466,0 2.662,-1.179 2.662,-2.632 z m 19.507,0.296 c 1.76,-1.756 2.73,-4.146 2.73,-6.715 0,-2.528 -0.973,-4.911 -2.729,-6.702 -1.746,-1.787 -4.08,-2.77 -6.574,-2.77 -2.035,0 -3.84,0.572 -5.484,1.744 l 0,-9.934 -3.816,0 0.008,15.582 c -0.037,0.411 -0.037,0.821 -0.037,1.198 0,6.119 3.836,10.396 9.33,10.396 2.475,0.001 4.807,-0.997 6.572,-2.799 z m -1.013,-6.677 c 0,3.123 -2.494,5.66 -5.559,5.66 -3.115,0 -5.557,-2.484 -5.557,-5.66 0,-3.143 2.494,-5.698 5.557,-5.698 3.065,0 5.559,2.556 5.559,5.698 z m 10.881,-9.085 -3.846,0 0,18.099 3.846,0 0,-18.099 z m 0.572,-5.128 c 0,-1.377 -1.098,-2.454 -2.492,-2.454 -1.4,0 -2.457,1.054 -2.457,2.454 0,1.398 1.076,2.494 2.457,2.494 1.373,0 2.492,-1.117 2.492,-2.494 z m 13.83,19.759 -0.619,-0.089 c -2.855,-0.409 -4.133,-2.104 -4.133,-5.495 l 0,-5.126 4.752,0 0,-3.674 -4.752,0 0,-4.006 -3.887,0 0,4.006 -1.662,0 0,3.674 1.662,0 0,4.525 c 0,6.215 2.113,8.932 7.783,10.029 l 0.855,0.164 0,-4.008 0.001,0 z' style='fill:#000000' /></g></svg>
|
After Width: | Height: | Size: 3.8 KiB |
File diff suppressed because one or more lines are too long
30
libs/i2c-fram/README.md
Normal file
30
libs/i2c-fram/README.md
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# I2C FRAM driver
|
||||||
|
|
||||||
|
This library provides a driver for this FRAM part: https://www.adafruit.com/products/1895
|
||||||
|
|
||||||
|
The memory is accessed one byte at a time. The library provides a utility functions
|
||||||
|
to write an entire buffer.
|
||||||
|
|
||||||
|
## Reading/writing byte
|
||||||
|
|
||||||
|
```
|
||||||
|
let addr = 100
|
||||||
|
i2c_fram.writeByte(addr, 42)
|
||||||
|
let val = i2c_fram.readByte(addr)
|
||||||
|
console.log(`${addr}: ${val}`)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Reading/writing a buffer
|
||||||
|
|
||||||
|
This code will log current time and acceleration in X axis every second.
|
||||||
|
|
||||||
|
```
|
||||||
|
let bufSz = 8
|
||||||
|
for (let addr = 0; addr < 0x8000; addr += bufSz) {
|
||||||
|
let buf = pins.createBuffer(bufSz)
|
||||||
|
buf.setNumber(NumberFormat.Int32LE, 0, input.runningTime())
|
||||||
|
buf.setNumber(NumberFormat.Int32LE, 4, input.acceleration(Dimension.X))
|
||||||
|
i2c_fram.writeBuffer(addr, buf)
|
||||||
|
basic.pause(1000)
|
||||||
|
}
|
||||||
|
```
|
55
libs/i2c-fram/fram.ts
Normal file
55
libs/i2c-fram/fram.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
namespace i2c_fram {
|
||||||
|
const devaddr = 0x50;
|
||||||
|
const memend = 0x7fff;
|
||||||
|
|
||||||
|
//% shim=ksrt::panic
|
||||||
|
function panic(code: number) { }
|
||||||
|
|
||||||
|
function die() { panic(142) }
|
||||||
|
|
||||||
|
export function readByte(addr: number) {
|
||||||
|
if (addr < 0 || addr > memend)
|
||||||
|
die();
|
||||||
|
|
||||||
|
let buf = pins.createBuffer(2)
|
||||||
|
buf[0] = (addr >> 8) & 0xff;
|
||||||
|
buf[1] = addr & 0xff;
|
||||||
|
|
||||||
|
pins.i2cWriteBuffer(devaddr, buf);
|
||||||
|
buf = pins.i2cReadBuffer(devaddr, 1);
|
||||||
|
|
||||||
|
return buf[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeByte(addr: number, val: number) {
|
||||||
|
if (addr < 0 || addr > memend)
|
||||||
|
die();
|
||||||
|
|
||||||
|
if (val < 0 || val > 0xff)
|
||||||
|
die();
|
||||||
|
|
||||||
|
let buf = pins.createBuffer(3)
|
||||||
|
|
||||||
|
buf[0] = (addr >> 8) & 0xff;
|
||||||
|
buf[1] = addr & 0xff;
|
||||||
|
buf[2] = val;
|
||||||
|
|
||||||
|
pins.i2cWriteBuffer(devaddr, buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function readBuffer(addr: number, length: number) {
|
||||||
|
if (addr < 0 || length < 0 || (addr + length) > memend)
|
||||||
|
die();
|
||||||
|
let buf = pins.createBuffer(length)
|
||||||
|
for (let i = 0; i < length; ++i)
|
||||||
|
buf[i] = readByte(addr + i)
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeBuffer(addr:number, buf: Buffer) {
|
||||||
|
if (addr < 0 || (addr + buf.length) > memend)
|
||||||
|
die();
|
||||||
|
for (let i = 0; i < buf.length; ++i)
|
||||||
|
writeByte(addr + i, buf[i])
|
||||||
|
}
|
||||||
|
}
|
16
libs/i2c-fram/ftest.ts
Normal file
16
libs/i2c-fram/ftest.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
i2c_fram.writeByte(100, 42)
|
||||||
|
i2c_fram.writeByte(101, 108)
|
||||||
|
|
||||||
|
function toBuf(arr: number[]) {
|
||||||
|
let buf = pins.createBuffer(arr.length)
|
||||||
|
for (let i = 0; i < arr.length; ++i)
|
||||||
|
buf[i] = arr[i]
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_fram.writeBuffer(98, toBuf([1, 2, 3, 4, 5, 6, 7]))
|
||||||
|
|
||||||
|
console.log("100:" + i2c_fram.readByte(100))
|
||||||
|
console.log("101:" + i2c_fram.readByte(101))
|
||||||
|
|
||||||
|
|
16
libs/i2c-fram/kind.json
Normal file
16
libs/i2c-fram/kind.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "i2c-fram",
|
||||||
|
"description": "AdaFruit I2C FRAM driver for micro:bit",
|
||||||
|
"files": [
|
||||||
|
"README.md",
|
||||||
|
"fram.ts"
|
||||||
|
],
|
||||||
|
"testFiles": [
|
||||||
|
"ftest.ts"
|
||||||
|
],
|
||||||
|
"public": true,
|
||||||
|
"dependencies": {
|
||||||
|
"microbit": "file:../microbit"
|
||||||
|
},
|
||||||
|
"installedVersion": "hhneqa"
|
||||||
|
}
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Communicate data using radio packets
|
||||||
|
*/
|
||||||
//% color=270 weight=34
|
//% color=270 weight=34
|
||||||
namespace radio {
|
namespace radio {
|
||||||
/**
|
/**
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Runtime and event utilities.
|
||||||
|
*/
|
||||||
//% weight=1 color="#333333"
|
//% weight=1 color="#333333"
|
||||||
namespace control {
|
namespace control {
|
||||||
|
|
||||||
|
3
libs/microbit/core.d.ts
vendored
3
libs/microbit/core.d.ts
vendored
@ -153,6 +153,9 @@ declare interface Number {
|
|||||||
toString(): string;
|
toString(): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Numbers and arithmetic operators
|
||||||
|
*/
|
||||||
declare namespace Math {
|
declare namespace Math {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,6 +18,9 @@ enum LedSpriteProperty {
|
|||||||
Blink
|
Blink
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A single-LED sprite game engine
|
||||||
|
*/
|
||||||
//% color=176 weight=32
|
//% color=176 weight=32
|
||||||
namespace game {
|
namespace game {
|
||||||
var _score: number = 0;
|
var _score: number = 0;
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
#include "ksbit.h"
|
#include "ksbit.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creation, manipulation and display of LED images.
|
||||||
|
*/
|
||||||
//% color=45 weight=31
|
//% color=45 weight=31
|
||||||
namespace images {
|
namespace images {
|
||||||
/**
|
/**
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Events and data from sensors
|
||||||
|
*/
|
||||||
//% color=300 weight=99
|
//% color=300 weight=99
|
||||||
namespace input {
|
namespace input {
|
||||||
/**
|
/**
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Control of the LED screen.
|
||||||
|
*/
|
||||||
//% color=3 weight=35
|
//% color=3 weight=35
|
||||||
namespace led {
|
namespace led {
|
||||||
|
|
||||||
|
@ -74,6 +74,9 @@ enum BeatFraction {
|
|||||||
Sixteenth = 16
|
Sixteenth = 16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generation of music tones through pin ``P0``.
|
||||||
|
*/
|
||||||
//% color=52 weight=33
|
//% color=52 weight=33
|
||||||
namespace music {
|
namespace music {
|
||||||
var beatsPerMinute: number = 120;
|
var beatsPerMinute: number = 120;
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Control currents in Pins for analog/digital signals, servos, i2c, ...
|
||||||
|
*/
|
||||||
//% color=351 weight=30
|
//% color=351 weight=30
|
||||||
namespace pins {
|
namespace pins {
|
||||||
/**
|
/**
|
||||||
|
@ -19,20 +19,4 @@ namespace serial {
|
|||||||
void writeString(StringData *text) {
|
void writeString(StringData *text) {
|
||||||
uBit.serial.sendString(ManagedString(text));
|
uBit.serial.sendString(ManagedString(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the current pixel values, byte-per-pixel, over serial.
|
|
||||||
*/
|
|
||||||
//%
|
|
||||||
void writeScreen() {
|
|
||||||
uBit.serial.sendDisplayState();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the screen from serial.
|
|
||||||
*/
|
|
||||||
//%
|
|
||||||
void readScreen() {
|
|
||||||
uBit.serial.readDisplayState();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Reading and writing data over a serial connection.
|
||||||
|
*/
|
||||||
//% weight=2 color=30
|
//% weight=2 color=30
|
||||||
namespace serial {
|
namespace serial {
|
||||||
/**
|
/**
|
||||||
|
16
libs/microbit/shims.d.ts
vendored
16
libs/microbit/shims.d.ts
vendored
@ -1,7 +1,9 @@
|
|||||||
// Auto-generated. Do not edit.
|
// Auto-generated. Do not edit.
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creation, manipulation and display of LED images.
|
||||||
|
*/
|
||||||
//% color=45 weight=31
|
//% color=45 weight=31
|
||||||
declare namespace images {
|
declare namespace images {
|
||||||
|
|
||||||
@ -487,18 +489,6 @@ declare namespace serial {
|
|||||||
*/
|
*/
|
||||||
//% shim=serial::writeString
|
//% shim=serial::writeString
|
||||||
function writeString(text: string): void;
|
function writeString(text: string): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the current pixel values, byte-per-pixel, over serial.
|
|
||||||
*/
|
|
||||||
//% shim=serial::writeScreen
|
|
||||||
function writeScreen(): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the screen from serial.
|
|
||||||
*/
|
|
||||||
//% shim=serial::readScreen
|
|
||||||
function readScreen(): void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
47
libs/neopixel/README.md
Normal file
47
libs/neopixel/README.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# NeoPixel driver
|
||||||
|
|
||||||
|
This library provides a driver for various Neo Pixel LED strips,
|
||||||
|
see https://www.adafruit.com/category/168
|
||||||
|
|
||||||
|
NeoPixels consist of a number of RGB LEDs, every one of them controlled
|
||||||
|
separately.
|
||||||
|
|
||||||
|
## Basic usage
|
||||||
|
|
||||||
|
```
|
||||||
|
// Create a NeoPixel driver - specify the number of LEDs:
|
||||||
|
let strip = neopixel.create(24)
|
||||||
|
|
||||||
|
// set pixel colors
|
||||||
|
strip.setPix(0, 255, 255, 255) // white
|
||||||
|
strip.setPix(1, 255, 0, 0) // red
|
||||||
|
strip.setPix(2, 0, 255, 0) // green
|
||||||
|
strip.setPix(3, 0, 0, 255) // blue
|
||||||
|
|
||||||
|
// send the data to the strip
|
||||||
|
strip.display()
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `strip.setPin()` if your strip is not at `P0`.
|
||||||
|
|
||||||
|
Use `strip.setBrigthness()` to lower the brightness (it's maxed out by default).
|
||||||
|
|
||||||
|
Use `strip.shift()` or `strip.rotate()` to shift the lights around.
|
||||||
|
|
||||||
|
## Example: Using accelerometer to control colors
|
||||||
|
|
||||||
|
This little program will let the position of the microbit control the color of the first LED.
|
||||||
|
This first LED will then get shifted further away every 100ms.
|
||||||
|
|
||||||
|
```
|
||||||
|
let strip = neopixel.create(24)
|
||||||
|
while (true) {
|
||||||
|
let x = input.acceleration(Dimension.X) / 2
|
||||||
|
let y = input.acceleration(Dimension.Y) / 2
|
||||||
|
let z = input.acceleration(Dimension.Z) / 2
|
||||||
|
strip.setPix(0, x, y, -z);
|
||||||
|
strip.shift(1);
|
||||||
|
strip.display();
|
||||||
|
basic.pause(100);
|
||||||
|
}
|
||||||
|
```
|
@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "neppixel",
|
"name": "neopixel",
|
||||||
"description": "AdaFruit NeoPixel driver for micro:bit",
|
"description": "AdaFruit NeoPixel driver for micro:bit",
|
||||||
"files": [
|
"files": [
|
||||||
|
"README.md",
|
||||||
"neopixel.ts",
|
"neopixel.ts",
|
||||||
"sendbuffer.asm"
|
"sendbuffer.asm"
|
||||||
],
|
],
|
||||||
@ -16,5 +17,6 @@
|
|||||||
"public": true,
|
"public": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"microbit": "file:../microbit"
|
"microbit": "file:../microbit"
|
||||||
}
|
},
|
||||||
|
"installedVersion": "zbhlje"
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ namespace neopixel {
|
|||||||
/**
|
/**
|
||||||
* Shift LEDs forward.
|
* Shift LEDs forward.
|
||||||
*/
|
*/
|
||||||
shift(off: number): void {
|
shift(off: number = 1): void {
|
||||||
this.buf.shift(-off * 3)
|
this.buf.shift(-off * 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,92 +1,47 @@
|
|||||||
basic.showLeds(`
|
let strip = neopixel.create(24);
|
||||||
# . . . .
|
let br = 100;
|
||||||
. . . . .
|
strip.setBrigthness(100);
|
||||||
. . # . .
|
input.onButtonPressed(Button.B, () => {
|
||||||
. . . . .
|
br = br + 20;
|
||||||
. . . . #
|
if (br > 255) {
|
||||||
`)
|
br = 5;
|
||||||
console.log("Start")
|
}
|
||||||
|
strip.setBrigthness(br);
|
||||||
|
});
|
||||||
|
|
||||||
// Create a NeoPixel driver - specify the number of LEDs:
|
let rotationMode = false;
|
||||||
let strip = neopixel.create(7);
|
input.onButtonPressed(Button.A, () => {
|
||||||
|
rotationMode = !rotationMode;
|
||||||
|
if (rotationMode) {
|
||||||
|
basic.showLeds(`
|
||||||
|
. # # # .
|
||||||
|
# . . . #
|
||||||
|
# . . . #
|
||||||
|
# . . . #
|
||||||
|
. # # # .
|
||||||
|
`);
|
||||||
|
} else {
|
||||||
|
basic.showLeds(`
|
||||||
|
. . # . .
|
||||||
|
. . . # .
|
||||||
|
# # # # #
|
||||||
|
. . . # .
|
||||||
|
. . # . .
|
||||||
|
`);
|
||||||
|
|
||||||
// If your strip is not at P0, specify the pin.
|
}
|
||||||
strip.setPin(DigitalPin.P0)
|
});
|
||||||
|
|
||||||
// Brightness defaults to 255 (very bright); 0 is completely off.
|
while (true) {
|
||||||
strip.setBrigthness(20)
|
let x = input.acceleration(Dimension.X) / 2
|
||||||
|
let y = input.acceleration(Dimension.Y) / 2
|
||||||
// Set pixels - pixel number, followed by red, green and blue values, between 0 and 255.
|
let z = input.acceleration(Dimension.Z) / 2
|
||||||
strip.setPix(0, 255, 255, 255);
|
if (rotationMode) {
|
||||||
strip.setPix(1, 0, 255, 255);
|
strip.rotate();
|
||||||
strip.setPix(2, 255, 0, 255);
|
} else {
|
||||||
strip.setPix(3, 255, 255, 0);
|
strip.setPix(0, x, y, -z);
|
||||||
|
strip.shift(1);
|
||||||
console.log("Send!")
|
}
|
||||||
|
|
||||||
// Send the image to the strip.
|
|
||||||
strip.display();
|
|
||||||
basic.pause(500);
|
|
||||||
|
|
||||||
console.log("Sent!")
|
|
||||||
|
|
||||||
// Green light travelling the strip:
|
|
||||||
for (let l = 0; l < strip.length(); l++) {
|
|
||||||
strip.clear();
|
|
||||||
strip.setPix(l, 0, 255, 0);
|
|
||||||
strip.display();
|
strip.display();
|
||||||
basic.pause(100);
|
basic.pause(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
let special = false;
|
|
||||||
let numcol = 0;
|
|
||||||
input.onButtonPressed(Button.A, () => {
|
|
||||||
special = true;
|
|
||||||
let r = 0;
|
|
||||||
let g = 0;
|
|
||||||
let b = 0;
|
|
||||||
if (numcol == 0) {
|
|
||||||
r = 255;
|
|
||||||
g = 255;
|
|
||||||
b = 255;
|
|
||||||
} else if (numcol == 1) {
|
|
||||||
r = 255;
|
|
||||||
} else if (numcol == 2) {
|
|
||||||
b = 255;
|
|
||||||
} else if (numcol == 3) {
|
|
||||||
r = 255;
|
|
||||||
g = 255;
|
|
||||||
} else if (numcol == 4) {
|
|
||||||
r = 10;
|
|
||||||
g = 10;
|
|
||||||
b = 10;
|
|
||||||
}
|
|
||||||
numcol = (numcol + 1) % 5;
|
|
||||||
for (let k = 0; k < 7; k++) {
|
|
||||||
strip.setPix(k, r, g, b);
|
|
||||||
}
|
|
||||||
strip.display();
|
|
||||||
});
|
|
||||||
|
|
||||||
control.inBackground(() => {
|
|
||||||
for (let j = 0; j < 2000000; j++) {
|
|
||||||
if (special) {
|
|
||||||
basic.pause(100);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let r1 = (0 + j * 2) & 63;
|
|
||||||
let g1 = (20 + j * 1) & 63;
|
|
||||||
let b1 = (30 + j * 3) & 63;
|
|
||||||
for (let i = 0; i < strip.length(); i++) {
|
|
||||||
strip.setPix(i, (r1 - i) * 20, (g1 - i) * 20, (b1 - i) * 20);
|
|
||||||
}
|
|
||||||
strip.display()
|
|
||||||
basic.pause(60);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
control.inBackground(() => {
|
|
||||||
while (true) {
|
|
||||||
basic.showString("XMAS!", 150);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "kindscript-microbit",
|
"name": "kindscript-microbit",
|
||||||
"version": "0.2.21",
|
"version": "0.2.41",
|
||||||
"description": "BBC micro:bit target for KindScript",
|
"description": "BBC micro:bit target for KindScript",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"JavaScript",
|
"JavaScript",
|
||||||
@ -29,6 +29,6 @@
|
|||||||
"typescript": "^1.8.7"
|
"typescript": "^1.8.7"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"kindscript": "0.2.22"
|
"kindscript": "0.2.42"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
114
sim/simsvg.ts
114
sim/simsvg.ts
@ -1,4 +1,5 @@
|
|||||||
namespace ks.rt.micro_bit {
|
namespace ks.rt.micro_bit {
|
||||||
|
const Svg = ks.rt.Svg;
|
||||||
|
|
||||||
export interface IBoardTheme {
|
export interface IBoardTheme {
|
||||||
accent?: string;
|
accent?: string;
|
||||||
@ -46,119 +47,6 @@ namespace ks.rt.micro_bit {
|
|||||||
disableTilt?:boolean;
|
disableTilt?:boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Svg {
|
|
||||||
static pt : SVGPoint;
|
|
||||||
static cursorPoint(pt: SVGPoint, svg: SVGSVGElement, evt : MouseEvent) : SVGPoint {
|
|
||||||
pt.x = evt.clientX;
|
|
||||||
pt.y = evt.clientY;
|
|
||||||
return pt.matrixTransform(svg.getScreenCTM().inverse());
|
|
||||||
}
|
|
||||||
|
|
||||||
static rotateElement(el : SVGElement, originX : number ,originY : number,degrees:number){
|
|
||||||
el.setAttribute(
|
|
||||||
'transform',
|
|
||||||
`translate(${originX},${originY}) rotate(${degrees+90}) translate(${-originX},${-originY})`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static elt(name:string) : SVGElement {
|
|
||||||
return document.createElementNS("http://www.w3.org/2000/svg", name)
|
|
||||||
}
|
|
||||||
|
|
||||||
static hydrate(el : SVGElement, props: any) {
|
|
||||||
for(let k in props) {
|
|
||||||
if (k == "title") {
|
|
||||||
Svg.title(el, props[k])
|
|
||||||
} else el.setAttributeNS(null, k, props[k])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static child(parent : Element, name: string, props: any) : SVGElement {
|
|
||||||
var el = <SVGElement>Svg.elt(name);
|
|
||||||
Svg.hydrate(el, props);
|
|
||||||
parent.appendChild(el);
|
|
||||||
return el;
|
|
||||||
}
|
|
||||||
|
|
||||||
static path(parent: Element, cls: string, data:string, title?: string) : SVGElement {
|
|
||||||
let p : any = {class:cls, d:data};
|
|
||||||
if (title) p["title"] = title;
|
|
||||||
return Svg.child(parent, "path", p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static fill(el: SVGElement, c : string) {
|
|
||||||
(<SVGStylable><any>el).style.fill = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
static fills(els: SVGElement[], c : string) {
|
|
||||||
els.forEach(el => (<SVGStylable><any>el).style.fill = c);
|
|
||||||
}
|
|
||||||
|
|
||||||
static buttonEvents(el : Element,
|
|
||||||
move: (ev: MouseEvent) => void,
|
|
||||||
start?: (ev:MouseEvent) => void,
|
|
||||||
stop?: (ev:MouseEvent) => void) {
|
|
||||||
let captured = false;
|
|
||||||
el.addEventListener('mousedown', (ev: MouseEvent) => {
|
|
||||||
captured = true;
|
|
||||||
if (start) start(ev)
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
el.addEventListener('mousemove', (ev:MouseEvent) => {
|
|
||||||
if (captured) {
|
|
||||||
move(ev);
|
|
||||||
ev.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
el.addEventListener('mouseup', (ev:MouseEvent) => {
|
|
||||||
captured = false;
|
|
||||||
if (stop) stop(ev);
|
|
||||||
});
|
|
||||||
el.addEventListener('mouseleave', (ev:MouseEvent) => {
|
|
||||||
captured = false;
|
|
||||||
if (stop) stop(ev);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static linearGradient(defs: SVGDefsElement, id : string) : SVGLinearGradientElement {
|
|
||||||
let gradient = <SVGLinearGradientElement>Svg.child(defs, "linearGradient", { id: id, x1:"0%", y1:"0%", x2:"0%", y2:"100%" });
|
|
||||||
let stop1 = Svg.child(gradient, "stop", {offset:"0%"})
|
|
||||||
let stop2 = Svg.child(gradient, "stop", {offset:"100%"})
|
|
||||||
let stop3 = Svg.child(gradient, "stop", {offset:"100%"})
|
|
||||||
let stop4 = Svg.child(gradient, "stop", {offset:"100%"})
|
|
||||||
return gradient;
|
|
||||||
}
|
|
||||||
|
|
||||||
static setGradientColors(lg : SVGLinearGradientElement, start:string, end:string) {
|
|
||||||
if (!lg) return;
|
|
||||||
|
|
||||||
(<SVGStopElement>lg.childNodes[0]).style.stopColor = start;
|
|
||||||
(<SVGStopElement>lg.childNodes[1]).style.stopColor = start;
|
|
||||||
(<SVGStopElement>lg.childNodes[2]).style.stopColor = end;
|
|
||||||
(<SVGStopElement>lg.childNodes[3]).style.stopColor = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
static setGradientValue(lg : SVGLinearGradientElement, percent: string) {
|
|
||||||
(<SVGStopElement>lg.childNodes[1]).setAttribute("offset", percent);
|
|
||||||
(<SVGStopElement>lg.childNodes[2]).setAttribute("offset", percent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static animate(el: SVGElement, cls: string) {
|
|
||||||
el.classList.add(cls);
|
|
||||||
let p = el.parentElement;
|
|
||||||
p.removeChild(el);
|
|
||||||
p.appendChild(el)
|
|
||||||
}
|
|
||||||
|
|
||||||
static title(el : SVGElement, txt:string) {
|
|
||||||
let t = Svg.child(el, "title", {});
|
|
||||||
t.textContent = txt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class MicrobitBoardSvg
|
export class MicrobitBoardSvg
|
||||||
{
|
{
|
||||||
public element : SVGSVGElement;
|
public element : SVGSVGElement;
|
||||||
|
@ -596,8 +596,8 @@ namespace ks.rt {
|
|||||||
writeSerial(s: string) {
|
writeSerial(s: string) {
|
||||||
for (let i = 0; i < s.length; ++i) {
|
for (let i = 0; i < s.length; ++i) {
|
||||||
let c = s[i];
|
let c = s[i];
|
||||||
switch (c) {
|
this.serialOutBuffer += c;
|
||||||
case '\n':
|
if (c == '\n') {
|
||||||
Runtime.postMessage(<SimulatorSerialMessage>{
|
Runtime.postMessage(<SimulatorSerialMessage>{
|
||||||
type: 'serial',
|
type: 'serial',
|
||||||
data: this.serialOutBuffer,
|
data: this.serialOutBuffer,
|
||||||
@ -605,8 +605,6 @@ namespace ks.rt {
|
|||||||
})
|
})
|
||||||
this.serialOutBuffer = ''
|
this.serialOutBuffer = ''
|
||||||
break;
|
break;
|
||||||
case '\r': continue;
|
|
||||||
default: this.serialOutBuffer += c;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user