From 6b0cf961c6ebcc6386508ad5f76e1e5533da6b79 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 09:40:29 -0700 Subject: [PATCH 01/56] support for lists in blocks --- pxtarget.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pxtarget.json b/pxtarget.json index 51ccb3bb..2ba8fef1 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -60,7 +60,8 @@ "mathBlocks": true, "loopsBlocks": true, "logicBlocks": true, - "variablesBlocks": true + "variablesBlocks": true, + "listsBlocks": true }, "simulator": { "autoRun": true From d727d3fcdedecde0570ca60b35de4794608e090b Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 09:46:03 -0700 Subject: [PATCH 02/56] removing lists --- pxtarget.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pxtarget.json b/pxtarget.json index 2ba8fef1..51ccb3bb 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -60,8 +60,7 @@ "mathBlocks": true, "loopsBlocks": true, "logicBlocks": true, - "variablesBlocks": true, - "listsBlocks": true + "variablesBlocks": true }, "simulator": { "autoRun": true From 546c44bafa95128acfc7beb8810768a3df8ea0aa Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 10:49:03 -0700 Subject: [PATCH 03/56] Bump pxt-core to 0.2.107 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index c32005d8..f7cd7385 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.95", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.106" - } + "name": "pxt-microbit", + "version": "0.2.95", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.107" + } } From 3cf82b9be2da54d5693bda56082efc0eb69b2bae Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 10:49:05 -0700 Subject: [PATCH 04/56] 0.2.96 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index f7cd7385..64481171 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.95", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.107" - } + "name": "pxt-microbit", + "version": "0.2.96", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.107" + } } From 26b9fdf40ebed6c0f9552c37d62cf7a06a81d8b4 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 21:15:10 -0700 Subject: [PATCH 05/56] adding survey completed --- docs/thank-you.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/thank-you.md diff --git a/docs/thank-you.md b/docs/thank-you.md new file mode 100644 index 00000000..f3312dee --- /dev/null +++ b/docs/thank-you.md @@ -0,0 +1,10 @@ +# You completed the survey! + +```sim +basic.forever(() => { basic.showString("THANK YOU") }) +``` + +Thank you for participating in this survey. + +Please contact Michael Braun at WW PS Edu [v-braum@microsoft.com](mailto:v-braum@microsoft.com) +or Claudine O’Leary at WW PS Edu [clolea@microsoft.com](clolea@microsoft.com) with any information you think we might find useful. From 7349e2889830d0793f956b9a383442c5a63c37ef Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 21:15:27 -0700 Subject: [PATCH 06/56] 0.2.97 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 64481171..a817b3c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.96", + "version": "0.2.97", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From 5a33dc8a8169c2194b7e6101879e7f90daeb3dc2 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 21:24:10 -0700 Subject: [PATCH 07/56] updated thank you --- docs/thank-you.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/thank-you.md b/docs/thank-you.md index f3312dee..ccb01fd3 100644 --- a/docs/thank-you.md +++ b/docs/thank-you.md @@ -6,5 +6,4 @@ basic.forever(() => { basic.showString("THANK YOU") }) Thank you for participating in this survey. -Please contact Michael Braun at WW PS Edu [v-braum@microsoft.com](mailto:v-braum@microsoft.com) -or Claudine O’Leary at WW PS Edu [clolea@microsoft.com](clolea@microsoft.com) with any information you think we might find useful. +Please [contact us](mailto:microbitpilots@microsoft.com) with any information you think we might find useful. From a3b34518b007d3d679bc1f7d3f25f5d71b12976a Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 2 May 2016 21:24:17 -0700 Subject: [PATCH 08/56] 0.2.98 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a817b3c6..e43ef815 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.97", + "version": "0.2.98", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From 13ff7cd0ecdceb6d75523169ac774b58345cf8cd Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 3 May 2016 14:45:10 -0700 Subject: [PATCH 09/56] removing readme.md from template --- pxtarget.json | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/pxtarget.json b/pxtarget.json index 51ccb3bb..79e1cb6d 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -22,14 +22,12 @@ "description": "", "files": [ "main.blocks", - "main.ts", - "README.md" + "main.ts" ] }, "files": { "main.blocks": "Hello!", - "main.ts": "\n", - "README.md": "Describe your project here!" + "main.ts": "\n" } }, "tsprj": { @@ -42,13 +40,11 @@ }, "description": "", "files": [ - "main.ts", - "README.md" + "main.ts" ] }, "files": { - "main.ts": "basic.showString('Hello!')\n", - "README.md": "Describe your project here!" + "main.ts": "basic.showString('Hello!')\n" } }, "compile": { From f90d052538257400bba80209cfa20303d2765f26 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Wed, 4 May 2016 13:25:56 +0100 Subject: [PATCH 10/56] Add example localized doc --- docs/_locales/pl/docs.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 docs/_locales/pl/docs.md diff --git a/docs/_locales/pl/docs.md b/docs/_locales/pl/docs.md new file mode 100644 index 00000000..4baddf36 --- /dev/null +++ b/docs/_locales/pl/docs.md @@ -0,0 +1,7 @@ +# Dokumentacja + +Witamy na stronach dokumentacji! + +* Przeglądnij [instrukcje obsługi](/reference) +* Dowiedz się więcej o [urządzeniu](/device) +* Wystartuj z [lekcjami](/lessons) From 43da58f21433c5f267b9d4598035e044b94e09ab Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Wed, 4 May 2016 13:31:57 +0100 Subject: [PATCH 11/56] Bump pxt-core to 0.2.111 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index e43ef815..fd1a58cd 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.98", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.107" - } + "name": "pxt-microbit", + "version": "0.2.98", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.111" + } } From 548d215b481f8e8ac0ff01080f6558b777755ddd Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Wed, 4 May 2016 13:31:59 +0100 Subject: [PATCH 12/56] 0.2.99 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index fd1a58cd..fc076f74 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.98", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.111" - } + "name": "pxt-microbit", + "version": "0.2.99", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.111" + } } From 3816e01f8794d81c05f2d74e9d91c9a880db25b6 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Wed, 4 May 2016 15:23:04 +0100 Subject: [PATCH 13/56] Add locale-specific theme --- docs/_locales/pl/_theme.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 docs/_locales/pl/_theme.json diff --git a/docs/_locales/pl/_theme.json b/docs/_locales/pl/_theme.json new file mode 100644 index 00000000..c1e141f8 --- /dev/null +++ b/docs/_locales/pl/_theme.json @@ -0,0 +1,22 @@ +{ + "name": "koduj z micro:bit", + "title": "koduj z micro:bit", + "docMenu": [ + { + "name": "O nas", + "path": "/about" + }, + { + "name": "Lekcje", + "path": "/lessons" + }, + { + "name": "Instrukcja obsługi", + "path": "/reference" + }, + { + "name": "Urządzenie", + "path": "/device" + } + ] +} \ No newline at end of file From ba707f080dfebfcd482b0077fa763ddc1da835c7 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Wed, 4 May 2016 15:25:51 +0100 Subject: [PATCH 14/56] Bump pxt-core to 0.2.112 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index fc076f74..f72f1ce5 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.99", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.111" - } + "name": "pxt-microbit", + "version": "0.2.99", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.112" + } } From e4370f4e3cdb82cafefaa6299936f8d93023f601 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Wed, 4 May 2016 15:25:52 +0100 Subject: [PATCH 15/56] 0.2.100 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index f72f1ce5..0ede371e 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.99", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.112" - } + "name": "pxt-microbit", + "version": "0.2.100", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.112" + } } From 29b28e7f0de15fc9091f252c0294420beea08c7e Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 4 May 2016 22:44:11 -0700 Subject: [PATCH 16/56] adding aspect ratio --- pxtarget.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pxtarget.json b/pxtarget.json index 79e1cb6d..82233b9d 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -59,7 +59,8 @@ "variablesBlocks": true }, "simulator": { - "autoRun": true + "autoRun": true, + "aspectRatio": 1.22 }, "compileService": { "gittag": "v0.1.8", From 04a60a5b478a993322ade00936b5a5caef76b15e Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 4 May 2016 23:31:55 -0700 Subject: [PATCH 17/56] fixing various lint violations --- .vscode/settings.json | 5 + libs/i2c-fram/fram.ts | 6 +- sim/libmbit.ts | 88 ++++---- sim/simsvg.ts | 452 +++++++++++++++++++++--------------------- tslint.json | 56 ++++++ 5 files changed, 335 insertions(+), 272 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 tslint.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..4da3dc3b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "tslint.enable": true, + "tslint.rulesDirectory": "node_modules/tslint-microsoft-contrib" +} \ No newline at end of file diff --git a/libs/i2c-fram/fram.ts b/libs/i2c-fram/fram.ts index 21366aee..2bf372ab 100644 --- a/libs/i2c-fram/fram.ts +++ b/libs/i2c-fram/fram.ts @@ -36,7 +36,7 @@ namespace i2c_fram { pins.i2cWriteBuffer(devaddr, buf) } - + export function readBuffer(addr: number, length: number) { if (addr < 0 || length < 0 || (addr + length) > memend) die(); @@ -45,8 +45,8 @@ namespace i2c_fram { buf[i] = readByte(addr + i) return buf } - - export function writeBuffer(addr:number, buf: Buffer) { + + export function writeBuffer(addr: number, buf: Buffer) { if (addr < 0 || (addr + buf.length) > memend) die(); for (let i = 0; i < buf.length; ++i) diff --git a/sim/libmbit.ts b/sim/libmbit.ts index 2d3979be..045c8935 100644 --- a/sim/libmbit.ts +++ b/sim/libmbit.ts @@ -4,12 +4,12 @@ namespace pxsim { pxsim.initCurrentRuntime = () => { - U.assert(!runtime.board) - runtime.board = new Board() + U.assert(!runtime.board); + runtime.board = new Board(); } export function board() { - return runtime.board as Board + return runtime.board as Board; } export interface AnimationOptions { @@ -77,7 +77,7 @@ namespace pxsim { }) } } - + /** * Error codes used in the micro:bit runtime. */ @@ -115,7 +115,7 @@ namespace pxsim { img.set(3, 1, 255); img.set(4, 1, 255); runtime.updateDisplay(); - + throw new Error("PANIC " + code) } @@ -125,9 +125,9 @@ namespace pxsim { export namespace AudioContextManager { - var _context: any; // AudioContext - var _vco: any; //OscillatorNode; - var _vca: any; // GainNode; + let _context: any; // AudioContext + let _vco: any; // OscillatorNode; + let _vca: any; // GainNode; function context(): any { if (!_context) _context = freshContext(); @@ -152,7 +152,7 @@ namespace pxsim { export function tone(frequency: number, gain: number) { if (frequency <= 0) return; - var ctx = context(); + let ctx = context(); if (!ctx) return; gain = Math.max(0, Math.min(1, gain)); @@ -198,10 +198,10 @@ namespace pxsim.basic { pause(interval * 5); } else { if (s.length == 1) showLeds(createImageFromString(s), interval * 5) - else ImageMethods.scrollImage(createImageFromString(s + ' '), interval, 1); + else ImageMethods.scrollImage(createImageFromString(s + " "), interval, 1); } } - + export function showLeds(leds: Image, delay: number): void { showAnimation(leds, delay); } @@ -226,19 +226,19 @@ namespace pxsim.control { export function reset() { U.userError("reset not implemented in simulator yet") } - - export function deviceName() : string { + + export function deviceName(): string { let b = board(); - return b && b.id - ? b.id.slice(0, 4) - : 'abcd'; + return b && b.id + ? b.id.slice(0, 4) + : "abcd"; } - + export function deviceSerialNumber(): number { let b = board(); - return parseInt(b && b.id - ? b.id.slice(1) - : '42'); + return parseInt(b && b.id + ? b.id.slice(1) + : "42"); } export function onEvent(id: number, evid: number, handler: RefAction) { @@ -306,7 +306,7 @@ namespace pxsim.input { export function compassHeading(): number { - var b = board(); + let b = board(); if (!b.usesHeading) { b.usesHeading = true; runtime.queueDisplayUpdate(); @@ -315,7 +315,7 @@ namespace pxsim.input { } export function temperature(): number { - var b = board(); + let b = board(); if (!b.usesTemperature) { b.usesTemperature = true; runtime.queueDisplayUpdate(); @@ -565,29 +565,29 @@ namespace pxsim.images { namespace pxsim.ImageMethods { export function showImage(leds: Image, offset: number) { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); - + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + leds.copyTo(offset, 5, board().image, 0) runtime.queueDisplayUpdate() } export function plotImage(leds: Image, offset: number): void { if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); - + leds.copyTo(offset, 5, board().image, 0) runtime.queueDisplayUpdate() } - export function height(leds: Image) : number { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + export function height(leds: Image): number { + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); return Image.height; } - export function width(leds: Image) : number { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + export function width(leds: Image): number { + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); return leds.width; } - + export function plotFrame(leds: Image, frame: number) { ImageMethods.plotImage(leds, frame * Image.height); } @@ -595,38 +595,38 @@ namespace pxsim.ImageMethods { export function showFrame(leds: Image, frame: number) { ImageMethods.showImage(leds, frame * Image.height); } - - export function pixel(leds: Image, x: number, y: number) : number { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); - return leds.get(x,y); + + export function pixel(leds: Image, x: number, y: number): number { + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + return leds.get(x, y); } - - export function setPixel(leds: Image, x: number, y: number, v:number) { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); - leds.set(x,y,v); + + export function setPixel(leds: Image, x: number, y: number, v: number) { + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + leds.set(x, y, v); } export function clear(leds: Image) { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); - + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + leds.clear(); } export function setPixelBrightness(i: Image, x: number, y: number, b: number) { - if (!i) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + if (!i) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); i.set(x, y, b); } export function pixelBrightness(i: Image, x: number, y: number): number { - if (!i) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + if (!i) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); return i.get(x, y); } export function scrollImage(leds: Image, interval: number, stride: number): void { - if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); - + if (!leds) panic(PanicCode.MICROBIT_NULL_DEREFERENCE); + let cb = getResume() let off = stride > 0 ? 0 : leds.width - 1; let display = board().image; diff --git a/sim/simsvg.ts b/sim/simsvg.ts index 9b01b16a..5497bee6 100644 --- a/sim/simsvg.ts +++ b/sim/simsvg.ts @@ -15,7 +15,7 @@ namespace pxsim.micro_bit { virtualButtonOuter?: string; virtualButtonUp?: string; virtualButtonDown?: string; - lightLevelOn?:string; + lightLevelOn?: string; lightLevelOff?: string; } @@ -25,7 +25,7 @@ namespace pxsim.micro_bit { display: "#000", pin: "#D4AF37", pinTouched: "#FFA500", - pinActive:"#FF5500", + pinActive: "#FF5500", ledOn: "#ff7f7f", ledOff: "#202020", buttonOuter: "#979797", @@ -35,44 +35,44 @@ namespace pxsim.micro_bit { virtualButtonUp: "#fff", lightLevelOn: "yellow", lightLevelOff: "#555" - }}); + } + }); - export function randomTheme() : IBoardTheme { + export function randomTheme(): IBoardTheme { return themes[Math.floor(Math.random() * themes.length)]; } export interface IBoardProps { runtime: pxsim.Runtime; theme?: IBoardTheme; - disableTilt?:boolean; + disableTilt?: boolean; } - + const pointerEvents = !!(window as any).PointerEvent ? { up: "pointerup", down: "pointerdown", move: "pointermove", leave: "pointerleave" } : { - up: "mouseup", - down: "mousedown", - move: "mousemove", - leave: "mouseleave" - }; + up: "mouseup", + down: "mousedown", + move: "mousemove", + leave: "mouseleave" + }; - export class MicrobitBoardSvg - { - public element : SVGSVGElement; + export class MicrobitBoardSvg { + public element: SVGSVGElement; private style: SVGStyleElement; - private defs : SVGDefsElement; + private defs: SVGDefsElement; private g: SVGElement; - + private logos: SVGElement[]; private head: SVGGElement; private headInitialized = false; private headText: SVGTextElement; private display: SVGElement; private buttons: SVGElement[]; private buttonsOuter: SVGElement[]; - private buttonABText:SVGTextElement; + private buttonABText: SVGTextElement; private pins: SVGElement[]; private pinGradients: SVGLinearGradientElement[]; private pinTexts: SVGTextElement[]; @@ -81,27 +81,27 @@ namespace pxsim.micro_bit { private systemLed: SVGCircleElement; private antenna: SVGPolylineElement; private lightLevelButton: SVGCircleElement; - private lightLevelGradient : SVGLinearGradientElement; + private lightLevelGradient: SVGLinearGradientElement; private lightLevelText: SVGTextElement; - private thermometerGradient : SVGLinearGradientElement; + private thermometerGradient: SVGLinearGradientElement; private thermometer: SVGRectElement; private thermometerText: SVGTextElement; private shakeButton: SVGCircleElement; private shakeText: SVGTextElement; - public board: pxsim.Board; - + public board: pxsim.Board; + constructor(public props: IBoardProps) { this.board = this.props.runtime.board as pxsim.Board; this.board.updateView = () => this.updateState(); - this.buildDom(); + this.buildDom(); this.updateTheme(); this.updateState(); this.attachEvents(); } - + private updateTheme() { let theme = this.props.theme; - + Svg.fill(this.display, theme.display); Svg.fills(this.leds, theme.ledOn); Svg.fills(this.ledsOuter, theme.ledOff); @@ -111,81 +111,81 @@ namespace pxsim.micro_bit { Svg.fill(this.buttons[2], theme.virtualButtonUp); Svg.fills(this.logos, theme.accent); if (this.shakeButton) Svg.fill(this.shakeButton, theme.virtualButtonUp); - - this.pinGradients.forEach(lg => Svg.setGradientColors(lg, theme.pin, theme.pinActive)); + + this.pinGradients.forEach(lg => Svg.setGradientColors(lg, theme.pin, theme.pinActive)); Svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff); - + Svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn); } - + public updateState() { let state = this.board; if (!state) return; let theme = this.props.theme; - + state.buttons.forEach((btn, index) => { - Svg.fill(this.buttons[index], btn.pressed ? theme.buttonDown : theme.buttonUp); + Svg.fill(this.buttons[index], btn.pressed ? theme.buttonDown : theme.buttonUp); }); - - var bw = state.displayMode == pxsim.DisplayMode.bw - var img = state.image; - this.leds.forEach((led,i) => { - var sel = (led) + + let bw = state.displayMode == pxsim.DisplayMode.bw + let img = state.image; + this.leds.forEach((led, i) => { + let sel = (led) sel.style.opacity = ((bw ? img.data[i] > 0 ? 255 : 0 : img.data[i]) / 255.0) + ""; }) this.updatePins(); this.updateTilt(); - this.updateHeading(); + this.updateHeading(); this.updateLightLevel(); - this.updateTemperature(); - this.updateButtonAB(); - this.updateGestures(); - + this.updateTemperature(); + this.updateButtonAB(); + this.updateGestures(); + if (!runtime || runtime.dead) Svg.addClass(this.element, "grayscale"); else Svg.removeClass(this.element, "grayscale"); } - + private updateGestures() { let state = this.board; if (state.useShake && !this.shakeButton) { - this.shakeButton = Svg.child(this.g, "circle", {cx:380, cy:100, r:16.5}) as SVGCircleElement; + this.shakeButton = Svg.child(this.g, "circle", { cx: 380, cy: 100, r: 16.5 }) as SVGCircleElement; Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp) this.shakeButton.addEventListener(pointerEvents.down, ev => { let state = this.board; - Svg.fill(this.shakeButton, this.props.theme.buttonDown); + Svg.fill(this.shakeButton, this.props.theme.buttonDown); }) this.shakeButton.addEventListener(pointerEvents.leave, ev => { let state = this.board; - Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); + Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); }) this.shakeButton.addEventListener(pointerEvents.up, ev => { let state = this.board; - Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); + Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE - }) - this.shakeText = Svg.child(this.g, "text", {x:400, y:110, class:'sim-text'}) as SVGTextElement; - this.shakeText.textContent = "SHAKE" - } + }) + this.shakeText = Svg.child(this.g, "text", { x: 400, y: 110, class: "sim-text" }) as SVGTextElement; + this.shakeText.textContent = "SHAKE" + } } - + private updateButtonAB() { let state = this.board; if (state.usesButtonAB && !this.buttonABText) { - (this.buttonsOuter[2]).style.visibility = 'visible'; - (this.buttons[2]).style.visibility = 'visible'; - this.buttonABText = Svg.child(this.g, "text", {class: 'sim-text', x:370, y:272 }) as SVGTextElement; + (this.buttonsOuter[2]).style.visibility = "visible"; + (this.buttons[2]).style.visibility = "visible"; + this.buttonABText = Svg.child(this.g, "text", { class: "sim-text", x: 370, y: 272 }) as SVGTextElement; this.buttonABText.textContent = "A+B"; this.updateTheme(); - } + } } - - private updatePin(pin : Pin, index: number) { + + private updatePin(pin: Pin, index: number) { if (!pin) return; let text = this.pinTexts[index]; - let v = ''; + let v = ""; if (pin.mode & PinMode.Analog) { - v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + '%'; - if(text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + ""; + v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + "%"; + if (text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + ""; } else if (pin.mode & PinMode.Digital) { v = pin.value > 0 ? '0%' : '100%'; @@ -196,48 +196,48 @@ namespace pxsim.micro_bit { if (text) text.textContent = ""; } else { v = '100%'; - if(text) text.textContent = ''; + if (text) text.textContent = ''; } if (v) Svg.setGradientValue(this.pinGradients[index], v); } - + private updateTemperature() { let state = this.board; if (!state || !state.usesTemperature) return; - + let tmin = -5; let tmax = 50; - if (!this.thermometer) { + if (!this.thermometer) { let gid = "gradient-thermometer"; this.thermometerGradient = Svg.linearGradient(this.defs, gid); - this.thermometer = Svg.child(this.g, "rect", { - class: "sim-thermometer", - x:120, - y:110, - width:20, - height:160, - rx:5, ry:5, - fill:`url(#${gid})` + this.thermometer = Svg.child(this.g, "rect", { + class: "sim-thermometer", + x: 120, + y: 110, + width: 20, + height: 160, + rx: 5, ry: 5, + fill: `url(#${gid})` }); - this.thermometerText = Svg.child(this.g, "text", { class:'sim-text', x:58, y:130}) as SVGTextElement; + this.thermometerText = Svg.child(this.g, "text", { class: 'sim-text', x: 58, y: 130 }) as SVGTextElement; this.updateTheme(); - + let pt = this.element.createSVGPoint(); Svg.buttonEvents(this.thermometer, (ev) => { let cur = Svg.cursorPoint(pt, this.element, ev); let t = Math.max(0, Math.min(1, (260 - cur.y) / 140)) - state.temperature = Math.floor(tmin + t * (tmax-tmin)); + state.temperature = Math.floor(tmin + t * (tmax - tmin)); this.updateTemperature(); - }, ev => {}, ev => {}) + }, ev => { }, ev => { }) } - + let t = Math.max(tmin, Math.min(tmax, state.temperature)) - let per = Math.floor((state.temperature - tmin) / (tmax-tmin)*100) + let per = Math.floor((state.temperature - tmin) / (tmax - tmin) * 100) Svg.setGradientValue(this.thermometerGradient, 100 - per + '%'); this.thermometerText.textContent = t + '°C'; } - + private updateHeading() { let xc = 258; let yc = 75; @@ -249,42 +249,42 @@ namespace pxsim.micro_bit { let pt = this.element.createSVGPoint(); Svg.buttonEvents( this.head, - (ev : MouseEvent) => { - let cur = Svg.cursorPoint(pt, this.element, ev); - state.heading = Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI+90); - if (state.heading < 0) state.heading += 360; - console.log('heading: ' + state.heading) - this.updateHeading(); + (ev: MouseEvent) => { + let cur = Svg.cursorPoint(pt, this.element, ev); + state.heading = Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI + 90); + if (state.heading < 0) state.heading += 360; + console.log('heading: ' + state.heading) + this.updateHeading(); }); this.headInitialized = true; } - + let txt = state.heading.toString() + '°'; - if (txt != this.headText.textContent) { - Svg.rotateElement(this.head, xc, yc, state.heading+180); + if (txt != this.headText.textContent) { + Svg.rotateElement(this.head, xc, yc, state.heading + 180); this.headText.textContent = txt; - } + } } - - private lastFlashTime : number = 0; + + private lastFlashTime: number = 0; public flashSystemLed() { if (!this.systemLed) - this.systemLed = Svg.child(this.g, "circle", {class:"sim-systemled", cx:300, cy:20, r:5}) + this.systemLed = Svg.child(this.g, "circle", { class: "sim-systemled", cx: 300, cy: 20, r: 5 }) let now = Date.now(); if (now - this.lastFlashTime > 150) { this.lastFlashTime = now; Svg.animate(this.systemLed, 'sim-flash') } } - - private lastAntennaFlash : number = 0; + + private lastAntennaFlash: number = 0; public flashAntenna() { - if (!this.antenna) { + if (!this.antenna) { let ax = 380; let dax = 18; let ayt = 10; let ayb = 40; - this.antenna = Svg.child(this.g, "polyline", { class:"sim-antenna", points: `${ax},${ayb} ${ax},${ayt} ${ax+=dax},${ayt} ${ax},${ayb} ${ax+=dax},${ayb} ${ax},${ayt} ${ax+=dax},${ayt} ${ax},${ayb} ${ax+=dax},${ayb} ${ax},${ayt} ${ax+=dax},${ayt}`}) + this.antenna = Svg.child(this.g, "polyline", { class: "sim-antenna", points: `${ax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt}` }) } let now = Date.now(); if (now - this.lastAntennaFlash > 200) { @@ -292,53 +292,54 @@ namespace pxsim.micro_bit { Svg.animate(this.antenna, 'sim-flash-stroke') } } - + private updatePins() { let state = this.board; if (!state) return; - - state.pins.forEach((pin,i) => this.updatePin(pin,i)); - } - + + state.pins.forEach((pin, i) => this.updatePin(pin, i)); + } + private updateLightLevel() { let state = this.board; if (!state || !state.usesLightLevel) return; - + if (!this.lightLevelButton) { - let gid= "gradient-light-level"; - this.lightLevelGradient = Svg.linearGradient(this.defs, gid) + let gid = "gradient-light-level"; + this.lightLevelGradient = Svg.linearGradient(this.defs, gid) let cy = 50; let r = 35; - this.lightLevelButton = Svg.child(this.g, "circle", { - cx: `50px`, cy: `${cy}px`, r: `${r}px`, - class:'sim-light-level-button', - fill: `url(#${gid})` }) as SVGCircleElement; + this.lightLevelButton = Svg.child(this.g, "circle", { + cx: `50px`, cy: `${cy}px`, r: `${r}px`, + class: 'sim-light-level-button', + fill: `url(#${gid})` + }) as SVGCircleElement; let pt = this.element.createSVGPoint(); Svg.buttonEvents(this.lightLevelButton, (ev) => { let pos = Svg.cursorPoint(pt, this.element, ev); - let rs = r/2; - let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy-rs)) / (2*rs) * 255))); + let rs = r / 2; + let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy - rs)) / (2 * rs) * 255))); if (level != this.board.lightLevel) { this.board.lightLevel = level; this.applyLightLevel(); } - }, ev => {}, - ev => {}) - this.lightLevelText = Svg.child(this.g, "text", { x:85, y:cy+r-5, text:'', class:'sim-text'}) as SVGTextElement; + }, ev => { }, + ev => { }) + this.lightLevelText = Svg.child(this.g, "text", { x: 85, y: cy + r - 5, text: '', class: 'sim-text' }) as SVGTextElement; this.updateTheme(); - } - - Svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightLevel * 100 / 255))) + '%') + } + + Svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightLevel * 100 / 255))) + '%') this.lightLevelText.textContent = state.lightLevel.toString(); - } - + } + private applyLightLevel() { let lv = this.board.lightLevel; - Svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%') - this.lightLevelText.textContent = lv.toString(); + Svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%') + this.lightLevelText.textContent = lv.toString(); } - + private updateTilt() { if (this.props.disableTilt) return; let state = this.board; @@ -348,20 +349,21 @@ namespace pxsim.micro_bit { let y = state.accelerometer.getY(); let af = 8 / 1023; - this.element.style.transform = "perspective(30em) rotateX(" + y*af + "deg) rotateY(" + x*af +"deg)" + this.element.style.transform = "perspective(30em) rotateX(" + y * af + "deg) rotateY(" + x * af + "deg)" this.element.style.perspectiveOrigin = "50% 50% 50%"; - this.element.style.perspective = "30em"; + this.element.style.perspective = "30em"; } - + private buildDom() { this.element = Svg.elt("svg") Svg.hydrate(this.element, { - "version": "1.0", + "version": "1.0", "viewBox": "0 0 498 406", "enable-background": "new 0 0 498 406", - "class":"sim", + "class": "sim", "x": "0px", - "y": "0px"}); + "y": "0px" + }); this.style = Svg.child(this.element, "style", {}); this.style.textContent = ` svg.sim { @@ -457,66 +459,66 @@ svg.sim.grayscale { } `; - - + + this.defs = Svg.child(this.element, "defs", {}); this.g = Svg.elt("g"); this.element.appendChild(this.g); - + // filters - let glow = Svg.child(this.defs, "filter", {id:"filterglow", x:"-5%", y:"-5%", width:"120%", height:"120%"}); - Svg.child(glow, "feGaussianBlur", {stdDeviation:"5", result: "glow" }); + let glow = Svg.child(this.defs, "filter", { id: "filterglow", x: "-5%", y: "-5%", width: "120%", height: "120%" }); + Svg.child(glow, "feGaussianBlur", { stdDeviation: "5", result: "glow" }); let merge = Svg.child(glow, "feMerge", {}); - for(let i=0;i<3;++i) Svg.child(merge, "feMergeNode", {in:"glow"}) - + for (let i = 0; i < 3; ++i) Svg.child(merge, "feMergeNode", { in: "glow" }) + // outline - Svg.path(this.g, "sim-board", "M498,31.9C498,14.3,483.7,0,466.1,0H31.9C14.3,0,0,14.3,0,31.9v342.2C0,391.7,14.3,406,31.9,406h434.2c17.6,0,31.9-14.3,31.9-31.9V31.9z M14.3,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.7,2.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C19.2,204.6,17,206.7,14.3,206.7z M486.2,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.72.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C491,204.6,488.8,206.7,486.2,206.7z"); + Svg.path(this.g, "sim-board", "M498,31.9C498,14.3,483.7,0,466.1,0H31.9C14.3,0,0,14.3,0,31.9v342.2C0,391.7,14.3,406,31.9,406h434.2c17.6,0,31.9-14.3,31.9-31.9V31.9z M14.3,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.7,2.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C19.2,204.6,17,206.7,14.3,206.7z M486.2,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.72.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C491,204.6,488.8,206.7,486.2,206.7z"); // script background this.display = Svg.path(this.g, "sim-display", "M333.8,310.3H165.9c-8.3,0-15-6.7-15-15V127.5c0-8.3,6.7-15,15-15h167.8c8.3,0,15,6.7,15,15v167.8C348.8,303.6,342.1,310.3,333.8,310.3z"); this.logos = []; - this.logos.push(Svg.child(this.g, "polygon", {class:"sim-theme", points:"115,56.7 173.1,0 115,0"})); + this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "115,56.7 173.1,0 115,0" })); this.logos.push(Svg.path(this.g, "sim-theme", "M114.2,0H25.9C12.1,2.1,0,13.3,0,27.7v83.9L114.2,0z")); - this.logos.push(Svg.child(this.g, "polygon", {class:"sim-theme", points:"173,27.9 202.5,0 173,0"})); - this.logos.push(Svg.child(this.g, "polygon", {class:"sim-theme", points:"54.1,242.4 54.1,274.1 22.4,274.1"})); - this.logos.push(Svg.child(this.g, "polygon", {class:"sim-theme", points:"446.2,164.6 446.2,132.8 477.9,132.8"})); - + this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "173,27.9 202.5,0 173,0" })); + this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "54.1,242.4 54.1,274.1 22.4,274.1" })); + this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "446.2,164.6 446.2,132.8 477.9,132.8" })); + // leds this.leds = []; this.ledsOuter = []; - var left = 154, top = 113, ledoffw = 46, ledoffh = 44; - for (var i = 0; i < 5; ++i) { - var ledtop = i * ledoffh + top; - for (var j = 0; j < 5; ++j) { - var ledleft = j * ledoffw + left; - var k = i * 5 + j; - this.ledsOuter.push(Svg.child(this.g, "rect", { class:"sim-led-back", x:ledleft, y:ledtop, width:10, height:20, rx:2, ry:2 })); - this.leds.push(Svg.child(this.g, "rect", { class:"sim-led", x:ledleft-2, y:ledtop-2, width:14, height:24, rx:3, ry:3, title:`(${j},${i})`})); + let left = 154, top = 113, ledoffw = 46, ledoffh = 44; + for (let i = 0; i < 5; ++i) { + let ledtop = i * ledoffh + top; + for (let j = 0; j < 5; ++j) { + let ledleft = j * ledoffw + left; + let k = i * 5 + j; + this.ledsOuter.push(Svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: 10, height: 20, rx: 2, ry: 2 })); + this.leds.push(Svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 2, y: ledtop - 2, width: 14, height: 24, rx: 3, ry: 3, title: `(${j},${i})` })); } } - + // head this.head = Svg.child(this.g, "g", {}); - Svg.child(this.head, "circle", { cx: 258, cy: 75, r: 100, fill:'transparent'}) - this.logos.push(Svg.path(this.head, "sim-theme","M269.9,50.2L269.9,50.2l-39.5,0v0c-14.1,0.1-24.6,10.7-24.6,24.8c0,13.9,10.4,24.4,24.3,24.7v0h39.6c14.2,0,24.8-10.6,24.8-24.7C294.5,61,284,50.3,269.9,50.2 M269.7,89.2L269.7,89.2l-39.3,0c-7.7-0.1-14-6.4-14-14.2c0-7.8,6.4-14.2,14.2-14.2h39.1c7.8,0,14.2,6.4,14.2,14.2C283.9,82.9,277.5,89.2,269.7,89.2")); - this.logos.push(Svg.path(this.head, "sim-theme","M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7")); - this.logos.push(Svg.path(this.head, "sim-theme","M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3")); - this.headText = Svg.child(this.g, "text", { x: 310, y: 100, class:'sim-text' }) - + Svg.child(this.head, "circle", { cx: 258, cy: 75, r: 100, fill: "transparent" }) + this.logos.push(Svg.path(this.head, "sim-theme", "M269.9,50.2L269.9,50.2l-39.5,0v0c-14.1,0.1-24.6,10.7-24.6,24.8c0,13.9,10.4,24.4,24.3,24.7v0h39.6c14.2,0,24.8-10.6,24.8-24.7C294.5,61,284,50.3,269.9,50.2 M269.7,89.2L269.7,89.2l-39.3,0c-7.7-0.1-14-6.4-14-14.2c0-7.8,6.4-14.2,14.2-14.2h39.1c7.8,0,14.2,6.4,14.2,14.2C283.9,82.9,277.5,89.2,269.7,89.2")); + this.logos.push(Svg.path(this.head, "sim-theme", "M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7")); + this.logos.push(Svg.path(this.head, "sim-theme", "M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3")); + this.headText = Svg.child(this.g, "text", { x: 310, y: 100, class: "sim-text" }) + // https://www.microbit.co.uk/device/pins // P0, P1, P2 this.pins = [ "M16.5,341.2c0,0.4-0.1,0.9-0.1,1.3v60.7c4.1,1.7,8.6,2.7,12.9,2.7h34.4v-64.7h0.3c0,0,0-0.1,0-0.1c0-13-10.6-23.6-23.7-23.6C27.2,317.6,16.5,328.1,16.5,341.2z M21.2,341.6c0-10.7,8.7-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3c0,10.7-8.6,19.3-19.3,19.3C29.9,360.9,21.2,352.2,21.2,341.6z", "M139.1,317.3c-12.8,0-22.1,10.3-23.1,23.1V406h46.2v-65.6C162.2,327.7,151.9,317.3,139.1,317.3zM139.3,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C158.6,351.5,150,360.1,139.3,360.1z", "M249,317.3c-12.8,0-22.1,10.3-23.1,23.1V406h46.2v-65.6C272.1,327.7,261.8,317.3,249,317.3z M249.4,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C268.7,351.5,260.1,360.1,249.4,360.1z" - ].map((p,pi) => Svg.path(this.g, "sim-pin sim-pin-touch", p, `P${pi}, ANALOG IN`)); + ].map((p, pi) => Svg.path(this.g, "sim-pin sim-pin-touch", p, `P${pi}, ANALOG IN`)); // P3 this.pins.push(Svg.path(this.g, "sim-pin", "M0,357.7v19.2c0,10.8,6.2,20.2,14.4,25.2v-44.4H0z", "P3, ANALOG IN, LED Col 1")); - [66.7,79.1,91.4,103.7,164.3,176.6,188.9,201.3,213.6,275.2,287.5,299.8,312.1,324.5,385.1,397.4,409.7,422].forEach(x => { - this.pins.push(Svg.child(this.g, "rect", {x:x, y:356.7, width:10, height:50, class:"sim-pin"})); + [66.7, 79.1, 91.4, 103.7, 164.3, 176.6, 188.9, 201.3, 213.6, 275.2, 287.5, 299.8, 312.1, 324.5, 385.1, 397.4, 409.7, 422].forEach(x => { + this.pins.push(Svg.child(this.g, "rect", { x: x, y: 356.7, width: 10, height: 50, class: "sim-pin" })); }) Svg.title(this.pins[4], "P4, ANALOG IN, LED Col 2") Svg.title(this.pins[5], "P5, BUTTON A") @@ -536,32 +538,32 @@ svg.sim.grayscale { Svg.title(this.pins[19], "P19, I2C - SCL") Svg.title(this.pins[20], "P20, I2C - SDA") Svg.title(this.pins[21], "GND") - - this.pins.push(Svg.path(this.g, "sim-pin", "M483.6,402c8.2-5,14.4-14.4,14.4-25.1v-19.2h-14.4V402z", "GND")); - + + this.pins.push(Svg.path(this.g, "sim-pin", "M483.6,402c8.2-5,14.4-14.4,14.4-25.1v-19.2h-14.4V402z", "GND")); + this.pins.push(Svg.path(this.g, "sim-pin", "M359.9,317.3c-12.8,0-22.1,10.3-23.1,23.1V406H383v-65.6C383,327.7,372.7,317.3,359.9,317.3z M360,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C379.3,351.5,370.7,360.1,360,360.1z", "+3v3")); this.pins.push(Svg.path(this.g, "sim-pin", "M458,317.6c-13,0-23.6,10.6-23.6,23.6c0,0,0,0.1,0,0.1h0V406H469c4.3,0,8.4-1,12.6-2.7v-60.7c0-0.4,0-0.9,0-1.3C481.6,328.1,471,317.6,458,317.6z M457.8,360.9c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C477.1,352.2,468.4,360.9,457.8,360.9z", "GND")); - - - this.pinGradients = this.pins.map((pin,i) => { - let gid= "gradient-pin-" + i - let lg = Svg.linearGradient(this.defs, gid) + + + this.pinGradients = this.pins.map((pin, i) => { + let gid = "gradient-pin-" + i + let lg = Svg.linearGradient(this.defs, gid) pin.setAttribute("fill", `url(#${gid})`); return lg; }) - - this.pinTexts = [67,165,275].map(x => Svg.child(this.g, "text", { class:'sim-text-pin', x:x, y:345})); + + this.pinTexts = [67, 165, 275].map(x => Svg.child(this.g, "text", { class: 'sim-text-pin', x: x, y: 345 })); this.buttonsOuter = []; this.buttons = []; this.buttonsOuter.push(Svg.path(this.g, "sim-button-outer", "M82.1,232.6H25.9c-0.5,0-1-0.4-1-1v-56.2c0-0.5,0.4-1,1-1h56.2c0.5,0,1,0.4,1,1v56.2C83,232.2,82.6,232.6,82.1,232.6", "A")); this.buttons.push(Svg.path(this.g, "sim-button", "M69.7,203.5c0,8.7-7,15.7-15.7,15.7s-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7S69.7,194.9,69.7,203.5")); this.buttonsOuter.push(Svg.path(this.g, "sim-button-outer", "M474.3,232.6h-56.2c-0.5,0-1-0.4-1-1v-56.2c0-0.5,0.4-1,1-1h56.2c0.5,0,1,0.4,1,1v56.2C475.3,232.2,474.8,232.6,474.3,232.6", "B")); - this.buttons.push(Svg.path(this.g, "sim-button", "M461.9,203.5c0,8.7-7,15.7-15.7,15.7c-8.7,0-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7C454.9,187.8,461.9,194.9,461.9,203.5")); - this.buttonsOuter.push(Svg.child(this.g, "rect", {class:"sim-button-outer", x:417, y:250, width:58, height:58, rx:1, ry:1, title:"A+B"})); - this.buttons.push(Svg.child(this.g, "circle", {class:"sim-button", cx:446, cy:278, r:16.5})); + this.buttons.push(Svg.path(this.g, "sim-button", "M461.9,203.5c0,8.7-7,15.7-15.7,15.7c-8.7,0-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7C454.9,187.8,461.9,194.9,461.9,203.5")); + this.buttonsOuter.push(Svg.child(this.g, "rect", { class: "sim-button-outer", x: 417, y: 250, width: 58, height: 58, rx: 1, ry: 1, title: "A+B" })); + this.buttons.push(Svg.child(this.g, "circle", { class: "sim-button", cx: 446, cy: 278, r: 16.5 })); (this.buttonsOuter[2]).style.visibility = 'hidden'; (this.buttons[2]).style.visibility = 'hidden'; - + Svg.path(this.g, "sim-label", "M35.7,376.4c0-2.8,2.1-5.1,5.5-5.1c3.3,0,5.5,2.4,5.5,5.1v4.7c0,2.8-2.2,5.1-5.5,5.1c-3.3,0-5.5-2.4-5.5-5.1V376.4zM43.3,376.4c0-1.3-0.8-2.3-2.2-2.3c-1.3,0-2.1,1.1-2.1,2.3v4.7c0,1.2,0.8,2.3,2.1,2.3c1.3,0,2.2-1.1,2.2-2.3V376.4z"); Svg.path(this.g, "sim-label", "M136.2,374.1c2.8,0,3.4-0.8,3.4-2.5h2.9v14.3h-3.4v-9.5h-3V374.1z"); Svg.path(this.g, "sim-label", "M248.6,378.5c1.7-1,3-1.7,3-3.1c0-1.1-0.7-1.6-1.6-1.6c-1,0-1.8,0.6-1.8,2.1h-3.3c0-2.6,1.8-4.6,5.1-4.6c2.6,0,4.9,1.3,4.9,4.3c0,2.4-2.3,3.9-3.8,4.7c-2,1.3-2.5,1.8-2.5,2.9h6.1v2.7h-10C244.8,381.2,246.4,379.9,248.6,378.5z"); @@ -572,12 +574,12 @@ svg.sim.grayscale { Svg.path(this.g, "sim-label", "M368.5,385.9h-3.1l-5.1-14.3h3.5l3.1,10.1l3.1-10.1h3.6L368.5,385.9z") Svg.path(this.g, "sim-label", "M444.4,378.3h7.4v2.5h-1.5c-0.6,3.3-3,5.5-7.1,5.5c-4.8,0-7.5-3.5-7.5-7.5c0-3.9,2.8-7.5,7.5-7.5c3.8,0,6.4,2.3,6.6,5h-3.5c-0.2-1.1-1.4-2.2-3.1-2.2c-2.7,0-4.1,2.3-4.1,4.7c0,2.5,1.4,4.7,4.4,4.7c2,0,3.2-1.2,3.4-2.7h-2.5V378.3z") Svg.path(this.g, "sim-label", "M461.4,380.9v-9.3h3.3v14.3h-3.5l-5.2-9.2v9.2h-3.3v-14.3h3.5L461.4,380.9z") - Svg.path(this.g, "sim-label", "M472.7,371.6c4.8,0,7.5,3.5,7.5,7.2s-2.7,7.2-7.5,7.2h-5.3v-14.3H472.7z M470.8,374.4v8.6h1.8c2.7,0,4.2-2.1,4.2-4.3s-1.6-4.3-4.2-4.3H470.8z") + Svg.path(this.g, "sim-label", "M472.7,371.6c4.8,0,7.5,3.5,7.5,7.2s-2.7,7.2-7.5,7.2h-5.3v-14.3H472.7z M470.8,374.4v8.6h1.8c2.7,0,4.2-2.1,4.2-4.3s-1.6-4.3-4.2-4.3H470.8z") } - + private attachEvents() { Runtime.messagePosted = (msg) => { - switch(msg.type || '') { + switch (msg.type || '') { case 'serial': this.flashSystemLed(); break; case 'radiopacket': this.flashAntenna(); break; } @@ -585,8 +587,8 @@ svg.sim.grayscale { let tiltDecayer = 0; this.element.addEventListener(pointerEvents.move, (ev: MouseEvent) => { let state = this.board; - if (!state.accelerometer.isActive) return; - + if (!state.accelerometer.isActive) return; + if (tiltDecayer) { clearInterval(tiltDecayer); tiltDecayer = 0; @@ -594,39 +596,39 @@ svg.sim.grayscale { let ax = (ev.clientX - this.element.clientWidth / 2) / (this.element.clientWidth / 3); let ay = (ev.clientY - this.element.clientHeight / 2) / (this.element.clientHeight / 3); - + let x = - Math.max(- 1023, Math.min(1023, Math.floor(ax * 1023))); let y = Math.max(- 1023, Math.min(1023, Math.floor(ay * 1023))); - let z2 = 1023*1023 - x * x - y * y; - let z = Math.floor((z2 > 0 ? -1 : 1)* Math.sqrt(Math.abs(z2))); - - state.accelerometer.update(x,y,z); + let z2 = 1023 * 1023 - x * x - y * y; + let z = Math.floor((z2 > 0 ? -1 : 1) * Math.sqrt(Math.abs(z2))); + + state.accelerometer.update(x, y, z); this.updateTilt(); }, false); this.element.addEventListener(pointerEvents.leave, (ev: MouseEvent) => { let state = this.board; if (!state.accelerometer.isActive) return; - + if (!tiltDecayer) { tiltDecayer = setInterval(() => { let accx = state.accelerometer.getX(MicroBitCoordinateSystem.RAW); accx = Math.floor(Math.abs(accx) * 0.85) * (accx > 0 ? 1 : -1); let accy = state.accelerometer.getY(MicroBitCoordinateSystem.RAW); accy = Math.floor(Math.abs(accy) * 0.85) * (accy > 0 ? 1 : -1); - let accz = -Math.sqrt(Math.max(0, 1023*1023 - accx*accx - accy*accy)); + let accz = -Math.sqrt(Math.max(0, 1023 * 1023 - accx * accx - accy * accy)); if (Math.abs(accx) <= 24 && Math.abs(accy) <= 24) { - clearInterval(tiltDecayer); - tiltDecayer = 0; + clearInterval(tiltDecayer); + tiltDecayer = 0; accx = 0; accy = 0; - accz = -1023; - } + accz = -1023; + } state.accelerometer.update(accx, accy, accz); - this.updateTilt(); - }, 50) + this.updateTilt(); + }, 50) } }, false); - + this.pins.forEach((pin, index) => { if (!this.board.pins[index]) return; let pt = this.element.createSVGPoint(); @@ -641,32 +643,32 @@ svg.sim.grayscale { let v = (400 - cursor.y) / 40 * 1023 pin.value = Math.max(0, Math.min(1023, Math.floor(v))); } - this.updatePin(pin,index); + this.updatePin(pin, index); }, // start ev => { let state = this.board; let pin = state.pins[index]; let svgpin = this.pins[index]; - Svg.addClass(svgpin, 'touched'); + Svg.addClass(svgpin, "touched"); if (pin.mode & PinMode.Input) { let cursor = Svg.cursorPoint(pt, this.element, ev); let v = (400 - cursor.y) / 40 * 1023 pin.value = Math.max(0, Math.min(1023, Math.floor(v))); } - this.updatePin(pin,index); + this.updatePin(pin, index); }, // stop (ev: MouseEvent) => { let state = this.board; let pin = state.pins[index]; let svgpin = this.pins[index]; - Svg.removeClass(svgpin, 'touched'); + Svg.removeClass(svgpin, "touched"); this.updatePin(pin, index); return false; - }); + }); }) - this.pins.slice(0,3).forEach((btn, index) => { + this.pins.slice(0, 3).forEach((btn, index) => { btn.addEventListener(pointerEvents.down, ev => { let state = this.board; state.pins[index].touched = true; @@ -682,13 +684,13 @@ svg.sim.grayscale { state.pins[index].touched = false; this.updatePin(state.pins[index], index); this.board.bus.queue(state.pins[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK); - }) + }) }) - this.buttonsOuter.slice(0,2).forEach((btn, index) => { + this.buttonsOuter.slice(0, 2).forEach((btn, index) => { btn.addEventListener(pointerEvents.down, ev => { let state = this.board; state.buttons[index].pressed = true; - Svg.fill(this.buttons[index], this.props.theme.buttonDown); + Svg.fill(this.buttons[index], this.props.theme.buttonDown); }) btn.addEventListener(pointerEvents.leave, ev => { let state = this.board; @@ -699,39 +701,39 @@ svg.sim.grayscale { let state = this.board; state.buttons[index].pressed = false; Svg.fill(this.buttons[index], this.props.theme.buttonUp); - + this.board.bus.queue(state.buttons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK); }) }) this.buttonsOuter[2].addEventListener(pointerEvents.down, ev => { - let state = this.board; - state.buttons[0].pressed = true; - state.buttons[1].pressed = true; - state.buttons[2].pressed = true; - Svg.fill(this.buttons[0], this.props.theme.buttonDown); - Svg.fill(this.buttons[1], this.props.theme.buttonDown); - Svg.fill(this.buttons[2], this.props.theme.buttonDown); - }) + let state = this.board; + state.buttons[0].pressed = true; + state.buttons[1].pressed = true; + state.buttons[2].pressed = true; + Svg.fill(this.buttons[0], this.props.theme.buttonDown); + Svg.fill(this.buttons[1], this.props.theme.buttonDown); + Svg.fill(this.buttons[2], this.props.theme.buttonDown); + }) this.buttonsOuter[2].addEventListener(pointerEvents.leave, ev => { - let state = this.board; - state.buttons[0].pressed = false; - state.buttons[1].pressed = false; - state.buttons[2].pressed = false; - Svg.fill(this.buttons[0], this.props.theme.buttonUp); - Svg.fill(this.buttons[1], this.props.theme.buttonUp); - Svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); + let state = this.board; + state.buttons[0].pressed = false; + state.buttons[1].pressed = false; + state.buttons[2].pressed = false; + Svg.fill(this.buttons[0], this.props.theme.buttonUp); + Svg.fill(this.buttons[1], this.props.theme.buttonUp); + Svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); }) this.buttonsOuter[2].addEventListener(pointerEvents.up, ev => { - let state = this.board; - state.buttons[0].pressed = false; - state.buttons[1].pressed = false; - state.buttons[2].pressed = false; - Svg.fill(this.buttons[0], this.props.theme.buttonUp); - Svg.fill(this.buttons[1], this.props.theme.buttonUp); - Svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); - - this.board.bus.queue(state.buttons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK); - }) + let state = this.board; + state.buttons[0].pressed = false; + state.buttons[1].pressed = false; + state.buttons[2].pressed = false; + Svg.fill(this.buttons[0], this.props.theme.buttonUp); + Svg.fill(this.buttons[1], this.props.theme.buttonUp); + Svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); + + this.board.bus.queue(state.buttons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK); + }) } } } \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..6d9bd5e2 --- /dev/null +++ b/tslint.json @@ -0,0 +1,56 @@ +{ + "rules": { + "class-name": true, + "comment-format": [ + true + ], + "indent": [ + true, + "spaces" + ], + "no-duplicate-variable": true, + "no-eval": true, + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-var-keyword": true, + "one-line": [ + true, + "check-open-brace", + "check-whitespace" + ], + "quotemark": [ + true, + "double" + ], + "semicolon": [ + false, + "always" + ], + "triple-equals": [ + false, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": [ + true, + "ban-keywords" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} \ No newline at end of file From b5e4a36e9cbf58a6c0840579a6f6dae963afee15 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Thu, 5 May 2016 14:20:18 +0100 Subject: [PATCH 18/56] Add libraries docs --- docs/docs.md | 3 ++- docs/libraries.md | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 docs/libraries.md diff --git a/docs/docs.md b/docs/docs.md index 5d5a4c01..4cbce65c 100644 --- a/docs/docs.md +++ b/docs/docs.md @@ -2,6 +2,7 @@ Welcome to the documentation. -* Browse the [reference](/reference) +* Browse the [API reference](/reference) * Learn more about the [device](/device) * Get started with [lessons](/lessons) +* Learn about [libraries](/libraries) (possibly using C++) diff --git a/docs/libraries.md b/docs/libraries.md new file mode 100644 index 00000000..7738fecd --- /dev/null +++ b/docs/libraries.md @@ -0,0 +1,14 @@ +# Extensions + +You can publish libraries (also known as packages or extensions) +that users can then add to their scripts. These typically +provide a driver for a particular hardware device you can connect +to a microbit. + +* [Sample C++ extension](https://github.com/Microsoft/pxt-microbit-cppsample) +* [Sample TypeScript extension](https://github.com/Microsoft/pxt-microbit/tree/master/libs/i2c-fram) + +## Finding libraries + +## Publishing libraries + From efce4c3698a21e73577f1361b61b077f92b9471b Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 08:57:44 -0700 Subject: [PATCH 19/56] linting --- sim/simsvg.ts | 254 +++++++++++++++++++++++++------------------------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/sim/simsvg.ts b/sim/simsvg.ts index 5497bee6..ffe1ca4b 100644 --- a/sim/simsvg.ts +++ b/sim/simsvg.ts @@ -1,5 +1,5 @@ namespace pxsim.micro_bit { - const Svg = pxsim.Svg; + const svg = pxsim.svg; export interface IBoardTheme { accent?: string; @@ -102,20 +102,20 @@ namespace pxsim.micro_bit { private updateTheme() { let theme = this.props.theme; - Svg.fill(this.display, theme.display); - Svg.fills(this.leds, theme.ledOn); - Svg.fills(this.ledsOuter, theme.ledOff); - Svg.fills(this.buttonsOuter.slice(0, 2), theme.buttonOuter); - Svg.fills(this.buttons.slice(0, 2), theme.buttonUp); - Svg.fill(this.buttonsOuter[2], theme.virtualButtonOuter); - Svg.fill(this.buttons[2], theme.virtualButtonUp); - Svg.fills(this.logos, theme.accent); - if (this.shakeButton) Svg.fill(this.shakeButton, theme.virtualButtonUp); + svg.fill(this.display, theme.display); + svg.fills(this.leds, theme.ledOn); + svg.fills(this.ledsOuter, theme.ledOff); + svg.fills(this.buttonsOuter.slice(0, 2), theme.buttonOuter); + svg.fills(this.buttons.slice(0, 2), theme.buttonUp); + svg.fill(this.buttonsOuter[2], theme.virtualButtonOuter); + svg.fill(this.buttons[2], theme.virtualButtonUp); + svg.fills(this.logos, theme.accent); + if (this.shakeButton) svg.fill(this.shakeButton, theme.virtualButtonUp); - this.pinGradients.forEach(lg => Svg.setGradientColors(lg, theme.pin, theme.pinActive)); - Svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff); + this.pinGradients.forEach(lg => svg.setGradientColors(lg, theme.pin, theme.pinActive)); + svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff); - Svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn); + svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn); } public updateState() { @@ -124,7 +124,7 @@ namespace pxsim.micro_bit { let theme = this.props.theme; state.buttons.forEach((btn, index) => { - Svg.fill(this.buttons[index], btn.pressed ? theme.buttonDown : theme.buttonUp); + svg.fill(this.buttons[index], btn.pressed ? theme.buttonDown : theme.buttonUp); }); let bw = state.displayMode == pxsim.DisplayMode.bw @@ -141,29 +141,29 @@ namespace pxsim.micro_bit { this.updateButtonAB(); this.updateGestures(); - if (!runtime || runtime.dead) Svg.addClass(this.element, "grayscale"); - else Svg.removeClass(this.element, "grayscale"); + if (!runtime || runtime.dead) svg.addClass(this.element, "grayscale"); + else svg.removeClass(this.element, "grayscale"); } private updateGestures() { let state = this.board; if (state.useShake && !this.shakeButton) { - this.shakeButton = Svg.child(this.g, "circle", { cx: 380, cy: 100, r: 16.5 }) as SVGCircleElement; - Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp) + this.shakeButton = svg.child(this.g, "circle", { cx: 380, cy: 100, r: 16.5 }) as SVGCircleElement; + svg.fill(this.shakeButton, this.props.theme.virtualButtonUp) this.shakeButton.addEventListener(pointerEvents.down, ev => { let state = this.board; - Svg.fill(this.shakeButton, this.props.theme.buttonDown); + svg.fill(this.shakeButton, this.props.theme.buttonDown); }) this.shakeButton.addEventListener(pointerEvents.leave, ev => { let state = this.board; - Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); + svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); }) this.shakeButton.addEventListener(pointerEvents.up, ev => { let state = this.board; - Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); + svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE }) - this.shakeText = Svg.child(this.g, "text", { x: 400, y: 110, class: "sim-text" }) as SVGTextElement; + this.shakeText = svg.child(this.g, "text", { x: 400, y: 110, class: "sim-text" }) as SVGTextElement; this.shakeText.textContent = "SHAKE" } } @@ -173,7 +173,7 @@ namespace pxsim.micro_bit { if (state.usesButtonAB && !this.buttonABText) { (this.buttonsOuter[2]).style.visibility = "visible"; (this.buttons[2]).style.visibility = "visible"; - this.buttonABText = Svg.child(this.g, "text", { class: "sim-text", x: 370, y: 272 }) as SVGTextElement; + this.buttonABText = svg.child(this.g, "text", { class: "sim-text", x: 370, y: 272 }) as SVGTextElement; this.buttonABText.textContent = "A+B"; this.updateTheme(); } @@ -198,7 +198,7 @@ namespace pxsim.micro_bit { v = '100%'; if (text) text.textContent = ''; } - if (v) Svg.setGradientValue(this.pinGradients[index], v); + if (v) svg.setGradientValue(this.pinGradients[index], v); } private updateTemperature() { @@ -209,8 +209,8 @@ namespace pxsim.micro_bit { let tmax = 50; if (!this.thermometer) { let gid = "gradient-thermometer"; - this.thermometerGradient = Svg.linearGradient(this.defs, gid); - this.thermometer = Svg.child(this.g, "rect", { + this.thermometerGradient = svg.linearGradient(this.defs, gid); + this.thermometer = svg.child(this.g, "rect", { class: "sim-thermometer", x: 120, y: 110, @@ -219,13 +219,13 @@ namespace pxsim.micro_bit { rx: 5, ry: 5, fill: `url(#${gid})` }); - this.thermometerText = Svg.child(this.g, "text", { class: 'sim-text', x: 58, y: 130 }) as SVGTextElement; + this.thermometerText = svg.child(this.g, "text", { class: 'sim-text', x: 58, y: 130 }) as SVGTextElement; this.updateTheme(); let pt = this.element.createSVGPoint(); - Svg.buttonEvents(this.thermometer, + svg.buttonEvents(this.thermometer, (ev) => { - let cur = Svg.cursorPoint(pt, this.element, ev); + let cur = svg.cursorPoint(pt, this.element, ev); let t = Math.max(0, Math.min(1, (260 - cur.y) / 140)) state.temperature = Math.floor(tmin + t * (tmax - tmin)); this.updateTemperature(); @@ -234,7 +234,7 @@ namespace pxsim.micro_bit { let t = Math.max(tmin, Math.min(tmax, state.temperature)) let per = Math.floor((state.temperature - tmin) / (tmax - tmin) * 100) - Svg.setGradientValue(this.thermometerGradient, 100 - per + '%'); + svg.setGradientValue(this.thermometerGradient, 100 - per + '%'); this.thermometerText.textContent = t + '°C'; } @@ -247,10 +247,10 @@ namespace pxsim.micro_bit { let p = this.head.firstChild.nextSibling as SVGPathElement; p.setAttribute("d", "m269.9,50.134647l0,0l-39.5,0l0,0c-14.1,0.1 -24.6,10.7 -24.6,24.8c0,13.9 10.4,24.4 24.3,24.7l0,0l39.6,0c14.2,0 40.36034,-22.97069 40.36034,-24.85394c0,-1.88326 -26.06034,-24.54606 -40.16034,-24.64606m-0.2,39l0,0l-39.3,0c-7.7,-0.1 -14,-6.4 -14,-14.2c0,-7.8 6.4,-14.2 14.2,-14.2l39.1,0c7.8,0 14.2,6.4 14.2,14.2c0,7.9 -6.4,14.2 -14.2,14.2l0,0l0,0z"); let pt = this.element.createSVGPoint(); - Svg.buttonEvents( + svg.buttonEvents( this.head, (ev: MouseEvent) => { - let cur = Svg.cursorPoint(pt, this.element, ev); + let cur = svg.cursorPoint(pt, this.element, ev); state.heading = Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI + 90); if (state.heading < 0) state.heading += 360; console.log('heading: ' + state.heading) @@ -261,7 +261,7 @@ namespace pxsim.micro_bit { let txt = state.heading.toString() + '°'; if (txt != this.headText.textContent) { - Svg.rotateElement(this.head, xc, yc, state.heading + 180); + svg.rotateElement(this.head, xc, yc, state.heading + 180); this.headText.textContent = txt; } } @@ -269,11 +269,11 @@ namespace pxsim.micro_bit { private lastFlashTime: number = 0; public flashSystemLed() { if (!this.systemLed) - this.systemLed = Svg.child(this.g, "circle", { class: "sim-systemled", cx: 300, cy: 20, r: 5 }) + this.systemLed = svg.child(this.g, "circle", { class: "sim-systemled", cx: 300, cy: 20, r: 5 }) let now = Date.now(); if (now - this.lastFlashTime > 150) { this.lastFlashTime = now; - Svg.animate(this.systemLed, 'sim-flash') + svg.animate(this.systemLed, 'sim-flash') } } @@ -284,12 +284,12 @@ namespace pxsim.micro_bit { let dax = 18; let ayt = 10; let ayb = 40; - this.antenna = Svg.child(this.g, "polyline", { class: "sim-antenna", points: `${ax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt}` }) + this.antenna = svg.child(this.g, "polyline", { class: "sim-antenna", points: `${ax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt}` }) } let now = Date.now(); if (now - this.lastAntennaFlash > 200) { this.lastAntennaFlash = now; - Svg.animate(this.antenna, 'sim-flash-stroke') + svg.animate(this.antenna, 'sim-flash-stroke') } } @@ -306,18 +306,18 @@ namespace pxsim.micro_bit { if (!this.lightLevelButton) { let gid = "gradient-light-level"; - this.lightLevelGradient = Svg.linearGradient(this.defs, gid) + this.lightLevelGradient = svg.linearGradient(this.defs, gid) let cy = 50; let r = 35; - this.lightLevelButton = Svg.child(this.g, "circle", { + this.lightLevelButton = svg.child(this.g, "circle", { cx: `50px`, cy: `${cy}px`, r: `${r}px`, class: 'sim-light-level-button', fill: `url(#${gid})` }) as SVGCircleElement; let pt = this.element.createSVGPoint(); - Svg.buttonEvents(this.lightLevelButton, + svg.buttonEvents(this.lightLevelButton, (ev) => { - let pos = Svg.cursorPoint(pt, this.element, ev); + let pos = svg.cursorPoint(pt, this.element, ev); let rs = r / 2; let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy - rs)) / (2 * rs) * 255))); if (level != this.board.lightLevel) { @@ -326,17 +326,17 @@ namespace pxsim.micro_bit { } }, ev => { }, ev => { }) - this.lightLevelText = Svg.child(this.g, "text", { x: 85, y: cy + r - 5, text: '', class: 'sim-text' }) as SVGTextElement; + this.lightLevelText = svg.child(this.g, "text", { x: 85, y: cy + r - 5, text: '', class: 'sim-text' }) as SVGTextElement; this.updateTheme(); } - Svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightLevel * 100 / 255))) + '%') + svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightLevel * 100 / 255))) + '%') this.lightLevelText.textContent = state.lightLevel.toString(); } private applyLightLevel() { let lv = this.board.lightLevel; - Svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%') + svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%') this.lightLevelText.textContent = lv.toString(); } @@ -355,8 +355,8 @@ namespace pxsim.micro_bit { } private buildDom() { - this.element = Svg.elt("svg") - Svg.hydrate(this.element, { + this.element = svg.elt("svg") + svg.hydrate(this.element, { "version": "1.0", "viewBox": "0 0 498 406", "enable-background": "new 0 0 498 406", @@ -364,7 +364,7 @@ namespace pxsim.micro_bit { "x": "0px", "y": "0px" }); - this.style = Svg.child(this.element, "style", {}); + this.style = svg.child(this.element, "style", {}); this.style.textContent = ` svg.sim { margin-bottom:1em; @@ -461,28 +461,28 @@ svg.sim.grayscale { `; - this.defs = Svg.child(this.element, "defs", {}); - this.g = Svg.elt("g"); + this.defs = svg.child(this.element, "defs", {}); + this.g = svg.elt("g"); this.element.appendChild(this.g); // filters - let glow = Svg.child(this.defs, "filter", { id: "filterglow", x: "-5%", y: "-5%", width: "120%", height: "120%" }); - Svg.child(glow, "feGaussianBlur", { stdDeviation: "5", result: "glow" }); - let merge = Svg.child(glow, "feMerge", {}); - for (let i = 0; i < 3; ++i) Svg.child(merge, "feMergeNode", { in: "glow" }) + let glow = svg.child(this.defs, "filter", { id: "filterglow", x: "-5%", y: "-5%", width: "120%", height: "120%" }); + svg.child(glow, "feGaussianBlur", { stdDeviation: "5", result: "glow" }); + let merge = svg.child(glow, "feMerge", {}); + for (let i = 0; i < 3; ++i) svg.child(merge, "feMergeNode", { in: "glow" }) // outline - Svg.path(this.g, "sim-board", "M498,31.9C498,14.3,483.7,0,466.1,0H31.9C14.3,0,0,14.3,0,31.9v342.2C0,391.7,14.3,406,31.9,406h434.2c17.6,0,31.9-14.3,31.9-31.9V31.9z M14.3,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.7,2.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C19.2,204.6,17,206.7,14.3,206.7z M486.2,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.72.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C491,204.6,488.8,206.7,486.2,206.7z"); + svg.path(this.g, "sim-board", "M498,31.9C498,14.3,483.7,0,466.1,0H31.9C14.3,0,0,14.3,0,31.9v342.2C0,391.7,14.3,406,31.9,406h434.2c17.6,0,31.9-14.3,31.9-31.9V31.9z M14.3,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.7,2.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C19.2,204.6,17,206.7,14.3,206.7z M486.2,206.7c-2.7,0-4.8-2.2-4.8-4.8c0-2.72.2-4.8,4.8-4.8c2.7,0,4.8,2.2,4.8,4.8C491,204.6,488.8,206.7,486.2,206.7z"); // script background - this.display = Svg.path(this.g, "sim-display", "M333.8,310.3H165.9c-8.3,0-15-6.7-15-15V127.5c0-8.3,6.7-15,15-15h167.8c8.3,0,15,6.7,15,15v167.8C348.8,303.6,342.1,310.3,333.8,310.3z"); + this.display = svg.path(this.g, "sim-display", "M333.8,310.3H165.9c-8.3,0-15-6.7-15-15V127.5c0-8.3,6.7-15,15-15h167.8c8.3,0,15,6.7,15,15v167.8C348.8,303.6,342.1,310.3,333.8,310.3z"); this.logos = []; - this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "115,56.7 173.1,0 115,0" })); - this.logos.push(Svg.path(this.g, "sim-theme", "M114.2,0H25.9C12.1,2.1,0,13.3,0,27.7v83.9L114.2,0z")); - this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "173,27.9 202.5,0 173,0" })); - this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "54.1,242.4 54.1,274.1 22.4,274.1" })); - this.logos.push(Svg.child(this.g, "polygon", { class: "sim-theme", points: "446.2,164.6 446.2,132.8 477.9,132.8" })); + this.logos.push(svg.child(this.g, "polygon", { class: "sim-theme", points: "115,56.7 173.1,0 115,0" })); + this.logos.push(svg.path(this.g, "sim-theme", "M114.2,0H25.9C12.1,2.1,0,13.3,0,27.7v83.9L114.2,0z")); + this.logos.push(svg.child(this.g, "polygon", { class: "sim-theme", points: "173,27.9 202.5,0 173,0" })); + this.logos.push(svg.child(this.g, "polygon", { class: "sim-theme", points: "54.1,242.4 54.1,274.1 22.4,274.1" })); + this.logos.push(svg.child(this.g, "polygon", { class: "sim-theme", points: "446.2,164.6 446.2,132.8 477.9,132.8" })); // leds this.leds = []; @@ -493,18 +493,18 @@ svg.sim.grayscale { for (let j = 0; j < 5; ++j) { let ledleft = j * ledoffw + left; let k = i * 5 + j; - this.ledsOuter.push(Svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: 10, height: 20, rx: 2, ry: 2 })); - this.leds.push(Svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 2, y: ledtop - 2, width: 14, height: 24, rx: 3, ry: 3, title: `(${j},${i})` })); + this.ledsOuter.push(svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: 10, height: 20, rx: 2, ry: 2 })); + this.leds.push(svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 2, y: ledtop - 2, width: 14, height: 24, rx: 3, ry: 3, title: `(${j},${i})` })); } } // head - this.head = Svg.child(this.g, "g", {}); - Svg.child(this.head, "circle", { cx: 258, cy: 75, r: 100, fill: "transparent" }) - this.logos.push(Svg.path(this.head, "sim-theme", "M269.9,50.2L269.9,50.2l-39.5,0v0c-14.1,0.1-24.6,10.7-24.6,24.8c0,13.9,10.4,24.4,24.3,24.7v0h39.6c14.2,0,24.8-10.6,24.8-24.7C294.5,61,284,50.3,269.9,50.2 M269.7,89.2L269.7,89.2l-39.3,0c-7.7-0.1-14-6.4-14-14.2c0-7.8,6.4-14.2,14.2-14.2h39.1c7.8,0,14.2,6.4,14.2,14.2C283.9,82.9,277.5,89.2,269.7,89.2")); - this.logos.push(Svg.path(this.head, "sim-theme", "M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7")); - this.logos.push(Svg.path(this.head, "sim-theme", "M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3")); - this.headText = Svg.child(this.g, "text", { x: 310, y: 100, class: "sim-text" }) + this.head = svg.child(this.g, "g", {}); + svg.child(this.head, "circle", { cx: 258, cy: 75, r: 100, fill: "transparent" }) + this.logos.push(svg.path(this.head, "sim-theme", "M269.9,50.2L269.9,50.2l-39.5,0v0c-14.1,0.1-24.6,10.7-24.6,24.8c0,13.9,10.4,24.4,24.3,24.7v0h39.6c14.2,0,24.8-10.6,24.8-24.7C294.5,61,284,50.3,269.9,50.2 M269.7,89.2L269.7,89.2l-39.3,0c-7.7-0.1-14-6.4-14-14.2c0-7.8,6.4-14.2,14.2-14.2h39.1c7.8,0,14.2,6.4,14.2,14.2C283.9,82.9,277.5,89.2,269.7,89.2")); + this.logos.push(svg.path(this.head, "sim-theme", "M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7")); + this.logos.push(svg.path(this.head, "sim-theme", "M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3")); + this.headText = svg.child(this.g, "text", { x: 310, y: 100, class: "sim-text" }) // https://www.microbit.co.uk/device/pins // P0, P1, P2 @@ -512,69 +512,69 @@ svg.sim.grayscale { "M16.5,341.2c0,0.4-0.1,0.9-0.1,1.3v60.7c4.1,1.7,8.6,2.7,12.9,2.7h34.4v-64.7h0.3c0,0,0-0.1,0-0.1c0-13-10.6-23.6-23.7-23.6C27.2,317.6,16.5,328.1,16.5,341.2z M21.2,341.6c0-10.7,8.7-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3c0,10.7-8.6,19.3-19.3,19.3C29.9,360.9,21.2,352.2,21.2,341.6z", "M139.1,317.3c-12.8,0-22.1,10.3-23.1,23.1V406h46.2v-65.6C162.2,327.7,151.9,317.3,139.1,317.3zM139.3,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C158.6,351.5,150,360.1,139.3,360.1z", "M249,317.3c-12.8,0-22.1,10.3-23.1,23.1V406h46.2v-65.6C272.1,327.7,261.8,317.3,249,317.3z M249.4,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C268.7,351.5,260.1,360.1,249.4,360.1z" - ].map((p, pi) => Svg.path(this.g, "sim-pin sim-pin-touch", p, `P${pi}, ANALOG IN`)); + ].map((p, pi) => svg.path(this.g, "sim-pin sim-pin-touch", p, `P${pi}, ANALOG IN`)); // P3 - this.pins.push(Svg.path(this.g, "sim-pin", "M0,357.7v19.2c0,10.8,6.2,20.2,14.4,25.2v-44.4H0z", "P3, ANALOG IN, LED Col 1")); + this.pins.push(svg.path(this.g, "sim-pin", "M0,357.7v19.2c0,10.8,6.2,20.2,14.4,25.2v-44.4H0z", "P3, ANALOG IN, LED Col 1")); [66.7, 79.1, 91.4, 103.7, 164.3, 176.6, 188.9, 201.3, 213.6, 275.2, 287.5, 299.8, 312.1, 324.5, 385.1, 397.4, 409.7, 422].forEach(x => { - this.pins.push(Svg.child(this.g, "rect", { x: x, y: 356.7, width: 10, height: 50, class: "sim-pin" })); + this.pins.push(svg.child(this.g, "rect", { x: x, y: 356.7, width: 10, height: 50, class: "sim-pin" })); }) - Svg.title(this.pins[4], "P4, ANALOG IN, LED Col 2") - Svg.title(this.pins[5], "P5, BUTTON A") - Svg.title(this.pins[6], "P6, LED Col 9") - Svg.title(this.pins[7], "P7, LED Col 8") - Svg.title(this.pins[8], "P8") - Svg.title(this.pins[9], "P9, LED Col 7") - Svg.title(this.pins[10], "P10, ANALOG IN, LED Col 3") - Svg.title(this.pins[11], "P11, BUTTON B") - Svg.title(this.pins[12], "P12, RESERVED ACCESSIBILITY") - Svg.title(this.pins[13], "P13, SPI - SCK") - Svg.title(this.pins[14], "P14, SPI - MISO") - Svg.title(this.pins[15], "P15, SPI - MOSI") - Svg.title(this.pins[16], "P16, SPI - Chip Select") - Svg.title(this.pins[17], "P17, +3v3") - Svg.title(this.pins[18], "P18, +3v3") - Svg.title(this.pins[19], "P19, I2C - SCL") - Svg.title(this.pins[20], "P20, I2C - SDA") - Svg.title(this.pins[21], "GND") + svg.title(this.pins[4], "P4, ANALOG IN, LED Col 2") + svg.title(this.pins[5], "P5, BUTTON A") + svg.title(this.pins[6], "P6, LED Col 9") + svg.title(this.pins[7], "P7, LED Col 8") + svg.title(this.pins[8], "P8") + svg.title(this.pins[9], "P9, LED Col 7") + svg.title(this.pins[10], "P10, ANALOG IN, LED Col 3") + svg.title(this.pins[11], "P11, BUTTON B") + svg.title(this.pins[12], "P12, RESERVED ACCESSIBILITY") + svg.title(this.pins[13], "P13, SPI - SCK") + svg.title(this.pins[14], "P14, SPI - MISO") + svg.title(this.pins[15], "P15, SPI - MOSI") + svg.title(this.pins[16], "P16, SPI - Chip Select") + svg.title(this.pins[17], "P17, +3v3") + svg.title(this.pins[18], "P18, +3v3") + svg.title(this.pins[19], "P19, I2C - SCL") + svg.title(this.pins[20], "P20, I2C - SDA") + svg.title(this.pins[21], "GND") - this.pins.push(Svg.path(this.g, "sim-pin", "M483.6,402c8.2-5,14.4-14.4,14.4-25.1v-19.2h-14.4V402z", "GND")); + this.pins.push(svg.path(this.g, "sim-pin", "M483.6,402c8.2-5,14.4-14.4,14.4-25.1v-19.2h-14.4V402z", "GND")); - this.pins.push(Svg.path(this.g, "sim-pin", "M359.9,317.3c-12.8,0-22.1,10.3-23.1,23.1V406H383v-65.6C383,327.7,372.7,317.3,359.9,317.3z M360,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C379.3,351.5,370.7,360.1,360,360.1z", "+3v3")); - this.pins.push(Svg.path(this.g, "sim-pin", "M458,317.6c-13,0-23.6,10.6-23.6,23.6c0,0,0,0.1,0,0.1h0V406H469c4.3,0,8.4-1,12.6-2.7v-60.7c0-0.4,0-0.9,0-1.3C481.6,328.1,471,317.6,458,317.6z M457.8,360.9c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C477.1,352.2,468.4,360.9,457.8,360.9z", "GND")); + this.pins.push(svg.path(this.g, "sim-pin", "M359.9,317.3c-12.8,0-22.1,10.3-23.1,23.1V406H383v-65.6C383,327.7,372.7,317.3,359.9,317.3z M360,360.1c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C379.3,351.5,370.7,360.1,360,360.1z", "+3v3")); + this.pins.push(svg.path(this.g, "sim-pin", "M458,317.6c-13,0-23.6,10.6-23.6,23.6c0,0,0,0.1,0,0.1h0V406H469c4.3,0,8.4-1,12.6-2.7v-60.7c0-0.4,0-0.9,0-1.3C481.6,328.1,471,317.6,458,317.6z M457.8,360.9c-10.7,0-19.3-8.6-19.3-19.3c0-10.7,8.6-19.3,19.3-19.3c10.7,0,19.3,8.7,19.3,19.3C477.1,352.2,468.4,360.9,457.8,360.9z", "GND")); this.pinGradients = this.pins.map((pin, i) => { let gid = "gradient-pin-" + i - let lg = Svg.linearGradient(this.defs, gid) + let lg = svg.linearGradient(this.defs, gid) pin.setAttribute("fill", `url(#${gid})`); return lg; }) - this.pinTexts = [67, 165, 275].map(x => Svg.child(this.g, "text", { class: 'sim-text-pin', x: x, y: 345 })); + this.pinTexts = [67, 165, 275].map(x => svg.child(this.g, "text", { class: 'sim-text-pin', x: x, y: 345 })); this.buttonsOuter = []; this.buttons = []; - this.buttonsOuter.push(Svg.path(this.g, "sim-button-outer", "M82.1,232.6H25.9c-0.5,0-1-0.4-1-1v-56.2c0-0.5,0.4-1,1-1h56.2c0.5,0,1,0.4,1,1v56.2C83,232.2,82.6,232.6,82.1,232.6", "A")); - this.buttons.push(Svg.path(this.g, "sim-button", "M69.7,203.5c0,8.7-7,15.7-15.7,15.7s-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7S69.7,194.9,69.7,203.5")); - this.buttonsOuter.push(Svg.path(this.g, "sim-button-outer", "M474.3,232.6h-56.2c-0.5,0-1-0.4-1-1v-56.2c0-0.5,0.4-1,1-1h56.2c0.5,0,1,0.4,1,1v56.2C475.3,232.2,474.8,232.6,474.3,232.6", "B")); - this.buttons.push(Svg.path(this.g, "sim-button", "M461.9,203.5c0,8.7-7,15.7-15.7,15.7c-8.7,0-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7C454.9,187.8,461.9,194.9,461.9,203.5")); - this.buttonsOuter.push(Svg.child(this.g, "rect", { class: "sim-button-outer", x: 417, y: 250, width: 58, height: 58, rx: 1, ry: 1, title: "A+B" })); - this.buttons.push(Svg.child(this.g, "circle", { class: "sim-button", cx: 446, cy: 278, r: 16.5 })); + this.buttonsOuter.push(svg.path(this.g, "sim-button-outer", "M82.1,232.6H25.9c-0.5,0-1-0.4-1-1v-56.2c0-0.5,0.4-1,1-1h56.2c0.5,0,1,0.4,1,1v56.2C83,232.2,82.6,232.6,82.1,232.6", "A")); + this.buttons.push(svg.path(this.g, "sim-button", "M69.7,203.5c0,8.7-7,15.7-15.7,15.7s-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7S69.7,194.9,69.7,203.5")); + this.buttonsOuter.push(svg.path(this.g, "sim-button-outer", "M474.3,232.6h-56.2c-0.5,0-1-0.4-1-1v-56.2c0-0.5,0.4-1,1-1h56.2c0.5,0,1,0.4,1,1v56.2C475.3,232.2,474.8,232.6,474.3,232.6", "B")); + this.buttons.push(svg.path(this.g, "sim-button", "M461.9,203.5c0,8.7-7,15.7-15.7,15.7c-8.7,0-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7C454.9,187.8,461.9,194.9,461.9,203.5")); + this.buttonsOuter.push(svg.child(this.g, "rect", { class: "sim-button-outer", x: 417, y: 250, width: 58, height: 58, rx: 1, ry: 1, title: "A+B" })); + this.buttons.push(svg.child(this.g, "circle", { class: "sim-button", cx: 446, cy: 278, r: 16.5 })); (this.buttonsOuter[2]).style.visibility = 'hidden'; (this.buttons[2]).style.visibility = 'hidden'; - Svg.path(this.g, "sim-label", "M35.7,376.4c0-2.8,2.1-5.1,5.5-5.1c3.3,0,5.5,2.4,5.5,5.1v4.7c0,2.8-2.2,5.1-5.5,5.1c-3.3,0-5.5-2.4-5.5-5.1V376.4zM43.3,376.4c0-1.3-0.8-2.3-2.2-2.3c-1.3,0-2.1,1.1-2.1,2.3v4.7c0,1.2,0.8,2.3,2.1,2.3c1.3,0,2.2-1.1,2.2-2.3V376.4z"); - Svg.path(this.g, "sim-label", "M136.2,374.1c2.8,0,3.4-0.8,3.4-2.5h2.9v14.3h-3.4v-9.5h-3V374.1z"); - Svg.path(this.g, "sim-label", "M248.6,378.5c1.7-1,3-1.7,3-3.1c0-1.1-0.7-1.6-1.6-1.6c-1,0-1.8,0.6-1.8,2.1h-3.3c0-2.6,1.8-4.6,5.1-4.6c2.6,0,4.9,1.3,4.9,4.3c0,2.4-2.3,3.9-3.8,4.7c-2,1.3-2.5,1.8-2.5,2.9h6.1v2.7h-10C244.8,381.2,246.4,379.9,248.6,378.5z"); - Svg.path(this.g, "sim-label", "M48.1,270.9l-0.6-1.7h-5.1l-0.6,1.7h-3.5l5.1-14.3h3.1l5.2,14.3H48.1z M45,260.7l-1.8,5.9h3.5L45,260.7z"); + svg.path(this.g, "sim-label", "M35.7,376.4c0-2.8,2.1-5.1,5.5-5.1c3.3,0,5.5,2.4,5.5,5.1v4.7c0,2.8-2.2,5.1-5.5,5.1c-3.3,0-5.5-2.4-5.5-5.1V376.4zM43.3,376.4c0-1.3-0.8-2.3-2.2-2.3c-1.3,0-2.1,1.1-2.1,2.3v4.7c0,1.2,0.8,2.3,2.1,2.3c1.3,0,2.2-1.1,2.2-2.3V376.4z"); + svg.path(this.g, "sim-label", "M136.2,374.1c2.8,0,3.4-0.8,3.4-2.5h2.9v14.3h-3.4v-9.5h-3V374.1z"); + svg.path(this.g, "sim-label", "M248.6,378.5c1.7-1,3-1.7,3-3.1c0-1.1-0.7-1.6-1.6-1.6c-1,0-1.8,0.6-1.8,2.1h-3.3c0-2.6,1.8-4.6,5.1-4.6c2.6,0,4.9,1.3,4.9,4.3c0,2.4-2.3,3.9-3.8,4.7c-2,1.3-2.5,1.8-2.5,2.9h6.1v2.7h-10C244.8,381.2,246.4,379.9,248.6,378.5z"); + svg.path(this.g, "sim-label", "M48.1,270.9l-0.6-1.7h-5.1l-0.6,1.7h-3.5l5.1-14.3h3.1l5.2,14.3H48.1z M45,260.7l-1.8,5.9h3.5L45,260.7z"); - Svg.path(this.g, "sim-label", "M449.1,135.8h5.9c3.9,0,4.7,2.4,4.7,3.9c0,1.8-1.4,2.9-2.5,3.2c0.9,0,2.6,1.1,2.6,3.3c0,1.5-0.8,4-4.7,4h-6V135.8zM454.4,141.7c1.6,0,2-1,2-1.7c0-0.6-0.3-1.7-2-1.7h-2v3.4H454.4z M452.4,144.1v3.5h2.1c1.6,0,2-1,2-1.8c0-0.7-0.4-1.8-2-1.8H452.4z") - Svg.path(this.g, "sim-label", "M352.1,381.1c0,1.6,0.9,2.5,2.2,2.5c1.2,0,1.9-0.9,1.9-1.9c0-1.2-0.6-2-2.1-2h-1.3v-2.6h1.3c1.5,0,1.9-0.7,1.9-1.8c0-1.1-0.7-1.6-1.6-1.6c-1.4,0-1.8,0.8-1.8,2.1h-3.3c0-2.4,1.5-4.6,5.1-4.6c2.6,0,5,1.3,5,4c0,1.6-1,2.8-2.1,3.2c1.3,0.5,2.3,1.6,2.3,3.5c0,2.7-2.4,4.3-5.2,4.3c-3.5,0-5.5-2.1-5.5-5.1H352.1z") - Svg.path(this.g, "sim-label", "M368.5,385.9h-3.1l-5.1-14.3h3.5l3.1,10.1l3.1-10.1h3.6L368.5,385.9z") - Svg.path(this.g, "sim-label", "M444.4,378.3h7.4v2.5h-1.5c-0.6,3.3-3,5.5-7.1,5.5c-4.8,0-7.5-3.5-7.5-7.5c0-3.9,2.8-7.5,7.5-7.5c3.8,0,6.4,2.3,6.6,5h-3.5c-0.2-1.1-1.4-2.2-3.1-2.2c-2.7,0-4.1,2.3-4.1,4.7c0,2.5,1.4,4.7,4.4,4.7c2,0,3.2-1.2,3.4-2.7h-2.5V378.3z") - Svg.path(this.g, "sim-label", "M461.4,380.9v-9.3h3.3v14.3h-3.5l-5.2-9.2v9.2h-3.3v-14.3h3.5L461.4,380.9z") - Svg.path(this.g, "sim-label", "M472.7,371.6c4.8,0,7.5,3.5,7.5,7.2s-2.7,7.2-7.5,7.2h-5.3v-14.3H472.7z M470.8,374.4v8.6h1.8c2.7,0,4.2-2.1,4.2-4.3s-1.6-4.3-4.2-4.3H470.8z") + svg.path(this.g, "sim-label", "M449.1,135.8h5.9c3.9,0,4.7,2.4,4.7,3.9c0,1.8-1.4,2.9-2.5,3.2c0.9,0,2.6,1.1,2.6,3.3c0,1.5-0.8,4-4.7,4h-6V135.8zM454.4,141.7c1.6,0,2-1,2-1.7c0-0.6-0.3-1.7-2-1.7h-2v3.4H454.4z M452.4,144.1v3.5h2.1c1.6,0,2-1,2-1.8c0-0.7-0.4-1.8-2-1.8H452.4z") + svg.path(this.g, "sim-label", "M352.1,381.1c0,1.6,0.9,2.5,2.2,2.5c1.2,0,1.9-0.9,1.9-1.9c0-1.2-0.6-2-2.1-2h-1.3v-2.6h1.3c1.5,0,1.9-0.7,1.9-1.8c0-1.1-0.7-1.6-1.6-1.6c-1.4,0-1.8,0.8-1.8,2.1h-3.3c0-2.4,1.5-4.6,5.1-4.6c2.6,0,5,1.3,5,4c0,1.6-1,2.8-2.1,3.2c1.3,0.5,2.3,1.6,2.3,3.5c0,2.7-2.4,4.3-5.2,4.3c-3.5,0-5.5-2.1-5.5-5.1H352.1z") + svg.path(this.g, "sim-label", "M368.5,385.9h-3.1l-5.1-14.3h3.5l3.1,10.1l3.1-10.1h3.6L368.5,385.9z") + svg.path(this.g, "sim-label", "M444.4,378.3h7.4v2.5h-1.5c-0.6,3.3-3,5.5-7.1,5.5c-4.8,0-7.5-3.5-7.5-7.5c0-3.9,2.8-7.5,7.5-7.5c3.8,0,6.4,2.3,6.6,5h-3.5c-0.2-1.1-1.4-2.2-3.1-2.2c-2.7,0-4.1,2.3-4.1,4.7c0,2.5,1.4,4.7,4.4,4.7c2,0,3.2-1.2,3.4-2.7h-2.5V378.3z") + svg.path(this.g, "sim-label", "M461.4,380.9v-9.3h3.3v14.3h-3.5l-5.2-9.2v9.2h-3.3v-14.3h3.5L461.4,380.9z") + svg.path(this.g, "sim-label", "M472.7,371.6c4.8,0,7.5,3.5,7.5,7.2s-2.7,7.2-7.5,7.2h-5.3v-14.3H472.7z M470.8,374.4v8.6h1.8c2.7,0,4.2-2.1,4.2-4.3s-1.6-4.3-4.2-4.3H470.8z") } private attachEvents() { @@ -632,14 +632,14 @@ svg.sim.grayscale { this.pins.forEach((pin, index) => { if (!this.board.pins[index]) return; let pt = this.element.createSVGPoint(); - Svg.buttonEvents(pin, + svg.buttonEvents(pin, // move ev => { let state = this.board; let pin = state.pins[index]; let svgpin = this.pins[index]; if (pin.mode & PinMode.Input) { - let cursor = Svg.cursorPoint(pt, this.element, ev); + let cursor = svg.cursorPoint(pt, this.element, ev); let v = (400 - cursor.y) / 40 * 1023 pin.value = Math.max(0, Math.min(1023, Math.floor(v))); } @@ -650,9 +650,9 @@ svg.sim.grayscale { let state = this.board; let pin = state.pins[index]; let svgpin = this.pins[index]; - Svg.addClass(svgpin, "touched"); + svg.addClass(svgpin, "touched"); if (pin.mode & PinMode.Input) { - let cursor = Svg.cursorPoint(pt, this.element, ev); + let cursor = svg.cursorPoint(pt, this.element, ev); let v = (400 - cursor.y) / 40 * 1023 pin.value = Math.max(0, Math.min(1023, Math.floor(v))); } @@ -663,7 +663,7 @@ svg.sim.grayscale { let state = this.board; let pin = state.pins[index]; let svgpin = this.pins[index]; - Svg.removeClass(svgpin, "touched"); + svg.removeClass(svgpin, "touched"); this.updatePin(pin, index); return false; }); @@ -690,17 +690,17 @@ svg.sim.grayscale { btn.addEventListener(pointerEvents.down, ev => { let state = this.board; state.buttons[index].pressed = true; - Svg.fill(this.buttons[index], this.props.theme.buttonDown); + svg.fill(this.buttons[index], this.props.theme.buttonDown); }) btn.addEventListener(pointerEvents.leave, ev => { let state = this.board; state.buttons[index].pressed = false; - Svg.fill(this.buttons[index], this.props.theme.buttonUp); + svg.fill(this.buttons[index], this.props.theme.buttonUp); }) btn.addEventListener(pointerEvents.up, ev => { let state = this.board; state.buttons[index].pressed = false; - Svg.fill(this.buttons[index], this.props.theme.buttonUp); + svg.fill(this.buttons[index], this.props.theme.buttonUp); this.board.bus.queue(state.buttons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK); }) @@ -710,27 +710,27 @@ svg.sim.grayscale { state.buttons[0].pressed = true; state.buttons[1].pressed = true; state.buttons[2].pressed = true; - Svg.fill(this.buttons[0], this.props.theme.buttonDown); - Svg.fill(this.buttons[1], this.props.theme.buttonDown); - Svg.fill(this.buttons[2], this.props.theme.buttonDown); + svg.fill(this.buttons[0], this.props.theme.buttonDown); + svg.fill(this.buttons[1], this.props.theme.buttonDown); + svg.fill(this.buttons[2], this.props.theme.buttonDown); }) this.buttonsOuter[2].addEventListener(pointerEvents.leave, ev => { let state = this.board; state.buttons[0].pressed = false; state.buttons[1].pressed = false; state.buttons[2].pressed = false; - Svg.fill(this.buttons[0], this.props.theme.buttonUp); - Svg.fill(this.buttons[1], this.props.theme.buttonUp); - Svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); + svg.fill(this.buttons[0], this.props.theme.buttonUp); + svg.fill(this.buttons[1], this.props.theme.buttonUp); + svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); }) this.buttonsOuter[2].addEventListener(pointerEvents.up, ev => { let state = this.board; state.buttons[0].pressed = false; state.buttons[1].pressed = false; state.buttons[2].pressed = false; - Svg.fill(this.buttons[0], this.props.theme.buttonUp); - Svg.fill(this.buttons[1], this.props.theme.buttonUp); - Svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); + svg.fill(this.buttons[0], this.props.theme.buttonUp); + svg.fill(this.buttons[1], this.props.theme.buttonUp); + svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); this.board.bus.queue(state.buttons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK); }) From 81b8b1b69c0bb4038fe737bfda55eabeb5ac0c04 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 11:16:14 -0700 Subject: [PATCH 20/56] updated docs --- docs/reference/basic.md | 1 - docs/reference/control.md | 3 +- docs/reference/game.md | 3 +- docs/reference/images.md | 3 +- docs/reference/input.md | 3 +- docs/reference/led.md | 5 +-- docs/reference/music.md | 5 +-- docs/reference/pins.md | 3 +- docs/reference/serial.md | 4 +- libs/microbit/strings.json | 79 ++++++++++++++++++++++++++++++++++++++ 10 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 libs/microbit/strings.json diff --git a/docs/reference/basic.md b/docs/reference/basic.md index 461e1a63..de3627c8 100644 --- a/docs/reference/basic.md +++ b/docs/reference/basic.md @@ -2,7 +2,6 @@ Provides access to basic micro:bit functionality. - ```cards basic.showNumber(0); basic.showLeds(` diff --git a/docs/reference/control.md b/docs/reference/control.md index 652d1224..6fa4752f 100644 --- a/docs/reference/control.md +++ b/docs/reference/control.md @@ -1,7 +1,6 @@ # Control - - +Runtime and event utilities. ```cards control.inBackground(() => { diff --git a/docs/reference/game.md b/docs/reference/game.md index eaf9ddc2..17007641 100644 --- a/docs/reference/game.md +++ b/docs/reference/game.md @@ -1,7 +1,6 @@ # Game - - +A single-LED sprite game engine ```cards game.addScore(1); diff --git a/docs/reference/images.md b/docs/reference/images.md index d6f91ab2..fba69662 100644 --- a/docs/reference/images.md +++ b/docs/reference/images.md @@ -1,7 +1,6 @@ # Images - - +Creation, manipulation and display of LED images. ```cards images.createImage(` diff --git a/docs/reference/input.md b/docs/reference/input.md index 31a6bfd8..bd045b28 100644 --- a/docs/reference/input.md +++ b/docs/reference/input.md @@ -1,7 +1,6 @@ # Input - - +Events and data from sensors ```cards input.onButtonPressed(Button.A, () => { diff --git a/docs/reference/led.md b/docs/reference/led.md index 1cc520e3..15c5c06e 100644 --- a/docs/reference/led.md +++ b/docs/reference/led.md @@ -1,7 +1,6 @@ # Led - - +Control of the LED screen. ```cards led.plot(0, 0); @@ -10,7 +9,7 @@ led.point(0, 0); led.brightness(); led.setBrightness(255); led.stopAnimation(); -led.plotBarGraph(0, 1023); +led.plotBarGraph(0, 0); led.fadeIn(); led.fadeOut(); led.plotAll(); diff --git a/docs/reference/music.md b/docs/reference/music.md index d91ad13b..29d27c1c 100644 --- a/docs/reference/music.md +++ b/docs/reference/music.md @@ -1,14 +1,13 @@ # Music - - +Generation of music tones through pin ``P0``. ```cards music.playTone(0, 0); music.ringTone(0); music.rest(0); music.noteFrequency(Note.C); -music.beat(); +music.beat(BeatFraction.Whole); music.tempo(); music.changeTempoBy(20); music.setTempo(120); diff --git a/docs/reference/pins.md b/docs/reference/pins.md index fd9ee0ab..7f7f2c36 100644 --- a/docs/reference/pins.md +++ b/docs/reference/pins.md @@ -1,7 +1,6 @@ # Pins - - +Control currents in Pins for analog/digital signals, servos, i2c, ... ```cards pins.digitalReadPin(DigitalPin.P0); diff --git a/docs/reference/serial.md b/docs/reference/serial.md index 24c47b69..e4a373d0 100644 --- a/docs/reference/serial.md +++ b/docs/reference/serial.md @@ -1,8 +1,8 @@ # Serial -[Serial communication](/device/serial) between the BBC micro:bit and another computer. +Reading and writing data over a serial connection. ```cards +serial.writeValue(x, 0); serial.writeLine(""); -serial.writeValue("x", 0); ``` diff --git a/libs/microbit/strings.json b/libs/microbit/strings.json new file mode 100644 index 00000000..44753cd8 --- /dev/null +++ b/libs/microbit/strings.json @@ -0,0 +1,79 @@ +{ + "A single-LED sprite game engine": "A single-LED sprite game engine", + "Adds points to the current score": "Adds points to the current score", + "Attaches code to run when the device is shaken.": "Attaches code to run when the device is shaken.", + "Attaches code to run when the logo is oriented downwards and the board is vertical.": "Attaches code to run when the logo is oriented downwards and the board is vertical.", + "Attaches code to run when the logo is oriented upwards and the board is vertical.": "Attaches code to run when the logo is oriented upwards and the board is vertical.", + "Attaches code to run when the screen is facing down.": "Attaches code to run when the screen is facing down.", + "Attaches code to run when the screen is facing up.": "Attaches code to run when the screen is facing up.", + "Cancels the current animation and clears other pending animations.": "Cancels the current animation and clears other pending animations.", + "Change the tempo by the specified amount": "Change the tempo by the specified amount", + "Configures the Pulse-width modulation (PWM) of the analog output to the given value in **microseconds** or `1/1000` milliseconds.\nIf this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.": "Configures the Pulse-width modulation (PWM) of the analog output to the given value in **microseconds** or `1/1000` milliseconds.\nIf this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.", + "Configures this IO pin as an analog/pwm output, configures the period to be 20 ms, and sets the pulse width, based on the value it is given **microseconds** or `1/1000` milliseconds.": "Configures this IO pin as an analog/pwm output, configures the period to be 20 ms, and sets the pulse width, based on the value it is given **microseconds** or `1/1000` milliseconds.", + "Control currents in Pins for analog/digital signals, servos, i2c, ...": "Control currents in Pins for analog/digital signals, servos, i2c, ...", + "Control of the LED screen.": "Control of the LED screen.", + "Creates an image that fits on the LED screen.": "Creates an image that fits on the LED screen.", + "Creates an image with 2 frames.": "Creates an image with 2 frames.", + "Creation, manipulation and display of LED images.": "Creation, manipulation and display of LED images.", + "Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll.": "Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll.", + "Displays a game over animation.": "Displays a game over animation.", + "Displays a vertical bar graph based on the `value` and `high` value.\nIf `high` is 0, the chart gets adjusted automatically.": "Displays a vertical bar graph based on the `value` and `high` value.\nIf `high` is 0, the chart gets adjusted automatically.", + "Do something when a button (``A``, ``B`` or both ``A+B``) is pressed": "Do something when a button (``A``, ``B`` or both ``A+B``) is pressed", + "Do something when a pin(``P0``, ``P1`` or both ``P2``) is pressed.": "Do something when a pin(``P0``, ``P1`` or both ``P2``) is pressed.", + "Draws an image on the LED screen.": "Draws an image on the LED screen.", + "Emits a Pulse-width modulation (PWM) signal to the current pitch pin. Use `analog set pitch pin` to define the pitch pin.": "Emits a Pulse-width modulation (PWM) signal to the current pitch pin. Use `analog set pitch pin` to define the pitch pin.", + "Events and data from sensors": "Events and data from sensors", + "Fades in the screen display.": "Fades in the screen display.", + "Fades out the screen brightness.": "Fades out the screen brightness.", + "Generation of music tones through pin ``P0``.": "Generation of music tones through pin ``P0``.", + "Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)": "Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)", + "Get the button state (pressed or not) for ``A`` and ``B``.": "Get the button state (pressed or not) for ``A`` and ``B``.", + "Get the current compass compass heading in degrees.": "Get the current compass compass heading in degrees.", + "Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator.": "Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator.", + "Get the on/off state of the specified LED using x, y coordinates. (0,0) is upper left.": "Get the on/off state of the specified LED using x, y coordinates. (0,0) is upper left.", + "Get the pin state (pressed or not). Requires to hold the ground to close the circuit.": "Get the pin state (pressed or not). Requires to hold the ground to close the circuit.", + "Get the screen brightness from 0 (off) to 255 (full bright).": "Get the screen brightness from 0 (off) to 255 (full bright).", + "Gets the current score": "Gets the current score", + "Gets the frequency of a note.": "Gets the frequency of a note.", + "Gets the number of milliseconds elapsed since power on.": "Gets the number of milliseconds elapsed since power on.", + "Gets the temperature in Celsius degrees (°C).": "Gets the temperature in Celsius degrees (°C).", + "Inverts the current LED display": "Inverts the current LED display", + "Obsolete, compass calibration is automatic.": "Obsolete, compass calibration is automatic.", + "Pause for the specified time in milliseconds": "Pause for the specified time in milliseconds", + "Plays a tone through pin ``P0`` for the given duration.": "Plays a tone through pin ``P0`` for the given duration.", + "Plays a tone through pin ``P0``.": "Plays a tone through pin ``P0``.", + "Prints a line of text to the serial": "Prints a line of text to the serial", + "Provides access to basic micro:bit functionality.": "Provides access to basic micro:bit functionality.", + "Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc.": "Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc.", + "Read the connector value as analog, that is, as a value comprised between 0 and 1023.": "Read the connector value as analog, that is, as a value comprised between 0 and 1023.", + "Read the specified pin or connector as either 0 or 1": "Read the specified pin or connector as either 0 or 1", + "Reading and writing data over a serial connection.": "Reading and writing data over a serial connection.", + "Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.": "Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.", + "Repeats the code forever in the background. On each iteration, allows other codes to run.": "Repeats the code forever in the background. On each iteration, allows other codes to run.", + "Resets the BBC micro:bit.": "Resets the BBC micro:bit.", + "Rests (plays nothing) for a specified time through pin ``P0``.": "Rests (plays nothing) for a specified time through pin ``P0``.", + "Returns the duration of a beat in milli-seconds": "Returns the duration of a beat in milli-seconds", + "Returns the tempo in beats per minute. Tempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play.": "Returns the tempo in beats per minute. Tempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play.", + "Runtime and event utilities.": "Runtime and event utilities.", + "Schedules code that run in the background.": "Schedules code that run in the background.", + "Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.": "Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.", + "Set a pin or connector value to either 0 or 1.": "Set a pin or connector value to either 0 or 1.", + "Set the connector value as analog. Value must be comprised between 0 and 1023.": "Set the connector value as analog. Value must be comprised between 0 and 1023.", + "Set the screen brightness from 0 (off) to 255 (full bright).": "Set the screen brightness from 0 (off) to 255 (full bright).", + "Sets the accelerometer sample range in gravities.": "Sets the accelerometer sample range in gravities.", + "Sets the current score value": "Sets the current score value", + "Sets the display mode between black and white and greyscale for rendering LEDs.": "Sets the display mode between black and white and greyscale for rendering LEDs.", + "Sets the pin used when using `pins->analog pitch`.": "Sets the pin used when using `pins->analog pitch`.", + "Sets the tempo to the specified amount": "Sets the tempo to the specified amount", + "Shows a sequence of LED screens as an animation.": "Shows a sequence of LED screens as an animation.", + "Starts a game countdown timer": "Starts a game countdown timer", + "Takes a screenshot of the LED screen and returns an image.": "Takes a screenshot of the LED screen and returns an image.", + "The pitch of the device, rotation along the ``x-axis``, in degrees.": "The pitch of the device, rotation along the ``x-axis``, in degrees.", + "Toggles a particular pixel": "Toggles a particular pixel", + "Turn off all LEDs": "Turn off all LEDs", + "Turn off the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.": "Turn off the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", + "Turn on the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.": "Turn on the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", + "Turns all LEDS on": "Turns all LEDS on", + "Writes a ``name: value`` pair line to the serial.": "Writes a ``name: value`` pair line to the serial.", + "Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).": "Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement)." +} \ No newline at end of file From d905f24f9c0ce14eaef908786931807c8773f84e Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 11:32:35 -0700 Subject: [PATCH 21/56] updated generated strings.json --- docs/reference.md | 28 +++++++++++++++-------- libs/microbit/{ => _locales}/strings.json | 0 2 files changed, 19 insertions(+), 9 deletions(-) rename libs/microbit/{ => _locales}/strings.json (100%) diff --git a/docs/reference.md b/docs/reference.md index 01e17443..efaaecb4 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -1,17 +1,27 @@ # Reference ```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(2,2); +basic.showNumber(0); +input.onButtonPressed(Button.A, () => { + +}); +led.plot(0, 0); +music.playTone(0, 0); +game.addScore(1); +images.createImage(` +. . . . . +. . . . . +. . # . . +. . . . . +. . . . . +`); pins.digitalReadPin(DigitalPin.P0); -serial.writeLine("Hello!"); -control.inBackground(() => {}); -``` +serial.writeValue(x, 0); +control.inBackground(() => { + +}); + diff --git a/libs/microbit/strings.json b/libs/microbit/_locales/strings.json similarity index 100% rename from libs/microbit/strings.json rename to libs/microbit/_locales/strings.json From f854dfd9c82ac4a4de19dad8b7044f95b5fe9644 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 12:32:40 -0700 Subject: [PATCH 22/56] updated generated docs --- docs/microbit-reference.md | 23 +++++++++++++++++++ docs/reference/radio.md | 3 +-- .../{strings.json => microbit-strings.json} | 0 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 docs/microbit-reference.md rename libs/microbit/_locales/{strings.json => microbit-strings.json} (100%) diff --git a/docs/microbit-reference.md b/docs/microbit-reference.md new file mode 100644 index 00000000..9d95b935 --- /dev/null +++ b/docs/microbit-reference.md @@ -0,0 +1,23 @@ +# microbit Reference + +```namespaces +basic.showNumber(0); +input.onButtonPressed(Button.A, () => { + +}); +led.plot(0, 0); +music.playTone(0, 0); +game.addScore(1); +images.createImage(` +. . . . . +. . . . . +. . # . . +. . . . . +. . . . . +`); +pins.digitalReadPin(DigitalPin.P0); +serial.writeValue(x, 0); +control.inBackground(() => { + +}); +``` \ No newline at end of file diff --git a/docs/reference/radio.md b/docs/reference/radio.md index 1212f72f..27773d86 100644 --- a/docs/reference/radio.md +++ b/docs/reference/radio.md @@ -1,7 +1,6 @@ # Radio - - +Communicate data using radio packets ```cards radio.sendNumber(0); diff --git a/libs/microbit/_locales/strings.json b/libs/microbit/_locales/microbit-strings.json similarity index 100% rename from libs/microbit/_locales/strings.json rename to libs/microbit/_locales/microbit-strings.json From d4ad150cbae074d9337661de20766773c71fd0e5 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 12:48:59 -0700 Subject: [PATCH 23/56] Bump pxt-core to 0.2.114 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 0ede371e..cbd9fc0b 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.100", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.112" - } + "name": "pxt-microbit", + "version": "0.2.100", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.114" + } } From 17e33cc34f9f3dda3c3530513f034c448695586c Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 12:50:26 -0700 Subject: [PATCH 24/56] updated white space --- docs/microbit-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/microbit-reference.md b/docs/microbit-reference.md index 9d95b935..2feeb623 100644 --- a/docs/microbit-reference.md +++ b/docs/microbit-reference.md @@ -20,4 +20,4 @@ serial.writeValue(x, 0); control.inBackground(() => { }); -``` \ No newline at end of file +``` From 62e4b04931fb273a5bc18a1b6766834abd30d728 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Thu, 5 May 2016 12:50:36 -0700 Subject: [PATCH 25/56] 0.2.101 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index cbd9fc0b..9d48d45c 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.100", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.114" - } + "name": "pxt-microbit", + "version": "0.2.101", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.114" + } } From 70b2827cf02eebff0b8d5ad17a51d9cc528cf84a Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 6 May 2016 09:28:26 -0700 Subject: [PATCH 26/56] fixing various lessons menu --- docs/lessons.md | 9 ++++----- docs/lessons/answering-machine/challenges.md | 6 ++---- docs/lessons/answering-machine/quiz-answers.md | 3 --- docs/lessons/classic-beatbox/challenges.md | 4 ++-- docs/lessons/game-of-chance/challenges.md | 2 +- docs/lessons/glowing-pendulum/challenges.md | 4 ++-- docs/lessons/magic-8/challenges.md | 6 +++--- docs/lessons/night-light/challenges.md | 2 +- docs/lessons/offset-image/activity.md | 2 +- docs/lessons/prank-wifi/activity.md | 6 +++--- docs/lessons/screen-wipe/challenges.md | 6 +++--- 11 files changed, 22 insertions(+), 28 deletions(-) diff --git a/docs/lessons.md b/docs/lessons.md index cee6fa59..f59dbb51 100644 --- a/docs/lessons.md +++ b/docs/lessons.md @@ -5,9 +5,6 @@ ### ~column -## O365 Integration -* [Science Experiments: Chart](/lessons/charting), create an app for simulating and measuring sensor data of acceleration, temperature, light level, and rotation - ## Beginner * [Beautiful Image](/lessons/beautiful-image), show a beautiful image with show LEDs @@ -60,6 +57,9 @@ * [Telegraph](/lessons/telegraph), play the telegraph game between two BBC micro:bits * [Pogo](/lessons/pogo), create a pogo game to test your jumping abilities +## Science +* [Charting](/lessons/charting), measure and chart acceleration + ## Advanced * [Prank WiFi](/lessons/prank-wifi), create fake WiFi to trick your friends * [Speed Button](/lessons/speed-button), code a speed game with running time @@ -70,5 +70,4 @@ ### @section full -The lessons promote computational thinking and computer science literacy[ read more...](/lessons/teach) - +The lessons promote computational thinking and computer science literacy[ read more...](/lessons/teach) \ No newline at end of file diff --git a/docs/lessons/answering-machine/challenges.md b/docs/lessons/answering-machine/challenges.md index 0c047f8d..5116e590 100644 --- a/docs/lessons/answering-machine/challenges.md +++ b/docs/lessons/answering-machine/challenges.md @@ -21,7 +21,6 @@ basic.showString("ASK ME A QUESTION") input.onButtonPressed(Button.A, () => { basic.showString("Yes") }) - ``` * `Run` the code to see if it works as expected. @@ -45,7 +44,6 @@ input.onButtonPressed(Button.B, () => { * `Run` the code to see if it works as expected. -**Challenge 3** - -When you are asked a yes or no question, do you always say yes or no? Add a condition for `on shake` that displays `MAYBE`. +### Challenge 3 +When you are asked a yes or no question, do you always say yes or no? Add a condition for `on shake` that displays `MAYBE`. \ No newline at end of file diff --git a/docs/lessons/answering-machine/quiz-answers.md b/docs/lessons/answering-machine/quiz-answers.md index f37f04ae..eb89f62f 100644 --- a/docs/lessons/answering-machine/quiz-answers.md +++ b/docs/lessons/answering-machine/quiz-answers.md @@ -12,7 +12,6 @@ Answers may vary. This is a function that will show a string on the LED screen o ```blocks basic.showString("Y") - ``` ![](/static/mb/lessons/answering-machine-0.png) @@ -22,7 +21,6 @@ basic.showString("Y") ```blocks basic.showString("Hi") - ``` ![](/static/mb/lessons/answering-machine-1.png) @@ -35,7 +33,6 @@ basic.showString("Hi") ```blocks basic.showString("Z") - ``` diff --git a/docs/lessons/classic-beatbox/challenges.md b/docs/lessons/classic-beatbox/challenges.md index 97d7d8eb..03d081a2 100644 --- a/docs/lessons/classic-beatbox/challenges.md +++ b/docs/lessons/classic-beatbox/challenges.md @@ -17,7 +17,7 @@ input.onPinPressed(TouchPin.P1, () => { }) ``` -**Challenge 1** +### Challenge 1 Let's include a second sound `on pin pressed` *P2*. To do this, you need to add the same blocks as the banana keyboard activity. However, you must change alter `on pin pressed` from P1 to P2. Additionally, you must *decrease* the frequency of the variable "sound" by 25. Modify your code so that your code looks like this @@ -42,7 +42,7 @@ input.onPinPressed(TouchPin.P2, () => { * click *run* to see if the code works as expected. -**Challenge 2** +### Challenge 2 Finally, we want images to be displayed with sounds `on pin pressed`. Add `show LEDs` blocks under `on pin pressed` P1 and P2. diff --git a/docs/lessons/game-of-chance/challenges.md b/docs/lessons/game-of-chance/challenges.md index d0d39033..891301e1 100644 --- a/docs/lessons/game-of-chance/challenges.md +++ b/docs/lessons/game-of-chance/challenges.md @@ -42,7 +42,7 @@ input.onButtonPressed(Button.B, () => { * `Run` the code to see if it works as expected. -**Challenge 3** +### Challenge 3 When you are asked a yes or no question, do you always say yes or no? Add a condition for `on shake` that displays `TRY AGAIN`. diff --git a/docs/lessons/glowing-pendulum/challenges.md b/docs/lessons/glowing-pendulum/challenges.md index 5784a661..420e36cb 100644 --- a/docs/lessons/glowing-pendulum/challenges.md +++ b/docs/lessons/glowing-pendulum/challenges.md @@ -24,13 +24,13 @@ basic.forever(() => { ``` -**Challenge 1** +### Challenge 1 ![](/static/mb/lessons/glowing-pendulum-0.jpg) Hold the micro:bit in your hand in a dark room. Move the micro:bit like a pendulum and produce a slow image that captures the pattern of the micro:bit LEDs. -**Challenge 2** +### Challenge 2 Replace "y" in `acceleration(y)` with "x" or "z". Changing the axis will cause the micro:bit to measure the force in a different direction. What differences in the resulting pattern does this replacement make? diff --git a/docs/lessons/magic-8/challenges.md b/docs/lessons/magic-8/challenges.md index be4d71a2..859e8efb 100644 --- a/docs/lessons/magic-8/challenges.md +++ b/docs/lessons/magic-8/challenges.md @@ -26,7 +26,7 @@ input.onGesture(Gesture.Shake, () => { ``` -**Challenge 1** +### Challenge 1 Now let's increase the number of responses the magic 8 ball can give. How about 5 responses instead? Let's change the limit of `pick random` to 4. @@ -49,7 +49,7 @@ input.onGesture(Gesture.Shake, () => { }) ``` -**Challenge 2** +### Challenge 2 Now have the magic 8 ball respond "Try again" if **randomNumber** is 3. @@ -73,7 +73,7 @@ input.onGesture(Gesture.Shake, () => { }) ``` -**Challenge 3** +### Challenge 3 Now what about if **randomNumber** is 4? Let's have the magic 8 ball respond "Definitely!". diff --git a/docs/lessons/night-light/challenges.md b/docs/lessons/night-light/challenges.md index 81917863..3187a914 100644 --- a/docs/lessons/night-light/challenges.md +++ b/docs/lessons/night-light/challenges.md @@ -46,7 +46,7 @@ input.onButtonPressed(Button.B, () => { ``` -**Challenge 3** +### Challenge 3 Add an event handler with `on shake` to change the LED brightness back to a `255`. diff --git a/docs/lessons/offset-image/activity.md b/docs/lessons/offset-image/activity.md index f2ce36f7..32a04179 100644 --- a/docs/lessons/offset-image/activity.md +++ b/docs/lessons/offset-image/activity.md @@ -88,7 +88,7 @@ input.onButtonPressed(Button.B, () => { * Run the code to see if it works as expected. -**Challenge 3** +### Challenge 3 Now make sure the image does not go off the left side and if it does, prompt the user to push button `A`. diff --git a/docs/lessons/prank-wifi/activity.md b/docs/lessons/prank-wifi/activity.md index 6a5447ab..001a896d 100644 --- a/docs/lessons/prank-wifi/activity.md +++ b/docs/lessons/prank-wifi/activity.md @@ -42,7 +42,7 @@ basic.forever(() => { ``` -**Challenge 1** +### Challenge 1 What if wanted to show the maximum connectivity of wifi instead of just 1, 3, or 4 bars? @@ -86,7 +86,7 @@ basic.forever(() => { }) ``` -**Challenge 2** +### Challenge 2 Let's add an **IF** at the bottom of your code that checks to see if `sum >= to 1200` **and** if `sum <1400` @@ -135,7 +135,7 @@ basic.forever(() => { }) ``` -**Challenge 3** +### Challenge 3 Now it's your turn! Be creative and change the Wifi meter images to your own wifi image you're sure will prank your friends by editing the lines that call `showLeds()`. diff --git a/docs/lessons/screen-wipe/challenges.md b/docs/lessons/screen-wipe/challenges.md index 7e5252a7..80a4f291 100644 --- a/docs/lessons/screen-wipe/challenges.md +++ b/docs/lessons/screen-wipe/challenges.md @@ -41,7 +41,7 @@ input.onButtonPressed(Button.A, () => { ``` -**Challenge 1** +### Challenge 1 Create an event handler for Button B. @@ -83,7 +83,7 @@ input.onButtonPressed(Button.B, () => { ``` -**Challenge 2** +### Challenge 2 ### @video td/videos/screen-wipe-2 @@ -155,7 +155,7 @@ basic.showLeds(` ``` -**Challenge 3** +### Challenge 3 Show an animation that scrolls back up when you press button "B". From 4d056e0c235d239443b1d35383a722e743539e38 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 6 May 2016 09:32:29 -0700 Subject: [PATCH 27/56] lessons updates --- docs/lessons/beautiful-image/challenges.md | 4 ++-- docs/lessons/lucky-7/challenges.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/lessons/beautiful-image/challenges.md b/docs/lessons/beautiful-image/challenges.md index e96a4736..802c8c76 100644 --- a/docs/lessons/beautiful-image/challenges.md +++ b/docs/lessons/beautiful-image/challenges.md @@ -39,9 +39,9 @@ basic.showLeds(` `) ``` -* *Run* your code to see if it works as expected. +* Does your code work as expected? ### Challenge 2 -Nice job! Why don't we create a third image that will show after the other two? Remember to add a pause before you create and show the image. +Nice job! Why don't we create a third image that will show after the other two? diff --git a/docs/lessons/lucky-7/challenges.md b/docs/lessons/lucky-7/challenges.md index ec3e0eb2..2393c025 100644 --- a/docs/lessons/lucky-7/challenges.md +++ b/docs/lessons/lucky-7/challenges.md @@ -35,5 +35,5 @@ basic.showNumber(14) ### Challenge 3 -Keep displaying multiples of 7 such as 21 and 28, but don't forget to add pauses between the numbers! +Keep displaying multiples of 7 such as 21 and 28... From ce16e6466059c518ca5f4030b291def4694a39e3 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 6 May 2016 11:31:25 -0700 Subject: [PATCH 28/56] added shuffled lessons --- docs/lessons/truth-or-dare.md | 1 + docs/lessons/truth-or-dare/tutorial.md | 63 ++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 docs/lessons/truth-or-dare/tutorial.md diff --git a/docs/lessons/truth-or-dare.md b/docs/lessons/truth-or-dare.md index 7dc14512..88f728ea 100644 --- a/docs/lessons/truth-or-dare.md +++ b/docs/lessons/truth-or-dare.md @@ -11,6 +11,7 @@ If (Conditionals) ## Quick Links * [activity](/lessons/truth-or-dare/activity) +* [tutorial](/lessons/truth-or-dare/tutorial) * [challenges](/lessons/truth-or-dare/challenges) * [quiz](/lessons/truth-or-dare/quiz) * [quiz answers](/lessons/truth-or-dare/quiz-answers) diff --git a/docs/lessons/truth-or-dare/tutorial.md b/docs/lessons/truth-or-dare/tutorial.md new file mode 100644 index 00000000..ad2d993f --- /dev/null +++ b/docs/lessons/truth-or-dare/tutorial.md @@ -0,0 +1,63 @@ +# truth or dare tutorial + +### ~avatar avatar + +### @video td/videos/truth-or-dare-0 + +The *Truth or dare!* game works as follows: a player spins the BBC micro:bit on the table. +When the micro:bit stops spinning, the player pointed by the arrow (displayed on screen) must press the button "A" +to see if she has to provide a *truth* or a *dare*. + +### ~ + +### Rebuild the game! + +The blocks have been shuffled! Put them back together so that... +* an up arrow is displayed when the micro:bit is powered on. +* on button `A` is pressed, + * randomly display "TRUTH" or "DARE" on the screen + * show the up arrow again. + +```shuffle +basic.showLeds(` + . . # . . + . # # # . + # # # # # + . . # . . + . . # . . + `) +input.onButtonPressed(Button.A, () => { + let random = Math.random(2) + if (random == 0) { + basic.showString("TRUTH") + } else { + basic.showString("DARE") + } + basic.showLeds(` + . . # . . + . # # # . + # # # # # + . . # . . + . . # . . + `) +}) +``` +### Hints and tips +Cut out these documentation cards to help you! + +```cards +basic.showLeds(` + . . # . . + . # # # . + # . # . # + . . # . . + . . # . . + `); +Math.random(2); +basic.showString("TRUTH"); +if (true) {} else {} +"TRUTH"; +0; +input.onButtonPressed(Button.A, () => {}); +``` + From 98484092838f71218597b6294080e209b5ae4066 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 6 May 2016 11:31:53 -0700 Subject: [PATCH 29/56] Bump pxt-core to 0.2.117 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 9d48d45c..81b71cf7 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.101", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.114" - } + "name": "pxt-microbit", + "version": "0.2.101", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.117" + } } From b9f66c5c6b1038f64313d2be70b780bedbf7b196 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 6 May 2016 11:31:55 -0700 Subject: [PATCH 30/56] 0.2.102 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 81b71cf7..d0404814 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.101", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.117" - } + "name": "pxt-microbit", + "version": "0.2.102", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.117" + } } From b33d0ba47034fe024495fa4aae5fe0b542004930 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Fri, 6 May 2016 14:17:39 -0700 Subject: [PATCH 31/56] updated strings --- libs/microbit/_locales/microbit-strings.json | 156 ++++++++++--------- 1 file changed, 79 insertions(+), 77 deletions(-) diff --git a/libs/microbit/_locales/microbit-strings.json b/libs/microbit/_locales/microbit-strings.json index 44753cd8..3851926c 100644 --- a/libs/microbit/_locales/microbit-strings.json +++ b/libs/microbit/_locales/microbit-strings.json @@ -1,79 +1,81 @@ { - "A single-LED sprite game engine": "A single-LED sprite game engine", - "Adds points to the current score": "Adds points to the current score", - "Attaches code to run when the device is shaken.": "Attaches code to run when the device is shaken.", - "Attaches code to run when the logo is oriented downwards and the board is vertical.": "Attaches code to run when the logo is oriented downwards and the board is vertical.", - "Attaches code to run when the logo is oriented upwards and the board is vertical.": "Attaches code to run when the logo is oriented upwards and the board is vertical.", - "Attaches code to run when the screen is facing down.": "Attaches code to run when the screen is facing down.", - "Attaches code to run when the screen is facing up.": "Attaches code to run when the screen is facing up.", - "Cancels the current animation and clears other pending animations.": "Cancels the current animation and clears other pending animations.", - "Change the tempo by the specified amount": "Change the tempo by the specified amount", - "Configures the Pulse-width modulation (PWM) of the analog output to the given value in **microseconds** or `1/1000` milliseconds.\nIf this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.": "Configures the Pulse-width modulation (PWM) of the analog output to the given value in **microseconds** or `1/1000` milliseconds.\nIf this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.", - "Configures this IO pin as an analog/pwm output, configures the period to be 20 ms, and sets the pulse width, based on the value it is given **microseconds** or `1/1000` milliseconds.": "Configures this IO pin as an analog/pwm output, configures the period to be 20 ms, and sets the pulse width, based on the value it is given **microseconds** or `1/1000` milliseconds.", - "Control currents in Pins for analog/digital signals, servos, i2c, ...": "Control currents in Pins for analog/digital signals, servos, i2c, ...", - "Control of the LED screen.": "Control of the LED screen.", - "Creates an image that fits on the LED screen.": "Creates an image that fits on the LED screen.", - "Creates an image with 2 frames.": "Creates an image with 2 frames.", - "Creation, manipulation and display of LED images.": "Creation, manipulation and display of LED images.", - "Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll.": "Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll.", - "Displays a game over animation.": "Displays a game over animation.", - "Displays a vertical bar graph based on the `value` and `high` value.\nIf `high` is 0, the chart gets adjusted automatically.": "Displays a vertical bar graph based on the `value` and `high` value.\nIf `high` is 0, the chart gets adjusted automatically.", - "Do something when a button (``A``, ``B`` or both ``A+B``) is pressed": "Do something when a button (``A``, ``B`` or both ``A+B``) is pressed", - "Do something when a pin(``P0``, ``P1`` or both ``P2``) is pressed.": "Do something when a pin(``P0``, ``P1`` or both ``P2``) is pressed.", - "Draws an image on the LED screen.": "Draws an image on the LED screen.", - "Emits a Pulse-width modulation (PWM) signal to the current pitch pin. Use `analog set pitch pin` to define the pitch pin.": "Emits a Pulse-width modulation (PWM) signal to the current pitch pin. Use `analog set pitch pin` to define the pitch pin.", - "Events and data from sensors": "Events and data from sensors", - "Fades in the screen display.": "Fades in the screen display.", - "Fades out the screen brightness.": "Fades out the screen brightness.", - "Generation of music tones through pin ``P0``.": "Generation of music tones through pin ``P0``.", - "Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)": "Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)", - "Get the button state (pressed or not) for ``A`` and ``B``.": "Get the button state (pressed or not) for ``A`` and ``B``.", - "Get the current compass compass heading in degrees.": "Get the current compass compass heading in degrees.", - "Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator.": "Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator.", - "Get the on/off state of the specified LED using x, y coordinates. (0,0) is upper left.": "Get the on/off state of the specified LED using x, y coordinates. (0,0) is upper left.", - "Get the pin state (pressed or not). Requires to hold the ground to close the circuit.": "Get the pin state (pressed or not). Requires to hold the ground to close the circuit.", - "Get the screen brightness from 0 (off) to 255 (full bright).": "Get the screen brightness from 0 (off) to 255 (full bright).", - "Gets the current score": "Gets the current score", - "Gets the frequency of a note.": "Gets the frequency of a note.", - "Gets the number of milliseconds elapsed since power on.": "Gets the number of milliseconds elapsed since power on.", - "Gets the temperature in Celsius degrees (°C).": "Gets the temperature in Celsius degrees (°C).", - "Inverts the current LED display": "Inverts the current LED display", - "Obsolete, compass calibration is automatic.": "Obsolete, compass calibration is automatic.", - "Pause for the specified time in milliseconds": "Pause for the specified time in milliseconds", - "Plays a tone through pin ``P0`` for the given duration.": "Plays a tone through pin ``P0`` for the given duration.", - "Plays a tone through pin ``P0``.": "Plays a tone through pin ``P0``.", - "Prints a line of text to the serial": "Prints a line of text to the serial", - "Provides access to basic micro:bit functionality.": "Provides access to basic micro:bit functionality.", - "Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc.": "Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc.", - "Read the connector value as analog, that is, as a value comprised between 0 and 1023.": "Read the connector value as analog, that is, as a value comprised between 0 and 1023.", - "Read the specified pin or connector as either 0 or 1": "Read the specified pin or connector as either 0 or 1", - "Reading and writing data over a serial connection.": "Reading and writing data over a serial connection.", - "Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.": "Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.", - "Repeats the code forever in the background. On each iteration, allows other codes to run.": "Repeats the code forever in the background. On each iteration, allows other codes to run.", - "Resets the BBC micro:bit.": "Resets the BBC micro:bit.", - "Rests (plays nothing) for a specified time through pin ``P0``.": "Rests (plays nothing) for a specified time through pin ``P0``.", - "Returns the duration of a beat in milli-seconds": "Returns the duration of a beat in milli-seconds", - "Returns the tempo in beats per minute. Tempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play.": "Returns the tempo in beats per minute. Tempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play.", - "Runtime and event utilities.": "Runtime and event utilities.", - "Schedules code that run in the background.": "Schedules code that run in the background.", - "Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.": "Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.", - "Set a pin or connector value to either 0 or 1.": "Set a pin or connector value to either 0 or 1.", - "Set the connector value as analog. Value must be comprised between 0 and 1023.": "Set the connector value as analog. Value must be comprised between 0 and 1023.", - "Set the screen brightness from 0 (off) to 255 (full bright).": "Set the screen brightness from 0 (off) to 255 (full bright).", - "Sets the accelerometer sample range in gravities.": "Sets the accelerometer sample range in gravities.", - "Sets the current score value": "Sets the current score value", - "Sets the display mode between black and white and greyscale for rendering LEDs.": "Sets the display mode between black and white and greyscale for rendering LEDs.", - "Sets the pin used when using `pins->analog pitch`.": "Sets the pin used when using `pins->analog pitch`.", - "Sets the tempo to the specified amount": "Sets the tempo to the specified amount", - "Shows a sequence of LED screens as an animation.": "Shows a sequence of LED screens as an animation.", - "Starts a game countdown timer": "Starts a game countdown timer", - "Takes a screenshot of the LED screen and returns an image.": "Takes a screenshot of the LED screen and returns an image.", - "The pitch of the device, rotation along the ``x-axis``, in degrees.": "The pitch of the device, rotation along the ``x-axis``, in degrees.", - "Toggles a particular pixel": "Toggles a particular pixel", - "Turn off all LEDs": "Turn off all LEDs", - "Turn off the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.": "Turn off the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", - "Turn on the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.": "Turn on the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", - "Turns all LEDS on": "Turns all LEDS on", - "Writes a ``name: value`` pair line to the serial.": "Writes a ``name: value`` pair line to the serial.", - "Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).": "Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement)." + "basic": "Provides access to basic micro:bit functionality.", + "basic.clearScreen": "Turn off all LEDs", + "basic.forever": "Repeats the code forever in the background. On each iteration, allows other codes to run.", + "basic.pause": "Pause for the specified time in milliseconds", + "basic.plotLeds": "Draws an image on the LED screen.", + "basic.showAnimation": "Shows a sequence of LED screens as an animation.", + "basic.showLeds": "Draws an image on the LED screen.", + "basic.showNumber": "Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.", + "basic.showString": "Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll.", + "control": "Runtime and event utilities.", + "control.inBackground": "Schedules code that run in the background.", + "control.reset": "Resets the BBC micro:bit.", + "game": "A single-LED sprite game engine", + "game.addScore": "Adds points to the current score", + "game.gameOver": "Displays a game over animation.", + "game.score": "Gets the current score", + "game.setScore": "Sets the current score value", + "game.startCountdown": "Starts a game countdown timer", + "images": "Creation, manipulation and display of LED images.", + "images.createBigImage": "Creates an image with 2 frames.", + "images.createImage": "Creates an image that fits on the LED screen.", + "input": "Events and data from sensors", + "input.acceleration": "Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)", + "input.buttonIsPressed": "Get the button state (pressed or not) for ``A`` and ``B``.", + "input.calibrate": "Obsolete, compass calibration is automatic.", + "input.compassHeading": "Get the current compass compass heading in degrees.", + "input.lightLevel": "Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.", + "input.magneticForce": "Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator.", + "input.onButtonPressed": "Do something when a button (``A``, ``B`` or both ``A+B``) is pressed", + "input.onGesture": "Attaches code to run when the screen is facing up.", + "input.onLogoDown": "Attaches code to run when the logo is oriented downwards and the board is vertical.", + "input.onLogoUp": "Attaches code to run when the logo is oriented upwards and the board is vertical.", + "input.onPinPressed": "Do something when a pin(``P0``, ``P1`` or both ``P2``) is pressed.", + "input.onScreenDown": "Attaches code to run when the screen is facing down.", + "input.onScreenUp": "Attaches code to run when the screen is facing up.", + "input.onShake": "Attaches code to run when the device is shaken.", + "input.pinIsPressed": "Get the pin state (pressed or not). Requires to hold the ground to close the circuit.", + "input.rotation": "The pitch of the device, rotation along the ``x-axis``, in degrees.", + "input.runningTime": "Gets the number of milliseconds elapsed since power on.", + "input.setAccelerometerRange": "Sets the accelerometer sample range in gravities.", + "input.temperature": "Gets the temperature in Celsius degrees (°C).", + "led": "Control of the LED screen.", + "led.brightness": "Get the screen brightness from 0 (off) to 255 (full bright).", + "led.fadeIn": "Fades in the screen display.", + "led.fadeOut": "Fades out the screen brightness.", + "led.plot": "Turn on the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", + "led.plotAll": "Turns all LEDS on", + "led.plotBarGraph": "Displays a vertical bar graph based on the `value` and `high` value.\nIf `high` is 0, the chart gets adjusted automatically.", + "led.point": "Get the on/off state of the specified LED using x, y coordinates. (0,0) is upper left.", + "led.screenshot": "Takes a screenshot of the LED screen and returns an image.", + "led.setBrightness": "Set the screen brightness from 0 (off) to 255 (full bright).", + "led.setDisplayMode": "Sets the display mode between black and white and greyscale for rendering LEDs.", + "led.stopAnimation": "Cancels the current animation and clears other pending animations.", + "led.toggle": "Toggles a particular pixel", + "led.toggleAll": "Inverts the current LED display", + "led.unplot": "Turn off the specified LED using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", + "music": "Generation of music tones through pin ``P0``.", + "music.beat": "Returns the duration of a beat in milli-seconds", + "music.changeTempoBy": "Change the tempo by the specified amount", + "music.noteFrequency": "Gets the frequency of a note.", + "music.playTone": "Plays a tone through pin ``P0`` for the given duration.", + "music.rest": "Rests (plays nothing) for a specified time through pin ``P0``.", + "music.ringTone": "Plays a tone through pin ``P0``.", + "music.setTempo": "Sets the tempo to the specified amount", + "music.tempo": "Returns the tempo in beats per minute. Tempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play.", + "pins": "Control currents in Pins for analog/digital signals, servos, i2c, ...", + "pins.analogPitch": "Emits a Pulse-width modulation (PWM) signal to the current pitch pin. Use `analog set pitch pin` to define the pitch pin.", + "pins.analogReadPin": "Read the connector value as analog, that is, as a value comprised between 0 and 1023.", + "pins.analogSetPeriod": "Configures the Pulse-width modulation (PWM) of the analog output to the given value in **microseconds** or `1/1000` milliseconds.\nIf this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.", + "pins.analogSetPitchPin": "Sets the pin used when using `pins->analog pitch`.", + "pins.analogWritePin": "Set the connector value as analog. Value must be comprised between 0 and 1023.", + "pins.digitalReadPin": "Read the specified pin or connector as either 0 or 1", + "pins.digitalWritePin": "Set a pin or connector value to either 0 or 1.", + "pins.map": "Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc.", + "pins.servoSetPulse": "Configures this IO pin as an analog/pwm output, configures the period to be 20 ms, and sets the pulse width, based on the value it is given **microseconds** or `1/1000` milliseconds.", + "pins.servoWritePin": "Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).", + "serial": "Reading and writing data over a serial connection.", + "serial.writeLine": "Prints a line of text to the serial", + "serial.writeValue": "Writes a ``name: value`` pair line to the serial." } \ No newline at end of file From 5fcf9165ea4adfae39ef8639ade55fcdac9ea6e9 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 09:45:57 -0700 Subject: [PATCH 32/56] magic 8 tutorial --- docs/lessons/magic-8.md | 1 + docs/lessons/magic-8/activity.md | 18 ++++++------------ docs/lessons/magic-8/tutorial.md | 27 +++++++++++++++++++++++++++ docs/lessons/magic-logo/activity.md | 2 -- 4 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 docs/lessons/magic-8/tutorial.md diff --git a/docs/lessons/magic-8.md b/docs/lessons/magic-8.md index 6a8430c1..32e0d573 100644 --- a/docs/lessons/magic-8.md +++ b/docs/lessons/magic-8.md @@ -9,6 +9,7 @@ If (Conditionals) ## Quick Links * [activity](/lessons/magic-8/activity) +* [tutorial](/lessons/magic-8/tutorial) * [challenges](/lessons/magic-8/challenges) * [quiz](/lessons/magic-8/quiz) * [quiz answers](/lessons/magic-8/quiz-answers) diff --git a/docs/lessons/magic-8/activity.md b/docs/lessons/magic-8/activity.md index e087821e..00921bf2 100644 --- a/docs/lessons/magic-8/activity.md +++ b/docs/lessons/magic-8/activity.md @@ -1,8 +1,6 @@ # magic 8 activity -A fortune teller game on the micro:bit - -Welcome! This tutorial will help you create a magic 8 ball on the micro:bit. Let's get started! +Welcome! This activity will help you create a magic 8 ball on the micro:bit. Let's get started! Show a string to instruct the user how to play Magic 8! The magic 8 ball can only answer true or false questions. @@ -32,16 +30,13 @@ input.onGesture(Gesture.Shake, () => { Create a variable of type number called **randomNumber**. Set **randomNumber** to a random number with a limit of 2. Remember the random function in the math library, picks a random number from 0 to the limit, but not including the limit unless it is 0. ```blocks - basic.showString("ASK A QUESTION") basic.showNumber(8) input.onGesture(Gesture.Shake, () => { basic.clearScreen() - let randomNumber = Math.random(2) + let randomNumber = Math.random(3) }); - - ``` Create an if statement for the condition `if randomNumber = 2`. If **randomNumber** is 2, display the string 'Yes' @@ -52,7 +47,7 @@ basic.showString("ASK A QUESTION") basic.showNumber(8) input.onGesture(Gesture.Shake, () => { basic.clearScreen(); - let randomNumber = Math.random(2); + let randomNumber = Math.random(3); if (randomNumber == 2) { basic.showString("YES"); } @@ -68,7 +63,7 @@ basic.showString("ASK A QUESTION") basic.showNumber(8) input.onGesture(Gesture.Shake, () => { basic.clearScreen() - let randomNumber = Math.random(2) + let randomNumber = Math.random(3) if (randomNumber == 2) { basic.showString("YES") } else if (randomNumber == 1) { @@ -84,7 +79,7 @@ basic.showString("ASK A QUESTION") basic.showNumber(8) input.onGesture(Gesture.Shake, () => { basic.clearScreen() - let randomNumber = Math.random(2) + let randomNumber = Math.random(3) if (randomNumber == 2) { basic.showString("YES") } else if (randomNumber == 1) { @@ -106,14 +101,13 @@ basic.showString("ASK A QUESTION") basic.showNumber(8) input.onGesture(Gesture.Shake, () => { basic.clearScreen() - let randomNumber = Math.random(2) + let randomNumber = Math.random(3) if (randomNumber == 2) { basic.showString("YES") } else if (randomNumber == 1) { basic.showString("NO") } else { basic.showString("I DON'T KNOW") - } basic.showNumber(8) diff --git a/docs/lessons/magic-8/tutorial.md b/docs/lessons/magic-8/tutorial.md new file mode 100644 index 00000000..2e4b8291 --- /dev/null +++ b/docs/lessons/magic-8/tutorial.md @@ -0,0 +1,27 @@ +# Magic 8 tutorial + +Show a string to instruct the user how to play Magic 8! The magic 8 ball can only answer questions with "YES", "NO", or "MAYBE"... + +### Rebuild the game! + +The blocks have been shuffled! Put them back together so that... +* show "ASK A QUESTION" on the screen +* when the micro:bit is shaken, + * generate a random number between 0 and 2. + * if the number is `2`, show "YES" + * if the number is `1`, show "NO" + * otherwise show "MAYBE"... + +```shuffle +basic.showString("ASK A QUESTION") +input.onGesture(Gesture.Shake, () => { + let randomNumber = Math.random(3) + if (randomNumber == 2) { + basic.showString("YES") + } else if (randomNumber == 1) { + basic.showString("NO") + } else { + basic.showString("MAYBE") + } +}) +``` diff --git a/docs/lessons/magic-logo/activity.md b/docs/lessons/magic-logo/activity.md index 1f32c4c8..005745f3 100644 --- a/docs/lessons/magic-logo/activity.md +++ b/docs/lessons/magic-logo/activity.md @@ -30,8 +30,6 @@ input.onGesture(Gesture.LogoUp, () => { . . # . . `) }) - - ``` Run your code and try to turn around the micro:bit to see the **logo up** event in action! From 13f42f5892ae574ce77ebc1f8c9d734fe1a4a6e6 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 10:32:02 -0700 Subject: [PATCH 33/56] added various tutorials --- docs/lessons/bop-it/quiz-answers.md | 37 ++++------ docs/lessons/catch-the-egg-game.md | 28 ++++---- docs/lessons/catch-the-egg-game/activity.md | 2 - docs/lessons/catch-the-egg-game/tutorial.md | 29 ++++++++ docs/lessons/glowing-pendulum.md | 1 + docs/lessons/glowing-pendulum/activity.md | 75 +++++++++++++-------- docs/lessons/glowing-pendulum/tutorial.md | 29 ++++++++ docs/lessons/guess-the-number.md | 1 + docs/lessons/guess-the-number/activity.md | 7 +- docs/lessons/guess-the-number/tutorial.md | 25 +++++++ 10 files changed, 166 insertions(+), 68 deletions(-) create mode 100644 docs/lessons/catch-the-egg-game/tutorial.md create mode 100644 docs/lessons/glowing-pendulum/tutorial.md create mode 100644 docs/lessons/guess-the-number/tutorial.md diff --git a/docs/lessons/bop-it/quiz-answers.md b/docs/lessons/bop-it/quiz-answers.md index 852602bb..66033d7e 100644 --- a/docs/lessons/bop-it/quiz-answers.md +++ b/docs/lessons/bop-it/quiz-answers.md @@ -12,17 +12,14 @@ Answer the questions while completing the tutorial. Pay attention to the dialogu ## 1. Write the code that will store the global variable named 'action' and returns a random number between 0 and 2 -
- -``` -action = Math.random(3) +```blocks +let action = Math.random(3) ``` ## 2. Write the code that will display the string, "PUSH A" if the global variable called 'action' is equal to 0 -
- -``` +```blocks +let action = Math.random(3) if (action == 0) { basic.showString("PUSH A", 150) } @@ -30,10 +27,9 @@ if (action == 0) { ## 3. Write the code that increments the score if button A is pressed when the global variable called 'action' is equal to 1 -
- -``` +```blocks input.onButtonPressed(Button.A, () => { + let action = Math.random(3) if (action == 0) { game.addScore(1) } @@ -42,9 +38,8 @@ input.onButtonPressed(Button.A, () => { ## 4. Write the code that will display the string "LOGO DOWN" if the global variable called 'action' is equal to 1 -
- -``` +```blocks +let action = Math.random(3) if (action == 1) { basic.showString("LOGO DOWN", 150) } @@ -52,10 +47,9 @@ if (action == 1) { ## 5. Write the code that increments the score if the BBC micro:bit logo is tilted down when the global variable called 'action' is equal to 1 -
- -``` +```blocks input.onLogoDown(() => { + let action = Math.random(3) if (action == 1) { game.addScore(1) } @@ -64,9 +58,8 @@ input.onLogoDown(() => { ## 6. Write the code that will display the string "SHAKE" if the global variable called 'action' is equal to 2 -
- -``` +```blocks +let action = Math.random(3) if (action == 2) { basic.showString("SHAKE", 150) } @@ -74,13 +67,11 @@ if (action == 2) { ## 7. Write the code that increments the score if the BBC micro:bit is shaken when the global variable called 'action' is equal to 2 -
- -``` +```blocks input.onLogoDown(() => { + let action = Math.random(3) if (action == 1) { game.addScore(1) } }) ``` - diff --git a/docs/lessons/catch-the-egg-game.md b/docs/lessons/catch-the-egg-game.md index 36ede269..079b6df5 100644 --- a/docs/lessons/catch-the-egg-game.md +++ b/docs/lessons/catch-the-egg-game.md @@ -11,6 +11,7 @@ Variables ## Quick Links * [activity](/lessons/catch-the-egg-game/activity) +* [tutorial](/lessons/catch-the-egg-game/tutorial) * [quiz](/lessons/catch-the-egg-game/quiz) * [quiz answers](/lessons/catch-the-egg-game/quiz-answers) @@ -20,18 +21,21 @@ Learn how to create a catch the egg game game with **plot**, `led->plot` , **unp ## Documentation -* **variables** : [read more...](/reference/variables/var) -* **forever** : [read more...](/reference/basic/forever) -* **unplot** : [read more...](/reference/led/unplot) -* **plot** : [read more...](/reference/led/plot) -* **if** : [read more...](/reference/logic/if) -* **acceleration** : [read more...](/reference/input/acceleration) -* **math minimum number** : [read more...](/reference/math) -* **math maximum number** : [read more...](/reference/math) -* **math random number** : [read more...](/reference/math) -* **math modulus** : [read more...](/reference/math) -* **show number** : [read more...](/reference/basic/show-number) -* **pause** : [read more...](/reference/basic/pause) +```cards +let x = 2; +led.unplot(0, 0); +basic.forever(() => {}); +x += 1; +led.plot(0, 0); +basic.pause(300); +input.acceleration(Dimension.X); +Math.min(0,0); +Math.max(0,1); +Math.random(5); +game.addScore(1); +game.score(); +game.removeLife(1); +``` ## Objectives diff --git a/docs/lessons/catch-the-egg-game/activity.md b/docs/lessons/catch-the-egg-game/activity.md index 61d29db4..e7479558 100644 --- a/docs/lessons/catch-the-egg-game/activity.md +++ b/docs/lessons/catch-the-egg-game/activity.md @@ -1,7 +1,5 @@ # catch the egg game challenges -Coding challenges for catch the egg game. - ## Before we get started Your starting code should look like this: diff --git a/docs/lessons/catch-the-egg-game/tutorial.md b/docs/lessons/catch-the-egg-game/tutorial.md new file mode 100644 index 00000000..3c805b86 --- /dev/null +++ b/docs/lessons/catch-the-egg-game/tutorial.md @@ -0,0 +1,29 @@ +# catch the egg game tutorial + +### Rebuild the game! + +The blocks have been shuffled! Put them back together so that... +* an egg LED falls from the top of the screen, row by row. +* a basket LED is on the bottom row and can be moved by using the accelerometer `X` data. +* if the egg LED reaches the last row, reset the egg position to the first row. + +```shuffle +let basketX = 2 +let eggX = 2 +let eggY = 0 +basic.forever(() => { + led.unplot(basketX, 4) + led.unplot(eggX, eggY) + eggY = eggY + 1 + led.plot(eggX, eggY) + basic.pause(300) + let accX = input.acceleration(Dimension.X) + basketX = 2 + Math.min(2, Math.max(-2, accX / 200)) + led.plot(basketX, 4) + if (eggY > 4) { + eggY = -1 + eggX = Math.random(5) + } + basic.pause(300) +}) +``` diff --git a/docs/lessons/glowing-pendulum.md b/docs/lessons/glowing-pendulum.md index 9fdcaccd..407aeb72 100644 --- a/docs/lessons/glowing-pendulum.md +++ b/docs/lessons/glowing-pendulum.md @@ -9,6 +9,7 @@ Acceleration ## Quick Links * [activity](/lessons/glowing-pendulum/activity) +* [tutorial](/lessons/glowing-pendulum/tutorial) * [challenges](/lessons/glowing-pendulum/challenges) * [quiz](/lessons/glowing-pendulum/quiz) * [quiz answers](/lessons/glowing-pendulum/quiz-answers) diff --git a/docs/lessons/glowing-pendulum/activity.md b/docs/lessons/glowing-pendulum/activity.md index 70845508..209a1a57 100644 --- a/docs/lessons/glowing-pendulum/activity.md +++ b/docs/lessons/glowing-pendulum/activity.md @@ -4,10 +4,29 @@ Construct a pendulum that glows using acceleration. Welcome! This activity will teach how to construct a pendulum that glows using acceleration. Let's get started! +Turn on all the LEDs. + +```blocks +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) +``` + Create a **forever** loop that will constantly display the appropriate brightness on the LED display. ```blocks +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) basic.forever(() => { }) @@ -16,6 +35,13 @@ basic.forever(() => { Now let's measure the acceleration on the `y` axis and store that value in a variable. The `acceleration(y)` function will provide the value. ```blocks +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) basic.forever(() => { let acceleration = input.acceleration(Dimension.Y); }); @@ -25,9 +51,15 @@ Since the micro:bit will be swinging back and forth, the acceleration will only ```blocks -let acceleration = 0; +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) basic.forever(() => { - acceleration = input.acceleration(Dimension.Y); + let acceleration = input.acceleration(Dimension.Y); acceleration = Math.abs(acceleration) }); ``` @@ -35,6 +67,13 @@ basic.forever(() => { The function `acceleration(y)` returns a number between 0 and 1024. We want to use this value for the brightness of the micro:bit, but the `set brightness()` only accepts a value between 0 and 256. Thus, we need to divide the acceleration by 4 to ensure we will be in the appropriate range. ```blocks +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) basic.forever(() => { let acceleration = input.acceleration(Dimension.Y); acceleration = Math.abs(acceleration); @@ -46,37 +85,19 @@ basic.forever(() => { Now let's use our acceleration value to set the brightness on the micro:bit. ```blocks +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) basic.forever(() => { let acceleration = input.acceleration(Dimension.Y); acceleration = Math.abs(acceleration); acceleration = acceleration / 4; led.setBrightness(acceleration) }); - - - -``` - - -Let's show what the brightness of the micro:bit is by turning all the LEDs on! - -```blocks - -basic.forever(() => { - let acceleration = input.acceleration(Dimension.Y); - acceleration = Math.abs(acceleration); - acceleration = acceleration / 4; - led.setBrightness(acceleration) - basic.showLeds(` - # # # # # - # # # # # - # # # # # - # # # # # - # # # # # - `) -}); - - ``` ### ~avatar avatar diff --git a/docs/lessons/glowing-pendulum/tutorial.md b/docs/lessons/glowing-pendulum/tutorial.md new file mode 100644 index 00000000..1bc261d5 --- /dev/null +++ b/docs/lessons/glowing-pendulum/tutorial.md @@ -0,0 +1,29 @@ +# glowing pendulum block tutorial + +The glowing pendulum changes the screen brightness based on the acceleration measured on the BBC micro:bit. + +### Rebuild the game! + +The blocks have been shuffled! Put them back together so that... +* all LEDs are turned on +* the BBC micro:bit repeats code **forever** that + * reads the acceleration along the ``y`` axis, + * calculate the absolute value of the acceleration + * scales down the acceleration value by a factor of `4` + * uses the scaled value to set the screen **brightness** + +```blocks +basic.showLeds(` + # # # # # + # # # # # + # # # # # + # # # # # + # # # # # + `) +basic.forever(() => { + let acceleration = input.acceleration(Dimension.Y); + acceleration = Math.abs(acceleration); + acceleration = acceleration / 4; + led.setBrightness(acceleration) +}); +``` diff --git a/docs/lessons/guess-the-number.md b/docs/lessons/guess-the-number.md index 611bd482..7b825d5a 100644 --- a/docs/lessons/guess-the-number.md +++ b/docs/lessons/guess-the-number.md @@ -11,6 +11,7 @@ Math - Pick Random ## Quick links * [activity](/lessons/guess-the-number/activity) +* [tutorial](/lessons/guess-the-number/tutorial) * [challenges](/lessons/guess-the-number/challenges) * [quiz](/lessons/guess-the-number/quiz) * [quiz answers](/lessons/guess-the-number/quiz-answers) diff --git a/docs/lessons/guess-the-number/activity.md b/docs/lessons/guess-the-number/activity.md index a7e2fb4c..d6846948 100644 --- a/docs/lessons/guess-the-number/activity.md +++ b/docs/lessons/guess-the-number/activity.md @@ -19,12 +19,11 @@ input.onButtonPressed(Button.A, () => { ``` -Create a local variable of type number `x` and set it to a random number using `pick random`. `pick random` 9 generates a random number between `0` and `09`. - +Create a local variable of type number `x` and set it to a random number using `pick random`. `pick random` 9 generates a random number between `0` and `9`. ```blocks input.onButtonPressed(Button.A, () => { - let x = Math.random(9) + let x = Math.random(10) }) ``` @@ -34,7 +33,7 @@ Show the random number on the screen. ```blocks input.onButtonPressed(Button.A, () => { - let x = Math.random(9) + let x = Math.random(10) basic.showNumber(x) }) diff --git a/docs/lessons/guess-the-number/tutorial.md b/docs/lessons/guess-the-number/tutorial.md new file mode 100644 index 00000000..3994e00d --- /dev/null +++ b/docs/lessons/guess-the-number/tutorial.md @@ -0,0 +1,25 @@ +# guess the number tutorial + +### ~avatar avatar + +### @video td/videos/guess-the-number-0 + +This tutorial will help you create a guess the number game! Let's get started! + +### ~ + +### Rebuild the game! + +The blocks have been shuffled! Put them back together so that... +* when the user presses button ``A``, + * generate a random number + * show the number on screen + + +```shuffle +input.onButtonPressed(Button.A, () => { + let x = Math.random(10) + basic.showNumber(x) +}) +``` + From 37fb907f045025bf2f1f0757f1b150db546c1aaa Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 14:13:13 -0700 Subject: [PATCH 34/56] Bump pxt-core to 0.2.120 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index d0404814..0ffbb1ea 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.102", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.117" - } + "name": "pxt-microbit", + "version": "0.2.102", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.120" + } } From 07e8610e5ddf47d77aff2f282b0de6c8874a4b2b Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 14:13:15 -0700 Subject: [PATCH 35/56] 0.2.103 --- package.json | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 0ffbb1ea..b946ee3a 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,34 @@ { - "name": "pxt-microbit", - "version": "0.2.102", - "description": "BBC micro:bit target for PXT", - "keywords": [ - "JavaScript", - "education", - "microbit" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/pxt-microbit.git" - }, - "author": "", - "license": "MIT", - "homepage": "https://github.com/Microsoft/pxt-microbit#readme", - "files": [ - "README.md", - "pxtarget.json", - "built/*.js", - "built/*.json", - "built/*.d.ts", - "sim/public", - "docs/*.md", - "docs/*/*.md", - "docs/*/*/*.md" - ], - "devDependencies": { - "typescript": "^1.8.7" - }, - "dependencies": { - "pxt-core": "0.2.120" - } + "name": "pxt-microbit", + "version": "0.2.103", + "description": "BBC micro:bit target for PXT", + "keywords": [ + "JavaScript", + "education", + "microbit" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-microbit.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-microbit#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "devDependencies": { + "typescript": "^1.8.7" + }, + "dependencies": { + "pxt-core": "0.2.120" + } } From e8887f590497d2dc34d3cf8f4cec9af9d3543efe Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 22:55:37 -0700 Subject: [PATCH 36/56] radio blocks to read/stream value pairs --- libs/microbit-radio/radio.cpp | 56 ++++++++++++++++++++++++++++++++++ libs/microbit-radio/shims.d.ts | 19 ++++++++++++ 2 files changed, 75 insertions(+) diff --git a/libs/microbit-radio/radio.cpp b/libs/microbit-radio/radio.cpp index d35ec0a8..00601b76 100644 --- a/libs/microbit-radio/radio.cpp +++ b/libs/microbit-radio/radio.cpp @@ -2,6 +2,8 @@ using namespace pxt; +#define RADIO_VALUE_PACKET_TYPE 24641622 + //% color=270 weight=34 namespace radio { @@ -46,6 +48,60 @@ namespace radio { int buf[] = { value_0, value_1, value_2, value_3 }; uBit.radio.datagram.send((uint8_t*)buf, 4*sizeof(int)); } + + /** + * Broadcasts a name / value pair along with the device serial number + * and running time to any connected BBC micro:bit in the group. + * @param name the field name (max 12 characters), eg: "data" + * @param the numberic value + */ + //% help=radio/stream-value + //% weight=15 + //% blockId=radio_datagram_stream_value block="stream|value %name|= %value" + void streamValue(StringData* name, int number) { + if (radioEnable() != MICROBIT_OK) return; + + ManagedString n(name); + uint8_t buf[32]; + uint32_t* buf32 = (uint32_t*)buf; + memset(buf, 32, 0); + buf32[0] = number; // 4 bytes: value + buf32[1] = microbit_serial_number(); // 4 bytes: serial number + buf32[2] = system_timer_current_time(); // 4 bytes: running time + memcpy(buf + 12, n.toCharArray(), min(12, n.length())); // 12-24: field name + buf32[7] = RADIO_VALUE_PACKET_TYPE; // last 4 bytes: magic number of package type + uBit.radio.datagram.send(buf, 32); + } + + /** + * Reads a value sent with `stream value` and writes it + * to the serial stream as JSON + */ + //% help=radio/read-value-to-serial + //% weight=14 + void readValueToSerial() { + if (radioEnable() != MICROBIT_OK) return; + PacketBuffer p = uBit.radio.datagram.recv(); + uint8_t* bytes = packet.getBytes(); + int type; + memcpy(&type, bytes + 28, 4); + if (type != RADIO_VALUE_PACKET_TYPE) return; + + int value; + int serial; + int time; + char name[12]; + memcpy(&value, bytes, 4); + memcpy(&serial, bytes + 4, 4); + memcpy(&time, bytes + 8, 4); + memcpy(&name, bytes + 12, 12); + + uBit.serial.send("{s:"); uBit.serial.send(serial); + uBit.serial.send(",t:"); uBit.serial.send(time); + uBit.serial.send(",v:"); uBit.serial.send(value); + uBit.serial.send(",n:\""); uBit.serial.send(name); + uBit.serial.send("}\r\n"); + } /** * Registers code to run when a packet is received over radio. diff --git a/libs/microbit-radio/shims.d.ts b/libs/microbit-radio/shims.d.ts index 781088c9..8785b53f 100644 --- a/libs/microbit-radio/shims.d.ts +++ b/libs/microbit-radio/shims.d.ts @@ -13,6 +13,25 @@ declare namespace radio { //% blockId=radio_datagram_send_numbers block="send numbers|0: %VALUE0|1: %VALUE1|2: %VALUE2|3: %VALUE3" shim=radio::sendNumbers function sendNumbers(value_0: number, value_1: number, value_2: number, value_3: number): void; + /** + * Broadcasts a name / value pair along with the device serial number + * and running time to any connected BBC micro:bit in the group. + * @param name the field name (max 12 characters), eg: "data" + * @param the numberic value + */ + //% help=radio/stream-value + //% weight=15 + //% blockId=radio_datagram_stream_value block="stream|value %name|= %value" shim=radio::streamValue + function streamValue(name: string, number: number): void; + + /** + * Reads a value sent with `stream value` and writes it + * to the serial stream as JSON + */ + //% help=radio/read-value-to-serial + //% weight=14 shim=radio::readValueToSerial + function readValueToSerial(): void; + /** * Registers code to run when a packet is received over radio. */ From 588423139996fe52a0ea5e867a425c43ad17c2b2 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 23:01:20 -0700 Subject: [PATCH 37/56] null terminated name --- libs/microbit-radio/radio.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/microbit-radio/radio.cpp b/libs/microbit-radio/radio.cpp index 00601b76..70acd32a 100644 --- a/libs/microbit-radio/radio.cpp +++ b/libs/microbit-radio/radio.cpp @@ -90,7 +90,7 @@ namespace radio { int value; int serial; int time; - char name[12]; + char name[12+1]; name[12] = 0; memcpy(&value, bytes, 4); memcpy(&serial, bytes + 4, 4); memcpy(&time, bytes + 8, 4); @@ -100,7 +100,7 @@ namespace radio { uBit.serial.send(",t:"); uBit.serial.send(time); uBit.serial.send(",v:"); uBit.serial.send(value); uBit.serial.send(",n:\""); uBit.serial.send(name); - uBit.serial.send("}\r\n"); + uBit.serial.send("\"}\r\n"); } /** From fcfdbcc7e4d4a26f8ed7f5910e5c8eb59768cd98 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 9 May 2016 23:03:42 -0700 Subject: [PATCH 38/56] moving block down category --- libs/microbit-radio/radio.cpp | 4 ++-- libs/microbit-radio/shims.d.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/microbit-radio/radio.cpp b/libs/microbit-radio/radio.cpp index 70acd32a..6e1f1d73 100644 --- a/libs/microbit-radio/radio.cpp +++ b/libs/microbit-radio/radio.cpp @@ -56,7 +56,7 @@ namespace radio { * @param the numberic value */ //% help=radio/stream-value - //% weight=15 + //% weight=4 //% blockId=radio_datagram_stream_value block="stream|value %name|= %value" void streamValue(StringData* name, int number) { if (radioEnable() != MICROBIT_OK) return; @@ -78,7 +78,7 @@ namespace radio { * to the serial stream as JSON */ //% help=radio/read-value-to-serial - //% weight=14 + //% weight=3 void readValueToSerial() { if (radioEnable() != MICROBIT_OK) return; PacketBuffer p = uBit.radio.datagram.recv(); diff --git a/libs/microbit-radio/shims.d.ts b/libs/microbit-radio/shims.d.ts index 8785b53f..fba75297 100644 --- a/libs/microbit-radio/shims.d.ts +++ b/libs/microbit-radio/shims.d.ts @@ -20,7 +20,7 @@ declare namespace radio { * @param the numberic value */ //% help=radio/stream-value - //% weight=15 + //% weight=4 //% blockId=radio_datagram_stream_value block="stream|value %name|= %value" shim=radio::streamValue function streamValue(name: string, number: number): void; @@ -29,7 +29,7 @@ declare namespace radio { * to the serial stream as JSON */ //% help=radio/read-value-to-serial - //% weight=14 shim=radio::readValueToSerial + //% weight=3 shim=radio::readValueToSerial function readValueToSerial(): void; /** From e7d8559fe3dd1ba69f4fe64fbde7102495462524 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Tue, 10 May 2016 13:18:35 +0200 Subject: [PATCH 39/56] Cache test scripts --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4ec5a626..08b12ffb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,4 +13,5 @@ notifications: cache: directories: - node_modules + - built/cache From 9d1f2e024b879cef878eafbf29b3b4c187d09e95 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 09:28:05 -0700 Subject: [PATCH 40/56] missing shim --- sim/libmbit.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sim/libmbit.ts b/sim/libmbit.ts index 045c8935..51aa6751 100644 --- a/sim/libmbit.ts +++ b/sim/libmbit.ts @@ -452,6 +452,10 @@ namespace pxsim.radio { export function sendNumbers(value0: number, value1: number, value2: number, value3: number): void { board().radio.datagram.send([value0, value1, value2, value3]); } + + export function sendValue(name:string, value: number) { + board().radio.datagram.send([value]); + } export function receiveNumber(): number { return board().radio.datagram.recv().data[0]; From d17a8de72de2cb5eb0a9fee371119e878aa068c8 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Tue, 10 May 2016 19:01:36 +0200 Subject: [PATCH 41/56] Use shorter domain name --- README.md | 2 +- pxtarget.json | 6 +++--- win10/app/package.appxmanifest | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e0e0ed06..bba87180 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Please follow instructions at https://github.com/Microsoft/pxt#running-a-target- ## Universal Windows App The Windows 10 app is a [Universal Windows Hosted Web App](https://microsoftedge.github.io/WebAppsDocs/en-US/win10/CreateHWA.htm) -that wraps codemicrobit.com and provides additional features. +that wraps m.pxt.io and provides additional features. ### Sideloading diff --git a/pxtarget.json b/pxtarget.json index 82233b9d..c71e9962 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -72,13 +72,13 @@ "log": true }, "appTheme": { - "logoUrl": "https://codemicrobit.com/about", + "logoUrl": "https://m.pxt.io/about", "logo": "./static/logo.svg", "docsLogo": "./static/docslogo.svg", "portraitLogo":"./static/portraitlogo.svg", "footerLogo": "./static/footerlogo.svg", - "homeUrl": "https://codemicrobit.com/", - "embedUrl": "https://codemicrobit.com/", + "homeUrl": "https://m.pxt.io/", + "embedUrl": "https://m.pxt.io/", "koduUrl": "https://www.kodugamelab.com/bbc-microbit/", "visualStudioCode": true, "docMenu": [ diff --git a/win10/app/package.appxmanifest b/win10/app/package.appxmanifest index 128dd462..09efe5b2 100644 --- a/win10/app/package.appxmanifest +++ b/win10/app/package.appxmanifest @@ -14,9 +14,9 @@ - + - + @@ -27,7 +27,7 @@ BBC micro:bit binary file - .hex file created with codemicrobit.com or microbit.co.uk + .hex file created with m.pxt.io or microbit.co.uk .hex From 9a404854e7914ff9ef3b67ff646b59d547b1277a Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Tue, 10 May 2016 19:03:31 +0200 Subject: [PATCH 42/56] Rename target --- pxtarget.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pxtarget.json b/pxtarget.json index c71e9962..f7444ca7 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -1,7 +1,7 @@ { "id": "microbit", - "name": "code micro:bit", - "title": "code micro:bit", + "name": "m.pxt.io", + "title": "m.pxt.io", "corepkg": "microbit", "bundleddirs": [ "libs/microbit", From 38b197bc0335df2eb3bad1a4eb0bfbacdef24bb1 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Tue, 10 May 2016 19:03:50 +0200 Subject: [PATCH 43/56] 0.2.104 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b946ee3a..b2a977f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.103", + "version": "0.2.104", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From 47f9362e5ffa35e54afe2b8561a5067a377f2609 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 10:14:51 -0700 Subject: [PATCH 44/56] read radio values --- libs/microbit-radio/radio.cpp | 25 ++++++++++++++++++++----- sim/libmbit.ts | 4 ++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/libs/microbit-radio/radio.cpp b/libs/microbit-radio/radio.cpp index 6e1f1d73..036d85d4 100644 --- a/libs/microbit-radio/radio.cpp +++ b/libs/microbit-radio/radio.cpp @@ -82,15 +82,30 @@ namespace radio { void readValueToSerial() { if (radioEnable() != MICROBIT_OK) return; PacketBuffer p = uBit.radio.datagram.recv(); - uint8_t* bytes = packet.getBytes(); - int type; - memcpy(&type, bytes + 28, 4); - if (type != RADIO_VALUE_PACKET_TYPE) return; + int length = p.length(); + uBit.serial.send("length:"); + uBit.serial.send(length); + uBit.serial.send("\r\n"); + if (length < 32) { + return; + } + + uint8_t* bytes = p.getBytes(); + uint32_t* buf32 = (uint32_t*)bytes; + //uint32_t type = buf32[7]; + //if (type != RADIO_VALUE_PACKET_TYPE) + //{ + // uBit.serial.send("type: "); + // uBit.serial.send(type); + // uBit.serial.send("\r\n"); + // return; + //} int value; int serial; int time; - char name[12+1]; name[12] = 0; + char name[12+1]; name[12] = 0; // memset(name, 0, 13 * sizeof(char)); + memcpy(&value, bytes, 4); memcpy(&serial, bytes + 4, 4); memcpy(&time, bytes + 8, 4); diff --git a/sim/libmbit.ts b/sim/libmbit.ts index 51aa6751..fbe0557f 100644 --- a/sim/libmbit.ts +++ b/sim/libmbit.ts @@ -452,8 +452,8 @@ namespace pxsim.radio { export function sendNumbers(value0: number, value1: number, value2: number, value3: number): void { board().radio.datagram.send([value0, value1, value2, value3]); } - - export function sendValue(name:string, value: number) { + + export function streamValue(name: string, value: number) { board().radio.datagram.send([value]); } From 2cc6f864a85277b95c0c2725022736f7b4156552 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 10:26:36 -0700 Subject: [PATCH 45/56] remove logging --- libs/microbit-radio/radio.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libs/microbit-radio/radio.cpp b/libs/microbit-radio/radio.cpp index 036d85d4..e0fd21ec 100644 --- a/libs/microbit-radio/radio.cpp +++ b/libs/microbit-radio/radio.cpp @@ -83,15 +83,12 @@ namespace radio { if (radioEnable() != MICROBIT_OK) return; PacketBuffer p = uBit.radio.datagram.recv(); int length = p.length(); - uBit.serial.send("length:"); - uBit.serial.send(length); - uBit.serial.send("\r\n"); if (length < 32) { return; } uint8_t* bytes = p.getBytes(); - uint32_t* buf32 = (uint32_t*)bytes; + //uint32_t* buf32 = (uint32_t*)bytes; //uint32_t type = buf32[7]; //if (type != RADIO_VALUE_PACKET_TYPE) //{ @@ -104,7 +101,7 @@ namespace radio { int value; int serial; int time; - char name[12+1]; name[12] = 0; // memset(name, 0, 13 * sizeof(char)); + char name[12+1]; memset(name, 0, 13 * sizeof(char)); memcpy(&value, bytes, 4); memcpy(&serial, bytes + 4, 4); From 0e5c30ec7c9a985ad02bf3e3582a17ac03aad5e2 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 10:44:40 -0700 Subject: [PATCH 46/56] updated logo --- docs/static/microbit.bw.svg | 1 + docs/static/microbit.red.svg | 1 + pxtarget.json | 8 ++++---- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 docs/static/microbit.bw.svg create mode 100644 docs/static/microbit.red.svg diff --git a/docs/static/microbit.bw.svg b/docs/static/microbit.bw.svg new file mode 100644 index 00000000..72ee22b5 --- /dev/null +++ b/docs/static/microbit.bw.svg @@ -0,0 +1 @@ +P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file diff --git a/docs/static/microbit.red.svg b/docs/static/microbit.red.svg new file mode 100644 index 00000000..e8ccc161 --- /dev/null +++ b/docs/static/microbit.red.svg @@ -0,0 +1 @@ +P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file diff --git a/pxtarget.json b/pxtarget.json index f7444ca7..44233c1e 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -73,10 +73,10 @@ }, "appTheme": { "logoUrl": "https://m.pxt.io/about", - "logo": "./static/logo.svg", - "docsLogo": "./static/docslogo.svg", - "portraitLogo":"./static/portraitlogo.svg", - "footerLogo": "./static/footerlogo.svg", + "logo": "./static/microbit.red.svg", + "docsLogo": "./static/microbit.red.svg", + "portraitLogo":"./static/microbit.red.svg", + "footerLogo": "./static/microbit.red.svg", "homeUrl": "https://m.pxt.io/", "embedUrl": "https://m.pxt.io/", "koduUrl": "https://www.kodugamelab.com/bbc-microbit/", From 7f284b2a57f18b64986700621a6ccf64b343e8d2 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 10:44:52 -0700 Subject: [PATCH 47/56] 0.2.105 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b2a977f0..9dbf8fdc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.104", + "version": "0.2.105", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From f150d93070e5a9d1277ef3e5854f6a19b23f6181 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 10:51:47 -0700 Subject: [PATCH 48/56] removing old logos --- docs/static/docslogo.svg | 1 - docs/static/favicon.png | Bin 2377 -> 0 bytes docs/static/footerlogo.svg | 1 - docs/static/logo.svg | 1 - docs/static/logo128.png | Bin 18882 -> 0 bytes docs/static/logo32.png | Bin 2377 -> 0 bytes docs/static/logo512.png | Bin 132412 -> 0 bytes docs/static/portraitlogo.svg | 1 - docs/static/splashscreen.svg | 64 ----------------------------------- docs/static/squarelogo.svg | 61 --------------------------------- 10 files changed, 129 deletions(-) delete mode 100644 docs/static/docslogo.svg delete mode 100644 docs/static/favicon.png delete mode 100644 docs/static/footerlogo.svg delete mode 100644 docs/static/logo.svg delete mode 100644 docs/static/logo128.png delete mode 100644 docs/static/logo32.png delete mode 100644 docs/static/logo512.png delete mode 100644 docs/static/portraitlogo.svg delete mode 100644 docs/static/splashscreen.svg delete mode 100644 docs/static/squarelogo.svg diff --git a/docs/static/docslogo.svg b/docs/static/docslogo.svg deleted file mode 100644 index e2f5a912..00000000 --- a/docs/static/docslogo.svg +++ /dev/null @@ -1 +0,0 @@ -micro:bit logo \ No newline at end of file diff --git a/docs/static/favicon.png b/docs/static/favicon.png deleted file mode 100644 index ce57e08052aad68496cc5c596375ce5f78df462e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2377 zcmV-P3AXl$P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2;NCVK~z{rtyf!! zU1t^k_P_T&*U6bPm&_z-YTBVhd>B)TR)bKCjWx!AS}OJ}4=QL8B_N21O0l9K^+Cax zQmU0&38)XPLW#Ce)6^s-X1pLGCOS@=%gmW`&dj;*o8PzgIip}+yzIk1YyW%yd;RPG z*0(O(JAD58r$-pUcR=ioP@wFm0~CB@k4abS35BXvG5zk_64DkAaOTlgMN*jW{R9 zX50lWBLa?dH10sUHBPAeX56C8@-f%YSljX5bK!KBaCZqUp9*|~zeFVBj0iaHCyPx+ z*~oT|F%m+lmvQdDAyF~JQfln+S8_p)AoaJiEmZx2A)E2}07Ss|eA<*-Izgf#B!oyb z{8zRon ze1r%fsfoP8Tv$bcSM%W%WoV=-c?Hb-HI%&)X8kEtP|T%`Yp8l<>~dAi@w!PPysB0u&MAjCA*HJmEyn5%1XfpJfx$fHFTt%G{7R9^(3?KOorZ zk3-avbOY=P3iN#!HNS{f+CeQSaZKq`dR@%iHivYn1h48a<5x`A2J?c}Qi#$=*h;q; z1+PAD2FM~w#|MtA-~QVw{_@06(0uta(%z7X=D#=y;jRxXVee<&hS@vj^Sq$Qpu1;+ zDQsoi@a{kN^V|S4BDTfXe{l}K|MGW`#YEx%aJcCL_J8XLO7|_8TjY+C7a$~>-qCX} zWCio*i2ejNF0J6TN4~Xv9c{9of7N`kKq2v~S`j?}Ws>v?9H)Pfl%T)}jXLL6JmLf=zJa^*8X>&pwCYZ*Q8u z!tyNc`0)wjfQTs$xR84&@n7N5IP=QR;>E=|-23e>qPl;t5iDa|Pq`9?2^nnwuw~5xPYvVMXhrd(ITfFjIeg2G1)N$v> zKZ3YI7V~~*qm64ndJ(N_>wH2(nHMaEd7V;G!;H{dOyR3-Tz&d1x(yPH<6x$W`p53p zLp%B}y}>M+=LOAo0`xgg1&T_y(2!4E zy^5u0KY^t$oWQ{^ebC(3B5@lle>a^vlKo|?4?7&t0)gNsiS`|T-*_5u<*Cyc^@nDd zTbRXxhmXVUndcKKjirDw$!i(kU`?2CqPVnx%ER|C_L=SUyfwm&r!PvS9o2UqV4dih z5oUn?v@2P=c=Uc$Z`)@RdskL*`P5gjxyq>Evxz$t1!DVv+pjo=9Nm$_pU^D@`dyw? z9f*+K=;QTI{S?vKmg%f4FJk7MO9sD6cPyR9Up}9y4-_+%kk&6>!mmGlihdV4xGN^2 z`Fjtcynm6qRAyAlNttCmRz?;qkMJ|5byqryN<_RrV&pW={%I!>xpIg%eeXfc9lG6` z7p49V+cWRPug+(=TUC(qRDA8lUt;CauQL_rFaNJcFkQx59)Acp%v8)SsLs5iD%n*} z=yL}(?ou#YNK)Q@^eB$}@JTE_a0Ef+pA7y_50AxY`ouEseD)-!-*uO{Q2Lw98;TIo z(EHHYiwqnB!hd1lh(tsrimDHUG-OYBb7cidi%q5dh!Rm(I#w-E_0-+T*xbQ0Twu3! zaDmB8gy(Z2>v0{m_>)>tpd#}Uc`)$RBP=xE7+uG=(9ncCTdNx zc{&WO@2j&vXe8UHhlPAT-)pNeA=GNarB8iB)ep>Ajk{{uwYphA`}&MY!89xM){i)%bFLMPQ?!xrTQ$C3?x z$Z#6G_cIUZ_T*4hD7J-%&zdgMO*mlW;T=geFWdYs(C1uBy&+LkJ6;b1>xk>*Mwd-% zi5-mchTc~XSq;PiHL0m}Mmicro:bit logo \ No newline at end of file diff --git a/docs/static/logo.svg b/docs/static/logo.svg deleted file mode 100644 index 0c0c4e1f..00000000 --- a/docs/static/logo.svg +++ /dev/null @@ -1 +0,0 @@ -micro:bit logo \ No newline at end of file diff --git a/docs/static/logo128.png b/docs/static/logo128.png deleted file mode 100644 index 6070150a4aab6d58241761e8253d80a1934c8b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18882 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 VygZCQMtlGO002ovPDHLkV1hc{>-7Kt diff --git a/docs/static/logo32.png b/docs/static/logo32.png deleted file mode 100644 index ce57e08052aad68496cc5c596375ce5f78df462e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2377 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 diff --git a/docs/static/portraitlogo.svg b/docs/static/portraitlogo.svg deleted file mode 100644 index 542afec7..00000000 --- a/docs/static/portraitlogo.svg +++ /dev/null @@ -1 +0,0 @@ -micro:bit logo \ No newline at end of file diff --git a/docs/static/splashscreen.svg b/docs/static/splashscreen.svg deleted file mode 100644 index 02a16ad8..00000000 --- a/docs/static/splashscreen.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - micro:bit logo - - - diff --git a/docs/static/squarelogo.svg b/docs/static/squarelogo.svg deleted file mode 100644 index ceaf41af..00000000 --- a/docs/static/squarelogo.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - micro:bit logo - - - From 2803c00814ce23cccf63ba681d61eb76408027ad Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 11:08:44 -0700 Subject: [PATCH 49/56] Bump pxt-core to 0.2.121 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9dbf8fdc..d1ed208f 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,6 @@ "typescript": "^1.8.7" }, "dependencies": { - "pxt-core": "0.2.120" + "pxt-core": "0.2.121" } } From 1c6c749dadf065b08631002dd792271304f82af4 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 11:08:46 -0700 Subject: [PATCH 50/56] 0.2.106 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1ed208f..bd731f46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.105", + "version": "0.2.106", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From 00d23f84371f8e262ad0fd5d27ec60991896a54e Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 11:34:41 -0700 Subject: [PATCH 51/56] updated windows 10 app --- docs/static/microbit.bw.svg | 1 - docs/static/microbit.red.png | Bin 0 -> 21078 bytes docs/static/microbit.red.square.png | Bin 0 -> 2096 bytes docs/static/microbit.red.svg | 2 +- win10/app.sln | 2 +- ...demicrobit_0.1.3.0_AnyCPU_Debug.appxbundle | Bin 45324 -> 0 bytes .../m.pxt.io_0.1.4.0_AnyCPU_Debug.appxbundle | Bin 0 -> 54015 bytes ....cer => m.pxt.io_0.1.4.0_AnyCPU_Debug.cer} | Bin win10/app/BundleArtifacts/neutral.txt | 2 +- win10/app/images/LockScreenLogo.scale-200.png | Bin 807 -> 2096 bytes win10/app/images/SplashScreen.scale-200.png | Bin 17741 -> 18418 bytes .../images/Square150x150Logo.scale-200.png | Bin 5409 -> 7574 bytes .../app/images/Square44x44Logo.scale-200.png | Bin 1401 -> 2840 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 467 -> 1584 bytes win10/app/images/StoreLogo.png | Bin 849 -> 2145 bytes .../app/images/Wide310x150Logo.scale-200.png | Bin 7873 -> 8585 bytes .../{codemicrobit.jsproj => m.pxt.io.jsproj} | 0 win10/app/package.appxmanifest | 6 +++--- 18 files changed, 6 insertions(+), 7 deletions(-) delete mode 100644 docs/static/microbit.bw.svg create mode 100644 docs/static/microbit.red.png create mode 100644 docs/static/microbit.red.square.png delete mode 100644 win10/app/AppPackages/latest/codemicrobit_0.1.3.0_AnyCPU_Debug.appxbundle create mode 100644 win10/app/AppPackages/latest/m.pxt.io_0.1.4.0_AnyCPU_Debug.appxbundle rename win10/app/AppPackages/latest/{codemicrobit_0.1.3.0_AnyCPU_Debug.cer => m.pxt.io_0.1.4.0_AnyCPU_Debug.cer} (100%) rename win10/app/{codemicrobit.jsproj => m.pxt.io.jsproj} (100%) diff --git a/docs/static/microbit.bw.svg b/docs/static/microbit.bw.svg deleted file mode 100644 index 72ee22b5..00000000 --- a/docs/static/microbit.bw.svg +++ /dev/null @@ -1 +0,0 @@ -P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file diff --git a/docs/static/microbit.red.png b/docs/static/microbit.red.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2a5efa6bfd6a0d1b5abe39a219472eabe0db88 GIT binary patch literal 21078 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 literal 0 HcmV?d00001 diff --git a/docs/static/microbit.red.square.png b/docs/static/microbit.red.square.png new file mode 100644 index 0000000000000000000000000000000000000000..e896f5aa6b1b34963a7b9d670ff4d66fd457e45e GIT binary patch literal 2096 zcmd^9`#;l*8~QNZ)i%c5GG^p<4y(-l64G&KWxAN6NRguP{T6a5 zD!C+*Tv`h0dvs78r+mw)?^mVc+smc1{*LeSdYt;wMPpa%r{%RIji0U$6~ z=U@m31Ok6dH}jVzCAg7!e95LlHO( zL>~(=Kq3v$XaWjFfg+4xNE!@DhodMu1_veMVI%^YN`zBMa2gqIOwl<4hr<~d7~t`E zB9TZUkth@jl}e@2Xr}N@<_NR}0&R`NFi}`jD#F49wFQT>AriNdNL;kO3&vnOmcXV^ zxKyeujb>$vVw!DYS)w`C7zZZC$rkHsx0%Pr@i;gJgW>4t=;r3e=kp~7R4Lvl1W$_~ z(0?SF2)Oz}Cw-BNfe#NaG&S|Lun4fS3bM8iVKSpwtOSZ#sv#qbYWWLoYaY$|kTG*F zhm+>)obKY1!{aIW{G9@V#GM%APLzs>GEY*dn6%5A9Og}q@Fhq2Q=$V5<$;EKgQ*Ic zQF1sfGn&3%PCu~QBu`0SS5=NIyzb|mn#&C zgoK2|#Ke@8l(e+8?Ck8EoSfX;+`PQJd}F4HZgbpZ+bL7K(k=F9&Dd4u4wo2?wG8fM zOQ(8E=O!zc_N{KJB(s8Kvm+^H>V4+weTKE;&ny%*ViHJp2wID>T#+6L}eBX_*n zX|mOM>YDS@>%6J!+n;xb{MHkipPye)P;mVC@xsEwva+)B^74v`in_v+FDo?tZHI?% z=a1Z0jdZFWbr+1?DVVRQU8=ggUVU}4|H$; zq}_K3WJv>pzx{t35WE7n(5(cS?j4>90NDHA12ml0uvbS?vOL4Gg3}aP2jm&CK)O63 zHH(!Rn`P?AvS+y_J17Hm4@K=G63V>&#?I}R5rPOqcFheZ>a@GzuvW9|mg4-mAE%3U z=Wor{Y_%+!Ynh&F2@7*;?V8>LCpAzsf37HAkP7DyDgXU`=D#mimG=*_M|#n6M^90keFuvpbX(WYrCS8<+%gU9TKJ(5QIHy-g`|8}DR z>bUwdi5}?#{!1~hzpL?&*f@P|Qg^efBuowJ!H-$h4#j2Uc~D*Jf{TQecEoYE}1u^T2jRzfLc#z7|^ zXjQ*uamC?RZw=4<H|(-p&Bew*{T_$jm&@wz$wq$`bIKpo`ur|h>6$Z z8rW-|)6bSc9@xrX`yby^VC45icn_m2hNuo zeCD|gxa{sBcEAULms>m*eTDzJrv$xYh`)f>{?wMNt;30B{vY}U(Xgp_4@Y}*?egvV zn|GzQ=653$XOeC5zB-(70)#t(gP-uvm`|kJURD@>`ec?d45uEJ@D(@X%_F0UU0*R4 z5#i#0OvF1UjwXc&ZIhe03Gc-nQ}MI6pk5tU@+xLan{Eu%fY)c=ehm3|Oc-?yzr3=% zId%I~bdTLzi11FX7)?HM;lO@Xe5c8NF%D84-^p4uVZWO9#1{TuhqP~Y1_haiisxYI zIbR!Y-5)TSc-mwZgN)7JyQSvFoR#&X~!NjKZzy6bt}9 Lo&lm(_ZZdRdKJzp literal 0 HcmV?d00001 diff --git a/docs/static/microbit.red.svg b/docs/static/microbit.red.svg index e8ccc161..e66b808e 100644 --- a/docs/static/microbit.red.svg +++ b/docs/static/microbit.red.svg @@ -1 +1 @@ -P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file +(1,0)(3,0)(0,1)(2,1)(4,1)(0,2)(4,2)(1,3)(3,3)(2,4)P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file diff --git a/win10/app.sln b/win10/app.sln index a6d15e1f..7d514686 100644 --- a/win10/app.sln +++ b/win10/app.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "codemicrobit", "app\codemicrobit.jsproj", "{39122940-AB16-4CD4-A0CE-79A3EB863ECF}" +Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "m.pxt.io", "app\m.pxt.io.jsproj", "{39122940-AB16-4CD4-A0CE-79A3EB863ECF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/win10/app/AppPackages/latest/codemicrobit_0.1.3.0_AnyCPU_Debug.appxbundle b/win10/app/AppPackages/latest/codemicrobit_0.1.3.0_AnyCPU_Debug.appxbundle deleted file mode 100644 index 8cb96d6d132db5af400cf5ba50fdb93742d3e554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45324 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�Q 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 U_VoN2-p+e>dW`=0@A3Bk0E@@$6951J diff --git a/win10/app/AppPackages/latest/m.pxt.io_0.1.4.0_AnyCPU_Debug.appxbundle b/win10/app/AppPackages/latest/m.pxt.io_0.1.4.0_AnyCPU_Debug.appxbundle new file mode 100644 index 0000000000000000000000000000000000000000..70a1ae5159accc9ce94d07aaa4f394b716cdf7b6 GIT binary patch literal 54015 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
a`R6?pG%nUpr-v^ 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 S_nM3th+Kzdb?2udhYLP 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 diff --git a/win10/app/images/Square44x44Logo.scale-200.png b/win10/app/images/Square44x44Logo.scale-200.png index bdb80cd1405ff7fbe7ba5d74027171bf15004f7e..339d7e1b0a77a054178e2131e3084e2cbb69cb0a 100644 GIT binary patch literal 2840 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 delta 1393 zcmV-%1&;cd7WoR08Gi-<00427Ff;%F00eVFNmK|32nc)#WQYI&010qNS#tmY7a#xt z7a#${T_A-3000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs000E`Nkloa+zG4%u73uW0~Z2k1=4O6hk^aTm%vV77w~tk9sySY8<8g=nPFB2UIDHQlq)p_ z;6~(=&N~UMvOT~JA(EFyFYtbggNw;N29`9N#CjBf2Y|5%g3Q~-fcpu!K@4>-j&xqqF&XAwBxF1CjT(?z3+dK1vs z;CC*JB0Htw09sja5|WsX09u1Uzoy~c_L5@7Zq6v680kYEC~bbWOcm&L6j+;OG?DT+Zhzg2Ydb&T(0Mc2 z7V2ZAfLqC6ptkb?Wv5YO`88WvjK1LYeYMjfWrqY<*P1w@W&`?sod>cw)-)am&h&6- zK5{k}6CJ?mz+8{MXCp6pP0sEp0+%U;cLKjSIDgUye1&XWen-x{27u!oG(xis*f#0Y zugC^zkjW=a$syoVhw<2s?$db4!HFlQ(b)x@;Gh+X>ySgtdOi&SOC7WxZJ;yNJ^=Vh z*?5(5@M{%X&o~4Vf`!0uDL#Dz%u(vCPSL8`0TcsQtw%YyW+_u9Oa)8J8ih{@aE(&0 zSAVHDR778(DJ$Dus%X>2l!bW4XncanIa9$O%645@loKbE?J60J-RxM}cG|opMdZ?m zh6T!YdlhYt06!}ALZI=XiAbfb96ad4{*D(aRs*>Pc3;SwGqBA_(kYTyZs=0Yfa+> zc+u0TnZ(QJ^Y#Dv+&*Q8e}Riy6GxORMSpzsb#2E-l${dbL-bq9nZz9AoubXt!+*7% z&&BOvuhq4L7+8lsKjX;MdkmW#1QOt`ETf4G*ULDA^+Ybg?cj3)DNDA)?Hyl=z*D#- zx56}~&y9{^3Gg=l%eR>6K{iFM`FLqM(Qf4Q!Bun=nWJXH4WDk{S^RGE524t!^mzzZ zZ47u5slP6xJ?^TN5MS3Iwd{ZJkAMHBsp5@_8_xsx1PWjreZ{WTbP;ZsxdAB!sF;To zDttf5*=E~;Ua1VO}VI|%SS><(nVM%xNb!1@J z*w6hZk(GggnIXU@#1*87k&%gsiJ6(1g_)6siHVJwnVpS^g@uKcm6e^Hor8&)o0XNH z1&G+VIGB03nE82FI5|1FxVZQ^ICyw?czJpG`1l0bI0SfE1UNXvxw)m-IAz#4<=DBT zczNac`9%d;#f8}%*@iv%)-LL#>U3Z&d%Q6-kD#_gy&Dglu(z43dHo;#qF+egoP%0%@DlG(vq%*^$bE9OcQWdJx zlxxxz92^`R9UWas;a7LYHH@F7|&HPS)gLtkfqp?tJIdS z+*PE~Q>@ZkqS9BY+Fz#H<{v)M!(+0i=aQhH<-x(*qSK$7`g}GI_+S%M^f|Vu<3m!M2D?TgW3q(zXU`36%#s0iQxwk#Bpo?(REjr+ zp>d9U%%K^Loq=ABjgluAniygiv`k*Dt<3DK+bpoTQlnYJSvKI#(YrGzJ8BWkDj5NR}DK;HCOU*FZX{x+oJZ?8cAU_of-GcGfzGFG*kGOx7RYGKk++r zzU?`Bdb-|B>++wUZhjWmjoerAZq8Hf52|cy9{jIo$g14FZ`bnJE1;b1>FVdQ&MBb@ E0Pd1qGynhq delta 452 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 P00000NkvXXu0mjfKBbho diff --git a/win10/app/images/Wide310x150Logo.scale-200.png b/win10/app/images/Wide310x150Logo.scale-200.png index f37e6f6d824e714f73c2e0c71c097aef745263dc..816b48e1abd3c4cc481c7fda42ad9658ed017805 100644 GIT binary patch literal 8585 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 LX;`Q48vp+QpK-FH literal 7873 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 diff --git a/win10/app/codemicrobit.jsproj b/win10/app/m.pxt.io.jsproj similarity index 100% rename from win10/app/codemicrobit.jsproj rename to win10/app/m.pxt.io.jsproj diff --git a/win10/app/package.appxmanifest b/win10/app/package.appxmanifest index 09efe5b2..765c72d4 100644 --- a/win10/app/package.appxmanifest +++ b/win10/app/package.appxmanifest @@ -1,6 +1,6 @@  - + codemicrobitapp @@ -18,8 +18,8 @@ - - + + From d3294ee99e79d7f266c066172d1454745733f3a1 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 11:34:59 -0700 Subject: [PATCH 52/56] 0.2.107 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bd731f46..a1ebe743 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.106", + "version": "0.2.107", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From b0d4fdb0092bab8cf2caf6f5cf76ac5acf7bcd5e Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 11:42:14 -0700 Subject: [PATCH 53/56] 0.2.108 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1ebe743..e0e97c12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.107", + "version": "0.2.108", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From 8552a2de526178dd0eef2bbf813b25ea65aa9dc4 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 12:41:20 -0700 Subject: [PATCH 54/56] fixing docs icon size --- docs/static/microbit.docs.svg | 1 + docs/static/microbit.red.svg | 2 +- pxtarget.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 docs/static/microbit.docs.svg diff --git a/docs/static/microbit.docs.svg b/docs/static/microbit.docs.svg new file mode 100644 index 00000000..6392907d --- /dev/null +++ b/docs/static/microbit.docs.svg @@ -0,0 +1 @@ +(1,0)(3,0)(0,1)(2,1)(4,1)(0,2)(4,2)(1,3)(3,3)(2,4)P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file diff --git a/docs/static/microbit.red.svg b/docs/static/microbit.red.svg index e66b808e..0ad2d248 100644 --- a/docs/static/microbit.red.svg +++ b/docs/static/microbit.red.svg @@ -1 +1 @@ -(1,0)(3,0)(0,1)(2,1)(4,1)(0,2)(4,2)(1,3)(3,3)(2,4)P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file +(1,0)(3,0)(0,1)(2,1)(4,1)(0,2)(4,2)(1,3)(3,3)(2,4)P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDABA+B \ No newline at end of file diff --git a/pxtarget.json b/pxtarget.json index 44233c1e..58b5d30a 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -74,7 +74,7 @@ "appTheme": { "logoUrl": "https://m.pxt.io/about", "logo": "./static/microbit.red.svg", - "docsLogo": "./static/microbit.red.svg", + "docsLogo": "./static/microbit.docs.svg", "portraitLogo":"./static/microbit.red.svg", "footerLogo": "./static/microbit.red.svg", "homeUrl": "https://m.pxt.io/", From 60c3f1f4273881a09d685b8a7099ae1b635dfe50 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 12:41:37 -0700 Subject: [PATCH 55/56] 0.2.109 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e0e97c12..8e779d4e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.108", + "version": "0.2.109", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From 7d0101af25bebf2e44917fb4bbf61e10313e06da Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 10 May 2016 16:42:18 -0700 Subject: [PATCH 56/56] marking various radio functions as debug until API is stable --- libs/microbit-radio/radio.cpp | 14 +++++++------- libs/microbit-radio/shims.d.ts | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/libs/microbit-radio/radio.cpp b/libs/microbit-radio/radio.cpp index e0fd21ec..836b9a7e 100644 --- a/libs/microbit-radio/radio.cpp +++ b/libs/microbit-radio/radio.cpp @@ -41,7 +41,7 @@ namespace radio { * Broadcasts 4 numbers over radio to any connected micro:bit in the group. */ //% help=radio/send-numbers - //% weight=59 + //% weight=59 debug=true //% blockId=radio_datagram_send_numbers block="send numbers|0: %VALUE0|1: %VALUE1|2: %VALUE2|3: %VALUE3" void sendNumbers(int value_0, int value_1, int value_2, int value_3) { if (radioEnable() != MICROBIT_OK) return; @@ -55,10 +55,10 @@ namespace radio { * @param name the field name (max 12 characters), eg: "data" * @param the numberic value */ - //% help=radio/stream-value - //% weight=4 - //% blockId=radio_datagram_stream_value block="stream|value %name|= %value" - void streamValue(StringData* name, int number) { + //% help=radio/send-value + //% weight=4 debug=true + //% blockId=radio_datagram_send_value block="send|value %name|= %value" + void sendValue(StringData* name, int number) { if (radioEnable() != MICROBIT_OK) return; ManagedString n(name); @@ -78,7 +78,7 @@ namespace radio { * to the serial stream as JSON */ //% help=radio/read-value-to-serial - //% weight=3 + //% weight=3 debug=true void readValueToSerial() { if (radioEnable() != MICROBIT_OK) return; PacketBuffer p = uBit.radio.datagram.recv(); @@ -131,7 +131,7 @@ namespace radio { * @param index index of the number to read from 0 to 3. 1 eg */ //% help=radio/received-number-at - //% weight=45 + //% weight=45 debug=true //% blockId=radio_datagram_received_number_at block="receive number|at %VALUE" blockGap=8 int receivedNumberAt(int index) { if (radioEnable() != MICROBIT_OK) return 0; diff --git a/libs/microbit-radio/shims.d.ts b/libs/microbit-radio/shims.d.ts index fba75297..02ce7354 100644 --- a/libs/microbit-radio/shims.d.ts +++ b/libs/microbit-radio/shims.d.ts @@ -9,7 +9,7 @@ declare namespace radio { * Broadcasts 4 numbers over radio to any connected micro:bit in the group. */ //% help=radio/send-numbers - //% weight=59 + //% weight=59 debug=true //% blockId=radio_datagram_send_numbers block="send numbers|0: %VALUE0|1: %VALUE1|2: %VALUE2|3: %VALUE3" shim=radio::sendNumbers function sendNumbers(value_0: number, value_1: number, value_2: number, value_3: number): void; @@ -19,17 +19,17 @@ declare namespace radio { * @param name the field name (max 12 characters), eg: "data" * @param the numberic value */ - //% help=radio/stream-value - //% weight=4 - //% blockId=radio_datagram_stream_value block="stream|value %name|= %value" shim=radio::streamValue - function streamValue(name: string, number: number): void; + //% help=radio/send-value + //% weight=4 debug=true + //% blockId=radio_datagram_send_value block="send|value %name|= %value" shim=radio::sendValue + function sendValue(name: string, number: number): void; /** * Reads a value sent with `stream value` and writes it * to the serial stream as JSON */ //% help=radio/read-value-to-serial - //% weight=3 shim=radio::readValueToSerial + //% weight=3 debug=true shim=radio::readValueToSerial function readValueToSerial(): void; /** @@ -45,7 +45,7 @@ declare namespace radio { * @param index index of the number to read from 0 to 3. 1 eg */ //% help=radio/received-number-at - //% weight=45 + //% weight=45 debug=true //% blockId=radio_datagram_received_number_at block="receive number|at %VALUE" blockGap=8 shim=radio::receivedNumberAt function receivedNumberAt(index: number): number;

+zT^YOu!Nm>%r;UzNS=DhZ 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 Lzf98Zo1ps#eoD>g delta 795 zcmV+$1LXX$5T^!^8Gi-<00374`G)`i00eVFNmK|32nc)#WQYI&010qNS#tmY44nV~ z44nZ%$aH=H000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs0007{Nkl0$09LMobuC>Mb0JTADB!ULwqKZbO;-(ZVT2Tej!3l>3y`mh#S9}y$Og{d)$A}yGOn%piXvEgLq+-q{Y*Twn5Y-WCE&Ud)y%>T}z zq@<*zq@<*IwA7iKj&HCG?U;iP3wC*lC+NdOTPTGavFo>3eF`TUW+Xj4x3XUu4Tc$S&?CC6*yXs`vh z6QQH(uNCit7910IyEz)_N(62wzF19!k8n%eaTy#)41ca~f^3Qn;*R^_a%A8kDv^mk zz;2<;A4Nw2a%+T&`#ZKIG8JJX$$DObdy#>k5)&QF1IV%MhTi#^gq74%02 z7DW20IDee!>&MxoUTu!xb><$264~}h-y^ta{IfM6zTygY2-4ptCVg90;{;A)Z6Y&8 zc;BKGd0%9pYI4tZ(QFoX+zU$+gLg2k39?x}#$9p8H-E3MB?8^zk5Z$k;7r7;ia*B& z*Cj$#p}>67Fy;T5jdM9(UuQ2kpA&wDJy_HL@qZ3{H*(LE&$-d?*!{j$IM6Jtaf2tq zF7>J~<-k;YCKSg!da+7a;5e4ZUwO0JQ+1q+JEYGC&1^kbTuXkGS@==-*wk$Cm-spd<`#aF^7jW*0xe0>-e{x0<6FX1CY(HlicNl8gbNlBsn Z2Ndc#1p0BBf^q-=002ovPDHLkV1n{xbUgq7 diff --git a/win10/app/images/SplashScreen.scale-200.png b/win10/app/images/SplashScreen.scale-200.png index ee0de0e3552a9b580e3a8177c19f5f5e113217b3..9fdfc90409d5338e11dbf5e232f06dd258af9e4e 100644 GIT binary patch literal 18418 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