diff --git a/.github/workflows/makecode.yml b/.github/workflows/makecode.yml
new file mode 100644
index 0000000..1aa354c
--- /dev/null
+++ b/.github/workflows/makecode.yml
@@ -0,0 +1,29 @@
+name: MakeCode
+
+on: [push]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [8.x]
+
+ steps:
+ - uses: actions/checkout@v1
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: npm install
+ run: |
+ npm install -g pxt
+ pxt target microbit
+ - name: build
+ run: |
+ pxt install
+ pxt build --cloud
+ env:
+ CI: true
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..f8106d4
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,23 @@
+{
+ "editor.formatOnType": true,
+ "files.autoSave": "afterDelay",
+ "files.watcherExclude": {
+ "**/.git/objects/**": true,
+ "**/built/**": true,
+ "**/node_modules/**": true,
+ "**/yotta_modules/**": true,
+ "**/yotta_targets": true,
+ "**/pxt_modules/**": true
+ },
+ "files.associations": {
+ "*.blocks": "html",
+ "*.jres": "json"
+ },
+ "search.exclude": {
+ "**/built": true,
+ "**/node_modules": true,
+ "**/yotta_modules": true,
+ "**/yotta_targets": true,
+ "**/pxt_modules": true
+ }
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..9ee2cf6
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,30 @@
+
+// A task runner that calls the MakeCode (PXT) compiler
+{
+ "version": "2.0.0",
+ "tasks": [{
+ "label": "pxt deploy",
+ "type": "shell",
+ "command": "pxt deploy --local",
+ "group": "build",
+ "problemMatcher": [ "$tsc" ]
+ }, {
+ "label": "pxt build",
+ "type": "shell",
+ "command": "pxt build --local",
+ "group": "build",
+ "problemMatcher": [ "$tsc" ]
+ }, {
+ "label": "pxt install",
+ "type": "shell",
+ "command": "pxt install",
+ "group": "build",
+ "problemMatcher": [ "$tsc" ]
+ }, {
+ "label": "pxt clean",
+ "type": "shell",
+ "command": "pxt clean",
+ "group": "test",
+ "problemMatcher": [ "$tsc" ]
+ }]
+}
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..91ceacd
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'github-pages', group: :jekyll_plugins
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9068464
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+all: deploy
+
+build:
+ pxt build
+
+deploy:
+ pxt deploy
+
+test:
+ pxt test
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2104502
--- /dev/null
+++ b/README.md
@@ -0,0 +1,31 @@
+
+> Open this page at [https://alexanderedavis.github.io/binary-light-box/](https://alexanderedavis.github.io/binary-light-box/)
+
+## Use as Extension
+
+This repository can be added as an **extension** in MakeCode.
+
+* open [https://makecode.microbit.org/](https://makecode.microbit.org/)
+* click on **New Project**
+* click on **Extensions** under the gearwheel menu
+* search for **https://github.com/alexanderedavis/binary-light-box** and import
+
+## Edit this project 
+
+To edit this repository in MakeCode.
+
+* open [https://makecode.microbit.org/](https://makecode.microbit.org/)
+* click on **Import** then click on **Import URL**
+* paste **https://github.com/alexanderedavis/binary-light-box** and click import
+
+## Blocks preview
+
+This image shows the blocks code from the last commit in master.
+This image may take a few minutes to refresh.
+
+
+
+#### Metadata (used for search, rendering)
+
+* for PXT/microbit
+
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..f56a029
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,8 @@
+makecode:
+ target: microbit
+ platform: microbit
+ home_url: https://makecode.microbit.org/
+theme: jekyll-theme-slate
+include:
+ - assets
+ - README.md
diff --git a/main.blocks b/main.blocks
new file mode 100644
index 0000000..5e4bee7
--- /dev/null
+++ b/main.blocks
@@ -0,0 +1 @@
+Denarycolumn4column128column256column1column16column32column64column8columnscolumnValueslistreadyready0FALSESerialPin.P0SerialPin.P16BaudRate.BaudRate9600columns0000000000Denary01Denaryready0TRUETRUEreadyTRUEANDTRUEEQ0DigitalPin.P11TRUEEQ0columns00101TRUEANDTRUEEQ0DigitalPin.P10TRUEEQ0columns0100-1TRUEANDTRUEEQ0DigitalPin.P21TRUEEQ0columns10112TRUEANDTRUEEQ0DigitalPin.P20TRUEEQ0columns1101-2TRUEANDTRUEEQ0DigitalPin.P31TRUEEQ0columns20124TRUEANDTRUEEQ0DigitalPin.P30TRUEEQ0columns2102-4TRUEANDTRUEEQ0DigitalPin.P41TRUEEQ0columns30138TRUEANDTRUEEQ0DigitalPin.P40TRUEEQ0columns3103-8TRUEANDTRUEEQ0DigitalPin.P61TRUEEQ0columns401416TRUEANDTRUEEQ0DigitalPin.P60TRUEEQ0columns4104-16TRUEANDTRUEEQ0DigitalPin.P71TRUEEQ0columns501532TRUEANDTRUEEQ0DigitalPin.P70TRUEEQ0columns5105-32TRUEANDTRUEEQ0DigitalPin.P81TRUEEQ0columns601664TRUEANDTRUEEQ0DigitalPin.P80TRUEEQ0columns6106-64TRUEANDTRUEEQ0DigitalPin.P91TRUEEQ0columns7017128TRUEANDTRUEEQ0DigitalPin.P90TRUEEQ0columns7107-128TRUEANDTRUEEQ0DigitalPin.P101TRUEEQ0columns8018256TRUEANDTRUEEQ0DigitalPin.P100TRUEEQ0columns8108-256updateNumberDenary0differencecolumns0columnflag1DenaryDisplay/number
\ No newline at end of file
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..a7c5141
--- /dev/null
+++ b/main.py
@@ -0,0 +1,91 @@
+def changes2(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ Display(Denary)
+def changes4(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column4 = flag
+ Display(Denary)
+def changes128(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column128 = flag
+ Display(Denary)
+def Display(number: number):
+ serial.write_string("/")
+ serial.write_number(number)
+def changes256(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column256 = flag
+ Display(Denary)
+def changes1(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column1 = flag
+ Display(Denary)
+def changes16(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column16 = flag
+ Display(Denary)
+def changes32(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column32 = flag
+ Display(Denary)
+def changes64(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column64 = flag
+ Display(Denary)
+def changes8(difference: number, flag: number):
+ global Denary
+ Denary += difference
+ column8 = flag
+ Display(Denary)
+Denary = 0
+serial.redirect(SerialPin.P0, SerialPin.P16, BaudRate.BAUD_RATE9600)
+columns = [0, 0, 0, 0, 0, 0, 0, 0, 0]
+Denary = 0
+Display(Denary)
+
+def on_forever():
+ if pins.digital_read_pin(DigitalPin.P1) == 1 and columns[0] == 0:
+ changes1(1, 1)
+ elif pins.digital_read_pin(DigitalPin.P1) == 0 and columns[0] == 1:
+ changes1(-1, 0)
+ elif pins.digital_read_pin(DigitalPin.P2) == 1 and columns[1] == 0:
+ changes2(2, 1)
+ elif pins.digital_read_pin(DigitalPin.P2) == 0 and columns[1] == 1:
+ changes2(-2, 0)
+ elif pins.digital_read_pin(DigitalPin.P3) == 1 and columns[2] == 0:
+ changes4(4, 1)
+ elif pins.digital_read_pin(DigitalPin.P3) == 0 and columns[2] == 1:
+ changes4(-4, 0)
+ elif pins.digital_read_pin(DigitalPin.P4) == 1 and columns[3] == 0:
+ changes8(8, 1)
+ elif pins.digital_read_pin(DigitalPin.P4) == 0 and columns[3] == 1:
+ changes8(-8, 0)
+ elif pins.digital_read_pin(DigitalPin.P6) == 1 and columns[4] == 0:
+ changes16(16, 1)
+ elif pins.digital_read_pin(DigitalPin.P6) == 0 and columns[4] == 1:
+ changes16(-16, 0)
+ elif pins.digital_read_pin(DigitalPin.P7) == 1 and columns[5] == 0:
+ changes32(32, 1)
+ elif pins.digital_read_pin(DigitalPin.P7) == 0 and columns[5] == 1:
+ changes32(-32, 0)
+ elif pins.digital_read_pin(DigitalPin.P8) == 1 and columns[6] == 0:
+ changes64(64, 1)
+ elif pins.digital_read_pin(DigitalPin.P8) == 0 and columns[6] == 1:
+ changes64(-64, 0)
+ elif pins.digital_read_pin(DigitalPin.P9) == 1 and columns[7] == 0:
+ changes128(128, 1)
+ elif pins.digital_read_pin(DigitalPin.P9) == 0 and columns[7] == 1:
+ changes128(-128, 0)
+ elif pins.digital_read_pin(DigitalPin.P10) == 1 and columns[8] == 0:
+ changes256(256, 1)
+ elif pins.digital_read_pin(DigitalPin.P10) == 0 and columns[0] == 1:
+ changes256(-256, 0)
+basic.forever(on_forever)
diff --git a/main.ts b/main.ts
new file mode 100644
index 0000000..f819b30
--- /dev/null
+++ b/main.ts
@@ -0,0 +1,62 @@
+function updateNumber (flag: number, column: number, difference: number) {
+ Denary += difference
+ columns[column] = flag
+ Display(Denary)
+}
+function Display (number: number) {
+ serial.writeString("/")
+ serial.writeNumber(number)
+}
+let Denary = 0
+let columns: number[] = []
+let ready = false
+serial.redirect(
+SerialPin.P0,
+SerialPin.P16,
+BaudRate.BaudRate9600
+)
+columns = [0, 0, 0, 0, 0, 0, 0, 0, 0]
+Denary = 0
+Display(Denary)
+ready = true
+basic.forever(function () {
+ if (ready) {
+ if (pins.digitalReadPin(DigitalPin.P1) == 1 && columns[0] == 0) {
+ updateNumber(1, 0, 1)
+ } else if (pins.digitalReadPin(DigitalPin.P1) == 0 && columns[0] == 1) {
+ updateNumber(0, 0, -1)
+ } else if (pins.digitalReadPin(DigitalPin.P2) == 1 && columns[1] == 0) {
+ updateNumber(1, 1, 2)
+ } else if (pins.digitalReadPin(DigitalPin.P2) == 0 && columns[1] == 1) {
+ updateNumber(0, 1, -2)
+ } else if (pins.digitalReadPin(DigitalPin.P3) == 1 && columns[2] == 0) {
+ updateNumber(1, 2, 4)
+ } else if (pins.digitalReadPin(DigitalPin.P3) == 0 && columns[2] == 1) {
+ updateNumber(0, 2, -4)
+ } else if (pins.digitalReadPin(DigitalPin.P4) == 1 && columns[3] == 0) {
+ updateNumber(1, 3, 8)
+ } else if (pins.digitalReadPin(DigitalPin.P4) == 0 && columns[3] == 1) {
+ updateNumber(0, 3, -8)
+ } else if (pins.digitalReadPin(DigitalPin.P6) == 1 && columns[4] == 0) {
+ updateNumber(1, 4, 16)
+ } else if (pins.digitalReadPin(DigitalPin.P6) == 0 && columns[4] == 1) {
+ updateNumber(0, 4, -16)
+ } else if (pins.digitalReadPin(DigitalPin.P7) == 1 && columns[5] == 0) {
+ updateNumber(1, 5, 32)
+ } else if (pins.digitalReadPin(DigitalPin.P7) == 0 && columns[5] == 1) {
+ updateNumber(0, 5, -32)
+ } else if (pins.digitalReadPin(DigitalPin.P8) == 1 && columns[6] == 0) {
+ updateNumber(1, 6, 64)
+ } else if (pins.digitalReadPin(DigitalPin.P8) == 0 && columns[6] == 1) {
+ updateNumber(0, 6, -64)
+ } else if (pins.digitalReadPin(DigitalPin.P9) == 1 && columns[7] == 0) {
+ updateNumber(1, 7, 128)
+ } else if (pins.digitalReadPin(DigitalPin.P9) == 0 && columns[7] == 1) {
+ updateNumber(0, 7, -128)
+ } else if (pins.digitalReadPin(DigitalPin.P10) == 1 && columns[8] == 0) {
+ updateNumber(1, 8, 256)
+ } else if (pins.digitalReadPin(DigitalPin.P10) == 0 && columns[8] == 1) {
+ updateNumber(0, 8, -256)
+ }
+ }
+})
diff --git a/pxt.json b/pxt.json
new file mode 100644
index 0000000..0792477
--- /dev/null
+++ b/pxt.json
@@ -0,0 +1,22 @@
+{
+ "name": "Binary Box",
+ "description": "",
+ "dependencies": {
+ "core": "*",
+ "radio": "*",
+ "microphone": "*"
+ },
+ "files": [
+ "main.blocks",
+ "main.ts",
+ "README.md",
+ "main.py"
+ ],
+ "testFiles": [
+ "test.ts"
+ ],
+ "supportedTargets": [
+ "microbit"
+ ],
+ "preferredEditor": "blocksprj"
+}
diff --git a/test.ts b/test.ts
new file mode 100644
index 0000000..7bf240c
--- /dev/null
+++ b/test.ts
@@ -0,0 +1 @@
+// tests go here; this will not be compiled when this package is used as an extension.
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..a2079ff
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "noImplicitAny": true,
+ "outDir": "built",
+ "rootDir": "."
+ },
+ "exclude": ["pxt_modules/**/*test.ts"]
+}