Compare commits
36 Commits
Author | SHA1 | Date | |
---|---|---|---|
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 |
@ -1,5 +1,6 @@
|
||||
# Lessons
|
||||
|
||||
|
||||
### @short Lessons
|
||||
|
||||
### ~column
|
||||
|
@ -1,158 +1,17 @@
|
||||
# Reference
|
||||
|
||||
## micro:bit
|
||||
|
||||
```namespaces
|
||||
basic.showString("Hello!");
|
||||
input.onButtonPressed(Button.A, () => {});
|
||||
for (let i = 0;i<5;++i) {}
|
||||
if (true){}
|
||||
let x = 0;
|
||||
Math.random(5);
|
||||
led.plot(0,0);
|
||||
radio.sendNumber(0);
|
||||
music.playTone(music.noteFrequency(Note.C), music.beat(BeatFraction.Whole));
|
||||
game.createSprite();
|
||||
game.createSprite(2,2);
|
||||
pins.digitalReadPin(DigitalPin.P0);
|
||||
serial.WriteLine("Hello!")
|
||||
serial.writeLine("Hello!");
|
||||
control.inBackground(() => {});
|
||||
```
|
||||
|
||||
## Language
|
||||
|
||||
### @section full
|
||||
|
||||
### ~column
|
||||
|
||||
### 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;
|
||||
```
|
||||
|
||||
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;
|
||||
```
|
||||
### ~
|
||||
|
||||
### ~column
|
||||
|
||||
|
||||
### 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);
|
||||
```
|
||||
### Comments
|
||||
|
||||
[comment](/microbit/reference/comment)
|
||||
|
||||
### ~
|
||||
|
@ -126,15 +126,3 @@ This is useful if you have something connected at the other end. As explained ab
|
||||
let msg = serial.readString()
|
||||
```
|
||||
|
||||
* reads an image
|
||||
|
||||
```
|
||||
img = serial.readImage()
|
||||
```
|
||||
|
||||
* reads the state of the screen from serial
|
||||
|
||||
```
|
||||
serial.readScreen()
|
||||
```
|
||||
|
||||
|
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);
|
||||
```
|
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
|
||||
namespace radio {
|
||||
/**
|
||||
|
@ -1,3 +1,6 @@
|
||||
/**
|
||||
* Runtime and event utilities.
|
||||
*/
|
||||
//% weight=1 color="#333333"
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Numbers and arithmetic operators
|
||||
*/
|
||||
declare namespace Math {
|
||||
|
||||
/**
|
||||
|
@ -18,6 +18,9 @@ enum LedSpriteProperty {
|
||||
Blink
|
||||
}
|
||||
|
||||
/**
|
||||
* A single-LED sprite game engine
|
||||
*/
|
||||
//% color=176 weight=32
|
||||
namespace game {
|
||||
var _score: number = 0;
|
||||
|
@ -1,5 +1,8 @@
|
||||
#include "ksbit.h"
|
||||
|
||||
/**
|
||||
* Creation, manipulation and display of LED images.
|
||||
*/
|
||||
//% color=45 weight=31
|
||||
namespace images {
|
||||
/**
|
||||
|
@ -1,3 +1,6 @@
|
||||
/**
|
||||
* Events and data from sensors
|
||||
*/
|
||||
//% color=300 weight=99
|
||||
namespace input {
|
||||
/**
|
||||
|
@ -1,3 +1,6 @@
|
||||
/**
|
||||
* Control of the LED screen.
|
||||
*/
|
||||
//% color=3 weight=35
|
||||
namespace led {
|
||||
|
||||
|
@ -74,6 +74,9 @@ enum BeatFraction {
|
||||
Sixteenth = 16
|
||||
}
|
||||
|
||||
/**
|
||||
* Generation of music tones through pin ``P0``.
|
||||
*/
|
||||
//% color=52 weight=33
|
||||
namespace music {
|
||||
var beatsPerMinute: number = 120;
|
||||
|
@ -1,3 +1,6 @@
|
||||
/**
|
||||
* Control currents in Pins for analog/digital signals, servos, i2c, ...
|
||||
*/
|
||||
//% color=351 weight=30
|
||||
namespace pins {
|
||||
/**
|
||||
|
@ -19,20 +19,4 @@ namespace serial {
|
||||
void writeString(StringData *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
|
||||
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.
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Creation, manipulation and display of LED images.
|
||||
*/
|
||||
//% color=45 weight=31
|
||||
declare namespace images {
|
||||
|
||||
@ -487,18 +489,6 @@ declare namespace serial {
|
||||
*/
|
||||
//% shim=serial::writeString
|
||||
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",
|
||||
"files": [
|
||||
"README.md",
|
||||
"neopixel.ts",
|
||||
"sendbuffer.asm"
|
||||
],
|
||||
@ -16,5 +17,6 @@
|
||||
"public": true,
|
||||
"dependencies": {
|
||||
"microbit": "file:../microbit"
|
||||
}
|
||||
},
|
||||
"installedVersion": "zbhlje"
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ namespace neopixel {
|
||||
/**
|
||||
* Shift LEDs forward.
|
||||
*/
|
||||
shift(off: number): void {
|
||||
shift(off: number = 1): void {
|
||||
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;
|
||||
}
|
||||
strip.setBrigthness(br);
|
||||
});
|
||||
|
||||
let rotationMode = false;
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
rotationMode = !rotationMode;
|
||||
if (rotationMode) {
|
||||
basic.showLeds(`
|
||||
. # # # .
|
||||
# . . . #
|
||||
# . . . #
|
||||
# . . . #
|
||||
. # # # .
|
||||
`);
|
||||
} else {
|
||||
basic.showLeds(`
|
||||
. . # . .
|
||||
. . . . .
|
||||
. . . . #
|
||||
`)
|
||||
console.log("Start")
|
||||
. . . # .
|
||||
# # # # #
|
||||
. . . # .
|
||||
. . # . .
|
||||
`);
|
||||
|
||||
// Create a NeoPixel driver - specify the number of LEDs:
|
||||
let strip = neopixel.create(7);
|
||||
}
|
||||
});
|
||||
|
||||
// If your strip is not at P0, specify the pin.
|
||||
strip.setPin(DigitalPin.P0)
|
||||
|
||||
// Brightness defaults to 255 (very bright); 0 is completely off.
|
||||
strip.setBrigthness(20)
|
||||
|
||||
// Set pixels - pixel number, followed by red, green and blue values, between 0 and 255.
|
||||
strip.setPix(0, 255, 255, 255);
|
||||
strip.setPix(1, 0, 255, 255);
|
||||
strip.setPix(2, 255, 0, 255);
|
||||
strip.setPix(3, 255, 255, 0);
|
||||
|
||||
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);
|
||||
while (true) {
|
||||
let x = input.acceleration(Dimension.X) / 2
|
||||
let y = input.acceleration(Dimension.Y) / 2
|
||||
let z = input.acceleration(Dimension.Z) / 2
|
||||
if (rotationMode) {
|
||||
strip.rotate();
|
||||
} else {
|
||||
strip.setPix(0, x, y, -z);
|
||||
strip.shift(1);
|
||||
}
|
||||
strip.display();
|
||||
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",
|
||||
"version": "0.2.24",
|
||||
"version": "0.2.35",
|
||||
"description": "BBC micro:bit target for KindScript",
|
||||
"keywords": [
|
||||
"JavaScript",
|
||||
@ -29,6 +29,6 @@
|
||||
"typescript": "^1.8.7"
|
||||
},
|
||||
"dependencies": {
|
||||
"kindscript": "0.2.25"
|
||||
"kindscript": "0.2.35"
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user