Compare commits

..

6 Commits

Author SHA1 Message Date
Peli de Halleux
b29f8faa14 0.2.59 2016-04-12 12:47:11 -07:00
Peli de Halleux
e58dd64780 Bump pxt-core to 0.2.60 2016-04-12 12:47:09 -07:00
Peli de Halleux
b1028abb04 implementing missing shims 2016-04-12 08:55:20 -07:00
Peli de Halleux
9f0f63a79e implementing input.rotation 2016-04-12 08:38:48 -07:00
Peli de Halleux
1c403e4ddb 0.2.58 2016-04-12 07:13:23 -07:00
Peli de Halleux
9143b34d9d Bump pxt-core to 0.2.59 2016-04-12 07:13:22 -07:00
3 changed files with 69 additions and 30 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "pxt-microbit", "name": "pxt-microbit",
"version": "0.2.57", "version": "0.2.59",
"description": "BBC micro:bit target for PXT", "description": "BBC micro:bit target for PXT",
"keywords": [ "keywords": [
"JavaScript", "JavaScript",
@@ -29,6 +29,6 @@
"typescript": "^1.8.7" "typescript": "^1.8.7"
}, },
"dependencies": { "dependencies": {
"pxt-core": "0.2.58" "pxt-core": "0.2.60"
} }
} }

View File

@@ -151,7 +151,7 @@ namespace pxsim.basic {
if (interval < 0) return; if (interval < 0) return;
let leds = createImageFromString(x.toString()); let leds = createImageFromString(x.toString());
if (x < 0 || x >= 10) scrollImage(leds, interval, 1); if (x < 0 || x >= 10) ImageMethods.scrollImage(leds, interval, 1);
else showLeds(leds, interval * 5); else showLeds(leds, interval * 5);
} }
@@ -163,7 +163,7 @@ namespace pxsim.basic {
} else { } else {
let leds = createImageFromString(s); let leds = createImageFromString(s);
if (s.length == 1) showLeds(leds, interval * 5) if (s.length == 1) showLeds(leds, interval * 5)
else scrollImage(leds, interval, 1); else ImageMethods.scrollImage(leds, interval, 1);
} }
} }
@@ -176,32 +176,12 @@ namespace pxsim.basic {
runtime.queueDisplayUpdate() runtime.queueDisplayUpdate()
} }
function scrollImage(leds: Image, interval: number, stride: number): void {
let cb = getResume()
let off = stride > 0 ? 0 : leds.width - 1;
let display = board().image;
board().animationQ.enqueue({
interval: interval,
frame: () => {
if (off >= leds.width || off < 0) return false;
stride > 0 ? display.shiftLeft(stride) : display.shiftRight(-stride);
let c = Math.min(stride, leds.width - off);
leds.copyTo(off, c, display, 5 - stride)
off += stride;
return true;
},
whenDone: cb
})
}
export function showAnimation(leds: Image, interval: number = 400): void { export function showAnimation(leds: Image, interval: number = 400): void {
scrollImage(leds, interval, 5); ImageMethods.scrollImage(leds, interval, 5);
} }
export function plotLeds(leds: Image): void { export function plotLeds(leds: Image): void {
leds.copyTo(0, 5, board().image, 0) ImageMethods.plotImage(leds, 0);
runtime.queueDisplayUpdate()
} }
} }
@@ -305,6 +285,25 @@ namespace pxsim.input {
default: return Math.floor(Math.sqrt(acc.instantaneousAccelerationSquared())); default: return Math.floor(Math.sqrt(acc.instantaneousAccelerationSquared()));
} }
} }
export function rotation(kind : number) : number {
let b = board();
let acc = b.accelerometer;
acc.activate();
let x = acc.getX(MicroBitCoordinateSystem.NORTH_EAST_DOWN);
let y = acc.getX(MicroBitCoordinateSystem.NORTH_EAST_DOWN);
let z = acc.getX(MicroBitCoordinateSystem.NORTH_EAST_DOWN);
let roll = Math.atan2(y,z);
let pitch = Math.atan(-x / (y*Math.sin(roll) + z*Math.cos(roll)));
let r = 0;
switch(kind) {
case 0: r = pitch; break;
case 1: r = roll; break;
}
return Math.floor(r / Math.PI * 180);
}
export function setAccelerometerRange(range: number) { export function setAccelerometerRange(range: number) {
let b = board(); let b = board();
@@ -365,6 +364,12 @@ namespace pxsim.led {
board().displayMode = mode; board().displayMode = mode;
runtime.queueDisplayUpdate() runtime.queueDisplayUpdate()
} }
export function screenshot() : Image {
let img = createImage(5)
board().image.copyTo(0, 5, img, 0);
return img;
}
} }
namespace pxsim.serial { namespace pxsim.serial {
@@ -516,5 +521,39 @@ namespace pxsim.ImageMethods {
runtime.queueDisplayUpdate() runtime.queueDisplayUpdate()
} }
// TODO ... export function plotImage(leds: Image, offset:number): void {
leds.copyTo(offset, 5, board().image, 0)
runtime.queueDisplayUpdate()
}
export function clear(i: Image) {
i.clear();
}
export function setPixelBrightness(i:Image, x:number, y:number, b:number) {
i.set(x,y,b);
}
export function pixelBrightness(i:Image, x:number, y:number) : number {
return i.get(x,y);
}
export function scrollImage(leds: Image, interval: number, stride: number): void {
let cb = getResume()
let off = stride > 0 ? 0 : leds.width - 1;
let display = board().image;
board().animationQ.enqueue({
interval: interval,
frame: () => {
if (off >= leds.width || off < 0) return false;
stride > 0 ? display.shiftLeft(stride) : display.shiftRight(-stride);
let c = Math.min(stride, leds.width - off);
leds.copyTo(off, c, display, 5 - stride)
off += stride;
return true;
},
whenDone: cb
})
}
} }

View File

@@ -618,12 +618,12 @@ namespace pxsim {
this.data = data; this.data = data;
} }
public get(x: number, y: number): number { public get(x: number, y: number): number {
// TODO range checking if (x < 0 || x >= this.width || y < 0 || y >= 5) return 0;
return this.data[y * this.width + x]; return this.data[y * this.width + x];
} }
public set(x: number, y: number, v: number) { public set(x: number, y: number, v: number) {
// TODO range checking if (x < 0 || x >= this.width || y < 0 || y >= 5) return;
this.data[y * this.width + x] = v; this.data[y * this.width + x] = Math.max(0, Math.min(255, v));
} }
public copyTo(xSrcIndex: number, length: number, target: Image, xTargetIndex: number): void { public copyTo(xSrcIndex: number, length: number, target: Image, xTargetIndex: number): void {
for (let x = 0; x < length; x++) { for (let x = 0; x < length; x++) {