Created
June 2, 2022 16:51
-
-
Save tgb20/cc9e4c145f64bbb09836c2b6fc7f7b3d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const iconURI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0yODUgMjMzIDQwIDQwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IC0yODUgMjMzIDQwIDQwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojRTZFN0U4O3N0cm9rZTojN0M4N0E1O3N0cm9rZS13aWR0aDowLjg2MztzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOiNFNkU3RTg7c3Ryb2tlOiM3Qzg3QTU7c3Ryb2tlLXdpZHRoOjAuODYzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDt9DQoJLnN0MntmaWxsOm5vbmU7c3Ryb2tlOiM3Qzg3QTU7c3Ryb2tlLXdpZHRoOjAuODYzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNzAuNCwyNDcuMWgtMS4zYy0wLjQsMC0wLjctMC4zLTAuNy0wLjd2LTAuN2MwLTAuMiwwLjItMC40LDAuNC0wLjRoMS45YzAuMiwwLDAuNCwwLjIsMC40LDAuNHYwLjcNCgkJQy0yNjkuNywyNDYuOC0yNzAsMjQ3LjEtMjcwLjQsMjQ3LjF6Ii8+DQoJPGVsbGlwc2UgY2xhc3M9InN0MCIgY3g9Ii0yNzEiIGN5PSIyNDUuNSIgcng9IjEuMyIgcnk9IjAuMyIvPg0KPC9nPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjUuNywyNDcuMWgtMS4zYy0wLjQsMC0wLjctMC4zLTAuNy0wLjd2LTAuN2MwLTAuMiwwLjItMC40LDAuNC0wLjRoMS45YzAuMiwwLDAuNCwwLjIsMC40LDAuNHYwLjcNCgkJQy0yNjUsMjQ2LjgtMjY1LjMsMjQ3LjEtMjY1LjcsMjQ3LjF6Ii8+DQoJPGVsbGlwc2UgY2xhc3M9InN0MCIgY3g9Ii0yNjYuMyIgY3k9IjI0NS41IiByeD0iMS4zIiByeT0iMC4zIi8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI1OS4xLDI1Mi43aC0xLjNjLTAuNCwwLTAuNy0wLjMtMC43LTAuN3YtMC43YzAtMC4yLDAuMi0wLjQsMC40LTAuNGgxLjljMC4yLDAsMC40LDAuMiwwLjQsMC40djAuNw0KCQlDLTI1OC40LDI1Mi40LTI1OC43LDI1Mi43LTI1OS4xLDI1Mi43eiIvPg0KCTxlbGxpcHNlIGNsYXNzPSJzdDAiIGN4PSItMjU5LjciIGN5PSIyNTEuMiIgcng9IjEuMyIgcnk9IjAuMyIvPg0KPC9nPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNTQuOSwyNTIuN2gtMS4zYy0wLjQsMC0wLjctMC4zLTAuNy0wLjd2LTAuN2MwLTAuMiwwLjItMC40LDAuNC0wLjRoMS45YzAuMiwwLDAuNCwwLjIsMC40LDAuNHYwLjcNCgkJQy0yNTQuMiwyNTIuNC0yNTQuNSwyNTIuNy0yNTQuOSwyNTIuN3oiLz4NCgk8ZWxsaXBzZSBjbGFzcz0ic3QwIiBjeD0iLTI1NS41IiBjeT0iMjUxLjIiIHJ4PSIxLjMiIHJ5PSIwLjMiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0tMjUyLjYsMjUxLjIiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNLTI1My41LDI2MC42aC0yNGMtMC41LDAtMC45LTAuNC0wLjktMC45VjI1MmMwLTIuOSwyLjQtNS4zLDUuMy01LjNoOC44YzAuOCwwLDEuNSwwLjcsMS41LDEuNWwwLDIuNQ0KCQljMCwwLjgsMC43LDEuNSwxLjUsMS41aDguMWMwLjMsMCwwLjUsMC4yLDAuNSwwLjV2Ni45Qy0yNTIuNiwyNjAuMi0yNTMsMjYwLjYtMjUzLjUsMjYwLjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTS0yNTAsMjUxLjIiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNLTI1MS43LDI1MS4yIi8+DQo8L2c+DQo8cG9seWxpbmUgY2xhc3M9InN0MiIgcG9pbnRzPSItMjc4LjIsMjUzLjcgLTI3Mi43LDI1My43IC0yNjcuNywyNTguMSAtMjUyLjcsMjU4LjEgIi8+DQo8L3N2Zz4NCg=='; | |
| class Wedo1 { | |
| getInfo(){ | |
| return { | |
| "id": "wedo1", | |
| "name": "WeDo 1.0", | |
| "blockIconURI": iconURI, | |
| "blocks": [ | |
| { | |
| "opcode": "turnOnTime", | |
| "blockType": "command", | |
| "text": "turn [powered] on for [num] secs", | |
| "arguments": { | |
| "powered": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "POWERED", | |
| "defaultValue": "motor" | |
| }, | |
| "num": { | |
| "type": "number", | |
| "defaultValue": "1" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "turnOn", | |
| "blockType": "command", | |
| "text": "turn [powered] on", | |
| "arguments": { | |
| "powered": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "POWERED", | |
| "defaultValue": "motor" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "turnOff", | |
| "blockType": "command", | |
| "text": "turn [powered] off", | |
| "arguments": { | |
| "powered": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "POWERED", | |
| "defaultValue": "motor" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "setPower", | |
| "blockType": "command", | |
| "text": "set [powered] power to [num]", | |
| "arguments": { | |
| "powered": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "POWERED", | |
| "defaultValue": "motor" | |
| }, | |
| "num": { | |
| "type": "number", | |
| "defaultValue": "100" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "setDirection", | |
| "blockType": "command", | |
| "text": "set [powered] direction to [direction]", | |
| "arguments": { | |
| "powered": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "POWERED", | |
| "defaultValue": "motor" | |
| }, | |
| "direction": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "DIRECTION", | |
| "defaultValue": "this way" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "whenDistance", | |
| "blockType": "hat", | |
| "text": "when distance [op] [num]", | |
| "arguments": { | |
| "op": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "OP", | |
| "defaultValue": "<" | |
| }, | |
| "num": { | |
| "type": "number", | |
| "defaultValue": "20" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "whenTilt", | |
| "blockType": "hat", | |
| "text": "when tilted [tilt]", | |
| "arguments": { | |
| "tilt": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "TILT", | |
| "defaultValue": "any" | |
| } | |
| } | |
| }, | |
| { | |
| "opcode": "getDistance", | |
| "blockType": "reporter", | |
| "text": "distance", | |
| "arguments": { | |
| } | |
| }, | |
| { | |
| "opcode": "getTilt", | |
| "blockType": "Boolean", | |
| "text": "tilted [tilt]?", | |
| "arguments": { | |
| "tilt": { | |
| "type": "ArgumentType.STRING", | |
| "menu": "TILT", | |
| "defaultValue": "any" | |
| } | |
| } | |
| } | |
| ], | |
| "menus": { | |
| OP: ['<', '>'], | |
| TILT: ['up', 'down', 'left', 'right', 'any'], | |
| POWERED: ['motor', 'motor A', 'motor B'], | |
| DIRECTION: ['this way', 'that way', 'reverse'] | |
| } | |
| } | |
| } | |
| async getDistance({}) { | |
| return await this.fetchDistance() | |
| } | |
| fetchDistance(){ | |
| return new Promise((resolve, reject) => { | |
| const socket = new WebSocket('ws://localhost:8080/'); | |
| socket.addEventListener('open', function (event) { | |
| socket.send(JSON.stringify({type: "sensor", sensor: "distance"})); | |
| }); | |
| socket.addEventListener('message', function (event) { | |
| var j = JSON.parse(event.data) | |
| socket.close(); | |
| var fixedValue = Math.floor(j.value * 100 / 46) | |
| resolve(fixedValue) | |
| }); | |
| }) | |
| } | |
| async getTilt({tilt}){ | |
| return await this.fetchTilt(tilt); | |
| } | |
| fetchTilt(tilt){ | |
| return new Promise((resolve, reject) => { | |
| resolve(true) | |
| }) | |
| } | |
| whenDistance({op, num}){ | |
| return false; | |
| } | |
| whenTilt({tilt}){ | |
| return "up"; | |
| } | |
| turnOnTime({powered, num}){ | |
| this.turnOn({powered}) | |
| setTimeout(() => { | |
| this.turnOff({powered}) | |
| }, num * 1000) | |
| } | |
| turnOn({powered}){ | |
| const socket = new WebSocket('ws://localhost:8080/'); | |
| socket.addEventListener('open', function (event) { | |
| socket.send(JSON.stringify({type: "motor", change: "status", motor: powered, status: "on"})); | |
| socket.close() | |
| }); | |
| } | |
| turnOff({powered}){ | |
| const socket = new WebSocket('ws://localhost:8080/'); | |
| socket.addEventListener('open', function (event) { | |
| socket.send(JSON.stringify({type: "motor", change: "status", motor: powered, status: "off"})); | |
| socket.close() | |
| }); | |
| } | |
| setPower({powered, num}){ | |
| const socket = new WebSocket('ws://localhost:8080/'); | |
| socket.addEventListener('open', function (event) { | |
| socket.send(JSON.stringify({type: "motor", change: "power", motor: powered, power: num})); | |
| socket.close() | |
| }); | |
| } | |
| setDirection({powered, direction}){ | |
| const socket = new WebSocket('ws://localhost:8080/'); | |
| socket.addEventListener('open', function (event) { | |
| socket.send(JSON.stringify({type: "motor", change: "direction", motor: powered, direction: direction})); | |
| socket.close() | |
| }); | |
| } | |
| } | |
| Scratch.extensions.register(new Wedo1()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment