Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
83793fc668 | |||
47ee87fe72 | |||
374fa36548 | |||
358ef7e19f |
@ -14,7 +14,7 @@ function accelerate() {
|
|||||||
}
|
}
|
||||||
function update() {
|
function update() {
|
||||||
brick.clearScreen()
|
brick.clearScreen()
|
||||||
brick.showString("speed: " + speed, 1)
|
brick.printLine("speed: " + speed, 1)
|
||||||
motors.largeBC.setSpeed(speed)
|
motors.largeBC.setSpeed(speed)
|
||||||
}
|
}
|
||||||
sensors.touch2.onEvent(TouchSensorEvent.Pressed, function () {
|
sensors.touch2.onEvent(TouchSensorEvent.Pressed, function () {
|
||||||
|
@ -7,5 +7,5 @@ loops.forever(function () {
|
|||||||
})
|
})
|
||||||
motors.largeBC.setSpeed(-20);
|
motors.largeBC.setSpeed(-20);
|
||||||
sensors.ultrasonic4.pauseUntil(UltrasonicSensorEvent.ObjectNear);
|
sensors.ultrasonic4.pauseUntil(UltrasonicSensorEvent.ObjectNear);
|
||||||
motors.largeBC.stop();
|
motors.stopAllMotors();
|
||||||
```
|
```
|
||||||
|
@ -9,5 +9,5 @@ loops.forever(function () {
|
|||||||
})
|
})
|
||||||
motors.largeBC.setSpeed(-20);
|
motors.largeBC.setSpeed(-20);
|
||||||
sensors.ultrasonic4.pauseUntil(UltrasonicSensorEvent.ObjectNear);
|
sensors.ultrasonic4.pauseUntil(UltrasonicSensorEvent.ObjectNear);
|
||||||
motors.largeBC.stop();
|
motors.stopAllMotors();
|
||||||
```
|
```
|
||||||
|
@ -4,9 +4,10 @@
|
|||||||
let beep = false
|
let beep = false
|
||||||
beep = true
|
beep = true
|
||||||
control.runInBackground(function () {
|
control.runInBackground(function () {
|
||||||
motors.largeBC.setSpeed(-20)
|
motors.largeB.setSpeed(-20)
|
||||||
|
motors.largeC.setSpeed(-20)
|
||||||
sensors.ultrasonic4.pauseUntil(UltrasonicSensorEvent.ObjectNear)
|
sensors.ultrasonic4.pauseUntil(UltrasonicSensorEvent.ObjectNear)
|
||||||
motors.largeBC.stop()
|
motors.stopAllMotors()
|
||||||
beep = false
|
beep = false
|
||||||
})
|
})
|
||||||
control.runInBackground(function () {
|
control.runInBackground(function () {
|
||||||
|
109
docs/static/avatar.svg
vendored
109
docs/static/avatar.svg
vendored
@ -1,109 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1"
|
|
||||||
id="svg2" inkscape:version="0.91 r13725" sodipodi:docname="avatar.svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 32 32"
|
|
||||||
style="enable-background:new 0 0 32 32;" xml:space="preserve">
|
|
||||||
<style type="text/css">
|
|
||||||
.st0{fill:#303030;}
|
|
||||||
</style>
|
|
||||||
<sodipodi:namedview bordercolor="#666666" borderopacity="1" gridtolerance="10" guidetolerance="10" id="namedview15" inkscape:current-layer="svg2" inkscape:cx="16" inkscape:cy="16" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="661" inkscape:window-maximized="0" inkscape:window-width="997" inkscape:window-x="0" inkscape:window-y="0" inkscape:zoom="5.2149125" objecttolerance="10" pagecolor="#ffffff" showgrid="false">
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<g id="avatar_mf" transform="translate(-5304.979 8145.745)">
|
|
||||||
<path id="Path_180" class="st0" d="M5317.1-8125.6c0.2,0,0.3-0.1,0.5-0.1l2.9-0.6c1.3-0.3,2.5-0.5,3.8-0.8c0.5-0.1,1-0.2,1.5-0.3
|
|
||||||
c0.1,0,0.1,0,0.1-0.1c0-0.5,0-1-0.1-1.5c-0.1-0.6-0.2-1.1-0.3-1.7c-0.1-0.4-0.1-0.8-0.2-1.2c-0.1-0.7-0.2-1.4-0.3-2
|
|
||||||
c-0.1-0.6-0.2-1.1-0.3-1.7c0-0.2-0.2-0.4-0.4-0.4c0,0,0,0-0.1,0c-0.2,0-0.5,0.1-0.7,0.1c-0.5,0.1-1,0.1-1.5,0.2
|
|
||||||
c-0.5,0.1-1,0.1-1.6,0.2c-0.5,0.1-1,0.1-1.4,0.2c-0.2,0-0.3,0-0.5,0.1c-0.2,0-0.4,0.2-0.5,0.4c0,0.2-0.1,0.4-0.1,0.5
|
|
||||||
c0,0.4-0.1,0.8-0.1,1.2c-0.1,0.5-0.1,1-0.2,1.5c0,0.4-0.1,0.9-0.1,1.3l-0.1,1.3l-0.1,1.3c-0.1,0.5-0.1,1-0.2,1.5
|
|
||||||
C5317.1-8126,5317.1-8125.8,5317.1-8125.6z"/>
|
|
||||||
<path id="Path_181" class="st0" d="M5316.1-8140c0,0.6,0.1,1.2,0.1,1.8c0,0.4,0.2,0.8,0.6,1c0.3,0.2,0.7,0.3,1.1,0.3
|
|
||||||
c0.7,0.1,1.4,0.1,2.1,0c0.6,0,1.2-0.1,1.8-0.2c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.7,0.5-1.1c0-1.2,0-2.3-0.1-3.5
|
|
||||||
c0-0.3-0.1-0.6-0.3-0.8c-0.3-0.4-0.8-0.6-1.4-0.6c0,0,0,0-0.1,0c-0.2,0.1-0.4,0.1-0.6,0.1c-0.9,0-1.8,0.1-2.7,0.1
|
|
||||||
c-0.1,0-0.3,0-0.4,0c-0.4-0.1-0.8,0-1.2,0.2c-0.4,0.2-0.6,0.6-0.7,1c0,0.1,0,0.2,0,0.3C5316-8141.2,5316.1-8140.6,5316.1-8140
|
|
||||||
L5316.1-8140z"/>
|
|
||||||
<path id="Path_182" class="st0" d="M5312-8129.2c0,0.6,0,1.2,0,1.8c0,0.1,0,0.1,0.1,0.1c0.3,0,0.6,0.1,0.9,0.1c0.3,0,0.7,0,1,0
|
|
||||||
c0.1,0,0.2,0,0.3,0c0.1,0,0.1,0,0.1-0.1c0.1-0.4,0.2-0.8,0.2-1.2c0.1-0.5,0.2-1,0.3-1.4c0-0.1,0.1-0.1,0.1-0.1
|
|
||||||
c0.4-0.2,0.8-0.5,1.2-0.8c0.4-0.4,0.7-0.9,0.8-1.5c0.1-0.6,0-1.2-0.4-1.7c-0.2-0.3-0.6-0.4-0.9-0.3c-0.3,0.1-0.6,0.3-0.9,0.5
|
|
||||||
c-0.7,0.6-1.5,1.2-2.2,1.8c-0.3,0.2-0.5,0.5-0.6,0.8c0,0.2-0.1,0.4-0.1,0.6C5311.9-8130.2,5311.9-8129.7,5312-8129.2
|
|
||||||
C5311.9-8129.2,5312-8129.2,5312-8129.2z"/>
|
|
||||||
<path id="Path_183" class="st0" d="M5315.5-8124.7c0,0.2-0.1,0.5-0.1,0.7c-0.1,0.5-0.4,0.9-0.8,1.1c0,0,0,0,0,0
|
|
||||||
c-0.1,0-0.2,0.2-0.2,0.3c-0.4,1.4-0.9,2.7-1.3,4.1c0,0,0,0.1,0,0.1c0.8,1.1,1.6,2.2,2.4,3.3c0,0,0,0,0.1,0.1
|
|
||||||
c0.1-0.2,0.1-0.3,0.2-0.5c0.1-0.3,0.2-0.5,0.3-0.8c0,0,0-0.1,0-0.1c-0.2-0.3-0.5-0.7-0.7-1c0,0,0-0.1,0-0.2
|
|
||||||
c0.3-0.9,0.6-1.7,0.9-2.6c0,0,0-0.1,0.1-0.1c0.5-0.2,0.9-0.6,1.1-1.1c0.1-0.3,0.1-0.7,0.1-1.1c0-0.4-0.1-0.8-0.3-1.2
|
|
||||||
c-0.2-0.4-0.5-0.8-1-1C5315.9-8124.7,5315.7-8124.7,5315.5-8124.7z"/>
|
|
||||||
<path id="Path_184" class="st0" d="M5314.7-8134.2c0.1-0.1,0.2-0.1,0.3-0.2c0.3-0.2,0.7-0.3,1-0.3c0.4,0,0.7,0.2,0.8,0.6
|
|
||||||
c0.6,1.1,0.5,2.4-0.4,3.3c-0.4,0.4-0.8,0.7-1.3,1c0,0-0.1,0.1-0.1,0.1c-0.2,0.8-0.3,1.6-0.5,2.5c0,0,0,0.1,0,0.1
|
|
||||||
c0,0.2,0,0.2-0.2,0.2c-0.1,0-0.1,0-0.2,0c0,0.1,0,0.2,0,0.3c0,0,0,0,0.1,0.1l1.9,0.7c0.2,0.1,0.4,0.2,0.7,0.2c0-0.1,0-0.2,0-0.2
|
|
||||||
c0-0.3,0-0.6,0-0.8l0.2-1.5l0.2-1.5c0.1-0.5,0.1-1,0.2-1.5c0.1-0.5,0.1-1.1,0.2-1.6c0.1-0.5,0.1-1,0.2-1.5c0-0.2,0-0.4,0-0.6
|
|
||||||
c0-0.2-0.1-0.4-0.3-0.4c0,0,0,0,0,0c-0.1,0-0.1,0-0.2,0c-0.6-0.1-1.2-0.2-1.9-0.3c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.3,0.3
|
|
||||||
C5314.8-8135,5314.7-8134.6,5314.7-8134.2z"/>
|
|
||||||
<path id="Path_185" class="st0" d="M5324.5-8117.2c-0.2-0.7-0.5-1.3-0.7-2l-0.7,0.3c0,0-0.1,0-0.1,0c-0.1,0.1-0.2,0-0.2-0.1
|
|
||||||
c-0.1-0.3-0.2-0.5-0.3-0.8c-0.2-0.7-0.5-1.4-0.7-2.1c0,0,0-0.1,0-0.1c0,0,0,0.1-0.1,0.1c-0.1,0.2-0.3,0.3-0.5,0.5c0,0-0.1,0-0.1,0
|
|
||||||
c-0.3,0.1-0.6,0.1-0.8,0.2c0,0-0.1,0-0.1,0c0,0.2-0.1,0.3-0.1,0.5c0.6,1.5,1.1,3.1,1.7,4.6c0,0,0,0,0,0.1
|
|
||||||
C5322.7-8116.3,5323.6-8116.7,5324.5-8117.2z"/>
|
|
||||||
<path id="Path_186" class="st0" d="M5325.4-8123.1c-0.7,0.2-1.3,0.3-2,0.5c-0.5,0.1-0.9,0.2-1.4,0.3c-0.1,0-0.2,0.1-0.1,0.2
|
|
||||||
c0,0,0,0,0,0.1c0.2,0.5,0.3,0.9,0.5,1.4c0.2,0.5,0.4,1.1,0.6,1.6c0,0,0,0,0,0c0.1-0.1,0.2-0.1,0.3-0.2c0.2-0.1,0.3-0.2,0.5-0.2
|
|
||||||
c0.2-0.1,0.4-0.1,0.6-0.2c0.7-0.2,1.5-0.4,2.2-0.6c0,0,0,0,0.1,0C5326.3-8121.1,5325.9-8122.1,5325.4-8123.1z"/>
|
|
||||||
<path id="Path_187" class="st0" d="M5320.7-8124.4c-0.4,0.1-0.8,0.2-1.2,0.3c-0.6,0.1-1.3,0.3-1.9,0.4c0,0-0.1,0-0.1,0
|
|
||||||
c-0.1,0-0.2-0.1-0.3-0.1c0,0,0,0.1,0,0.1c0.3,0.7,0.4,1.5,0.3,2.2c-0.1,0.4-0.3,0.8-0.5,1.1c0,0,0,0-0.1,0.1
|
|
||||||
c0.2-0.1,0.4-0.1,0.6-0.1l2.5-0.6c0.5-0.1,0.9-0.6,1-1.1c0.1-0.5,0-1-0.1-1.5C5320.8-8124,5320.8-8124.2,5320.7-8124.4z"/>
|
|
||||||
<path id="Path_188" class="st0" d="M5325.5-8127c-2.7,0.5-5.3,1.1-7.9,1.6c0,0.5,0,0.9,0.1,1.4c0.1,0,0.2,0,0.3-0.1
|
|
||||||
c1.2-0.3,2.3-0.5,3.5-0.8c1.2-0.3,2.4-0.5,3.6-0.8c0.1,0,0.3-0.1,0.4-0.1c0,0,0.1,0,0.1-0.1
|
|
||||||
C5325.6-8126.2,5325.5-8126.6,5325.5-8127z"/>
|
|
||||||
<path id="Path_189" class="st0" d="M5328.6-8118.4c-0.2-0.4-0.3-0.7-0.5-1.1c-0.1-0.2-0.2-0.5-0.3-0.7c0-0.1,0-0.1-0.1,0
|
|
||||||
c-1.2,0.3-2.4,0.6-3.6,1c0,0,0,0-0.1,0c0.2,0.7,0.5,1.3,0.7,2C5326-8117.6,5327.3-8118,5328.6-8118.4z"/>
|
|
||||||
<path id="Path_190" class="st0" d="M5319.9-8120.9l-0.6,0.1c-1,0.2-2,0.5-3,0.7c-0.1,0-0.1,0.1-0.1,0.1c-0.3,0.7-0.5,1.5-0.8,2.2
|
|
||||||
c0,0,0,0,0,0.1c0.2,0,0.4-0.1,0.5-0.1c1-0.3,2-0.5,3.1-0.8c0.1,0,0.2-0.1,0.3-0.2C5319.5-8119.5,5319.7-8120.2,5319.9-8120.9z"/>
|
|
||||||
<path id="Path_191" class="st0" d="M5325.1-8125.4c-1.1,0.2-2.2,0.5-3.3,0.7c0.3,0.7,0.4,1.4,0.3,2.2c0.2,0,0.4-0.1,0.5-0.1
|
|
||||||
c0.9-0.2,1.8-0.4,2.7-0.6c0.1,0,0.1,0,0.1-0.1c0.1-0.4,0-0.9-0.1-1.3C5325.3-8124.9,5325.2-8125.1,5325.1-8125.4
|
|
||||||
C5325.1-8125.3,5325.1-8125.4,5325.1-8125.4z"/>
|
|
||||||
<path id="Path_192" class="st0" d="M5325.6-8132c0.2,0,0.4,0,0.5,0c0.2,0,0.4,0,0.6,0c0.3,0,0.6-0.2,0.8-0.4c0.3-0.4,0.7-0.8,1-1.2
|
|
||||||
c-0.1-0.1-0.1-0.1-0.1-0.2c0,0,0,0-0.1,0c-0.7-0.1-1.3-0.5-1.4-1.2c-0.1-0.2-0.1-0.4-0.1-0.6c-0.2,0.1-0.3,0.3-0.5,0.4
|
|
||||||
c-0.1,0.1-0.2,0.1-0.3,0.2c0,0-0.1,0.1-0.2,0c-0.2,0-0.5-0.1-0.7-0.1c0,0,0,0-0.1,0C5325.3-8134.1,5325.4-8133.1,5325.6-8132z"/>
|
|
||||||
<path id="Path_193" class="st0" d="M5328.4-8134.2c0.2-0.3,0.5-0.5,0.8-0.7c0.4-0.4,0.6-0.8,0.7-1.4c0-0.1,0-0.2-0.1-0.3
|
|
||||||
c-0.3-0.5-0.7-1.1-1-1.6c0-0.1-0.1-0.1-0.1,0c-0.4,0.2-0.8,0.5-1.1,0.8c-0.2,0.2-0.4,0.4-0.6,0.6c-0.1,0.1-0.1,0.3,0,0.4
|
|
||||||
c0.5,0.7,1,1.5,1.4,2.2C5328.4-8134.2,5328.4-8134.2,5328.4-8134.2z"/>
|
|
||||||
<path id="Path_194" class="st0" d="M5314.3-8126.1c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.1-0.1-0.1-0.2c0-0.1,0-0.3,0-0.4h-0.1
|
|
||||||
c-0.6,0-1.2-0.1-1.7-0.2c0,0-0.1,0-0.1,0c-0.4,0.2-0.7,0.4-1,0.8c-0.4,0.6-0.4,1.4,0.1,1.9c0.2,0.2,0.4,0.4,0.6,0.6
|
|
||||||
c0.1,0.1,0.2,0.2,0.3,0.2c-0.2-0.6,0-1.3,0.5-1.8C5313-8125.9,5313.6-8126.2,5314.3-8126.1z"/>
|
|
||||||
<path id="Path_195" class="st0" d="M5315.7-8114.9c0.5-0.1,0.9-0.3,1.4-0.4c0.8-0.2,1.6-0.4,2.4-0.7c0.1,0,0.1,0,0.1-0.1
|
|
||||||
c0.1-0.4,0.2-0.7,0.4-1.1c0,0,0,0,0-0.1c-0.1,0-0.2,0-0.3,0.1c-1.2,0.3-2.3,0.6-3.5,1c-0.1,0-0.1,0.1-0.1,0.1
|
|
||||||
c-0.1,0.4-0.3,0.7-0.4,1.1C5315.7-8115,5315.7-8115,5315.7-8114.9z"/>
|
|
||||||
<path id="Path_196" class="st0" d="M5315.4-8117.4c0.2,0.3,0.4,0.6,0.6,0.9c0,0,0.1,0,0.1,0c1-0.3,1.9-0.5,2.9-0.8
|
|
||||||
c0.3-0.1,0.6-0.2,0.9-0.2c-0.1-0.1-0.1-0.2-0.2-0.2c-0.2-0.2-0.3-0.4-0.5-0.6c0,0-0.1-0.1-0.1,0c-0.9,0.3-1.9,0.5-2.8,0.8
|
|
||||||
C5316-8117.5,5315.7-8117.5,5315.4-8117.4z"/>
|
|
||||||
<path id="Path_197" class="st0" d="M5321.3-8143.6c0-0.3,0-0.7,0-1c0,0-0.1,0-0.1,0c-0.7,0-1.5,0-2.2,0.1c-0.4,0-0.7,0-1.1,0.1
|
|
||||||
c-0.1,0-0.1,0-0.1,0.1c0,0.3,0,0.6,0,0.8c0,0,0,0.1,0.1,0.1c0.4,0,0.8,0,1.1,0c0.5,0,1.1,0,1.6-0.1
|
|
||||||
C5320.9-8143.5,5321.1-8143.6,5321.3-8143.6z"/>
|
|
||||||
<path id="Path_198" class="st0" d="M5329.2-8134.3c0.1,0,0.2,0,0.2-0.1c0.4-0.2,0.8-0.4,1.1-0.7c0.3-0.2,0.4-0.5,0.6-0.8
|
|
||||||
c0.1-0.3,0.1-0.6-0.1-0.9c-0.4-0.5-0.7-1-1.1-1.6c0,0,0,0-0.1-0.1c-0.2,0.2-0.4,0.4-0.6,0.6c0,0,0,0,0,0c0,0,0,0.1,0,0.1
|
|
||||||
c0.2,0.4,0.5,0.7,0.7,1c0.1,0.2,0.2,0.4,0.1,0.6c0,0.5-0.1,0.9-0.4,1.3c-0.1,0.1-0.2,0.2-0.3,0.3
|
|
||||||
C5329.4-8134.5,5329.3-8134.4,5329.2-8134.3C5329.2-8134.3,5329.2-8134.3,5329.2-8134.3z"/>
|
|
||||||
<path id="Path_199" class="st0" d="M5317.5-8136.7c0,0.2,0,0.3,0,0.5c0,0,0,0.1,0.1,0.1c0.2,0,0.3,0.1,0.5,0.1c0.7,0.1,1.4,0.1,2,0
|
|
||||||
c0.4,0,0.8-0.1,1.2-0.1c0.2,0,0.5-0.1,0.7-0.1c0.1,0,0.1,0,0.1-0.1c0-0.2,0-0.3,0-0.5C5320.5-8136.6,5319-8136.5,5317.5-8136.7z"/>
|
|
||||||
<path id="Path_200" class="st0" d="M5312.5-8123.2c0.1-0.4,0.1-0.8,0.2-1.2c0.1-0.6,0.6-1,1.2-1c0.3,0,0.5,0.1,0.7,0.3
|
|
||||||
c0.2,0.2,0.2,0.4,0.2,0.7c-0.1,0.3-0.2,0.6-0.2,0.9c0,0.1-0.1,0.2-0.1,0.4c0,0,0,0,0,0c0.1-0.1,0.2-0.2,0.3-0.3
|
|
||||||
c0.3-0.4,0.4-0.9,0.4-1.4c0-0.6-0.4-1-0.9-1.1c-0.1,0-0.1,0-0.2,0c-0.5,0-1,0.3-1.4,0.7c-0.3,0.3-0.4,0.6-0.5,1
|
|
||||||
c-0.1,0.3,0,0.7,0.2,1C5312.5-8123.2,5312.5-8123.2,5312.5-8123.2z"/>
|
|
||||||
<path id="Path_201" class="st0" d="M5314.3-8123.2c0.1-0.5,0.3-0.9,0.4-1.4c0.1-0.2,0-0.4-0.2-0.5c-0.4-0.2-0.9-0.1-1.2,0.2
|
|
||||||
c0,0,0,0,0,0.1c0,0.2,0,0.4,0.1,0.6c0,0.1,0.1,0.2,0.2,0.3C5313.7-8123.6,5314-8123.4,5314.3-8123.2
|
|
||||||
C5314.2-8123.2,5314.3-8123.2,5314.3-8123.2z"/>
|
|
||||||
<path id="Path_202" class="st0" d="M5317.4-8124.1c0-0.4,0-0.9-0.1-1.3c-0.1,0-0.1,0-0.2,0c-0.1,0-0.2,0-0.3,0
|
|
||||||
c-0.7-0.3-1.4-0.5-2.1-0.8c0,0,0,0,0,0c0.1,0.1,0.1,0.1,0.2,0.2c0.3,0.2,0.5,0.6,0.6,0.9c0,0,0,0,0,0c0.1,0,0.3,0,0.4,0.1
|
|
||||||
c0.3,0.1,0.6,0.3,0.9,0.5c0,0,0.1,0.1,0.1,0.1C5317.1-8124.2,5317.2-8124.1,5317.4-8124.1z"/>
|
|
||||||
<path id="Path_203" class="st0" d="M5321.6-8124.6c-0.2,0-0.4,0.1-0.6,0.1c0.1,0.2,0.1,0.4,0.2,0.6c0.1,0.4,0.2,0.8,0.1,1.2
|
|
||||||
c0,0.5-0.1,0.9-0.4,1.3c0,0,0,0,0,0c0.3,0,0.6-0.2,0.7-0.5c0.2-0.3,0.3-0.6,0.3-0.9C5321.9-8123.4,5321.8-8124,5321.6-8124.6z"/>
|
|
||||||
<path id="Path_204" class="st0" d="M5315.7-8135.8c0.2,0,0.3,0.1,0.5,0.1c0.5,0.1,1,0.2,1.5,0.2c0.2,0,0.5,0,0.7,0
|
|
||||||
c0.7-0.1,1.4-0.2,2.1-0.2c0.6-0.1,1.2-0.2,1.8-0.2c0.5-0.1,1.1-0.1,1.6-0.2l-1.5-0.2c0,0,0,0,0,0c0,0.2-0.1,0.3-0.2,0.3
|
|
||||||
c0,0,0,0,0,0c-0.3,0.1-0.5,0.1-0.8,0.2c-0.8,0.1-1.6,0.1-2.3,0.1c-0.4,0-0.9,0-1.3-0.1c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1,0
|
|
||||||
c-0.3,0-0.6,0.1-0.9,0.1L5315.7-8135.8L5315.7-8135.8z"/>
|
|
||||||
<path id="Path_205" class="st0" d="M5327.3-8117.7c-0.3,0.1-0.5,0.2-0.8,0.2c-0.6,0.2-1.1,0.3-1.7,0.5c0,0-0.1,0-0.1,0.1
|
|
||||||
c-0.5,0.2-1,0.5-1.5,0.7c0,0,0,0,0,0c0.3-0.1,0.5-0.1,0.8-0.2c0.5-0.2,1.1-0.3,1.6-0.5c0.1,0,0.2-0.1,0.2-0.1
|
|
||||||
C5326.2-8117.2,5326.8-8117.5,5327.3-8117.7C5327.3-8117.7,5327.3-8117.7,5327.3-8117.7C5327.3-8117.7,5327.3-8117.7,5327.3-8117.7
|
|
||||||
z"/>
|
|
||||||
<path id="Path_206" class="st0" d="M5327-8135.8c0,0.1,0,0.2,0,0.4c0.1,0.5,0.3,0.9,0.7,1.1c0.1,0.1,0.3,0.1,0.4,0.2l0,0
|
|
||||||
C5327.8-8134.7,5327.4-8135.2,5327-8135.8L5327-8135.8z"/>
|
|
||||||
<path id="Path_207" class="st0" d="M5329-8134.4c-0.1,0.1-0.2,0.2-0.3,0.4c0,0,0,0,0,0.1c0,0.1,0,0.1,0.1,0.1c0.1,0,0.2,0,0.3-0.1
|
|
||||||
c0.1,0,0.2-0.1,0.3-0.1c-0.1,0-0.1-0.1-0.2-0.1C5329-8134.2,5329-8134.3,5329-8134.4z"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 11 KiB |
@ -4,11 +4,10 @@
|
|||||||
import { deployCoreAsync, initAsync } from "./deploy";
|
import { deployCoreAsync, initAsync } from "./deploy";
|
||||||
import { FieldPorts } from "./field_ports";
|
import { FieldPorts } from "./field_ports";
|
||||||
import { FieldImages } from "./field_images";
|
import { FieldImages } from "./field_images";
|
||||||
import { FieldSpeed } from "./field_speed";
|
import {FieldSpeed} from "./field_speed";
|
||||||
import { FieldBrickButtons } from "./field_brickbuttons";
|
import { FieldBrickButtons } from "./field_brickbuttons";
|
||||||
import { FieldTurnRatio } from "./field_turnratio";
|
|
||||||
|
|
||||||
pxt.editor.initExtensionsAsync = function(opts: pxt.editor.ExtensionOptions): Promise<pxt.editor.ExtensionResult> {
|
pxt.editor.initExtensionsAsync = function (opts: pxt.editor.ExtensionOptions): Promise<pxt.editor.ExtensionResult> {
|
||||||
pxt.debug('loading pxt-ev3 target extensions...')
|
pxt.debug('loading pxt-ev3 target extensions...')
|
||||||
updateBlocklyShape();
|
updateBlocklyShape();
|
||||||
const res: pxt.editor.ExtensionResult = {
|
const res: pxt.editor.ExtensionResult = {
|
||||||
@ -24,9 +23,6 @@ pxt.editor.initExtensionsAsync = function(opts: pxt.editor.ExtensionOptions): Pr
|
|||||||
}, {
|
}, {
|
||||||
selector: "brickbuttons",
|
selector: "brickbuttons",
|
||||||
editor: FieldBrickButtons
|
editor: FieldBrickButtons
|
||||||
}, {
|
|
||||||
selector: "turnratio",
|
|
||||||
editor: FieldTurnRatio
|
|
||||||
}],
|
}],
|
||||||
deployCoreAsync
|
deployCoreAsync
|
||||||
};
|
};
|
||||||
|
@ -24,9 +24,6 @@ export class FieldPorts extends Blockly.FieldDropdown implements Blockly.FieldCu
|
|||||||
this.width_ = parseInt(options.width) || 300;
|
this.width_ = parseInt(options.width) || 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
trimOptions_() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a dropdown menu under the text.
|
* Create a dropdown menu under the text.
|
||||||
* @private
|
* @private
|
||||||
@ -45,8 +42,7 @@ export class FieldPorts extends Blockly.FieldDropdown implements Blockly.FieldCu
|
|||||||
// Accessibility properties
|
// Accessibility properties
|
||||||
contentDiv.setAttribute('role', 'menu');
|
contentDiv.setAttribute('role', 'menu');
|
||||||
contentDiv.setAttribute('aria-haspopup', 'true');
|
contentDiv.setAttribute('aria-haspopup', 'true');
|
||||||
let options = this.getOptions();
|
const options = this.getOptions();
|
||||||
options = options.sort();
|
|
||||||
for (let i = 0, option: any; option = options[i]; i++) {
|
for (let i = 0, option: any; option = options[i]; i++) {
|
||||||
let content = (options[i] as any)[0]; // Human-readable text or image.
|
let content = (options[i] as any)[0]; // Human-readable text or image.
|
||||||
const value = (options[i] as any)[1]; // Language-neutral value.
|
const value = (options[i] as any)[1]; // Language-neutral value.
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
/// <reference path="../node_modules/pxt-core/localtypings/blockly.d.ts"/>
|
|
||||||
/// <reference path="../node_modules/pxt-core/built/pxtsim.d.ts"/>
|
|
||||||
|
|
||||||
export interface FieldTurnRatioOptions extends Blockly.FieldCustomOptions {
|
|
||||||
}
|
|
||||||
|
|
||||||
export class FieldTurnRatio extends Blockly.FieldSlider implements Blockly.FieldCustom {
|
|
||||||
public isFieldCustom_ = true;
|
|
||||||
|
|
||||||
private params: any;
|
|
||||||
|
|
||||||
private path_: SVGPathElement;
|
|
||||||
private reporter_: SVGTextElement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class for a color wheel field.
|
|
||||||
* @param {number|string} value The initial content of the field.
|
|
||||||
* @param {Function=} opt_validator An optional function that is called
|
|
||||||
* to validate any constraints on what the user entered. Takes the new
|
|
||||||
* text as an argument and returns either the accepted text, a replacement
|
|
||||||
* text, or null to abort the change.
|
|
||||||
* @extends {Blockly.FieldNumber}
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
constructor(value_: any, params: FieldTurnRatioOptions, opt_validator?: Function) {
|
|
||||||
super(String(value_), '-100', '100', null, '10', 'TurnRatio', opt_validator);
|
|
||||||
this.params = params;
|
|
||||||
(this as any).sliderColor_ = '#a8aaa8';
|
|
||||||
}
|
|
||||||
|
|
||||||
static HALF = 80;
|
|
||||||
static HANDLE_RADIUS = 30;
|
|
||||||
static RADIUS = FieldTurnRatio.HALF - FieldTurnRatio.HANDLE_RADIUS - 1;
|
|
||||||
|
|
||||||
createLabelDom_(labelText: string) {
|
|
||||||
let labelContainer = document.createElement('div');
|
|
||||||
let svg = Blockly.utils.createSvgElement('svg', {
|
|
||||||
'xmlns': 'http://www.w3.org/2000/svg',
|
|
||||||
'xmlns:html': 'http://www.w3.org/1999/xhtml',
|
|
||||||
'xmlns:xlink': 'http://www.w3.org/1999/xlink',
|
|
||||||
'version': '1.1',
|
|
||||||
'height': (FieldTurnRatio.HALF + FieldTurnRatio.HANDLE_RADIUS + 10) + 'px',
|
|
||||||
'width': (FieldTurnRatio.HALF * 2) + 'px'
|
|
||||||
}, labelContainer);
|
|
||||||
let defs = Blockly.utils.createSvgElement('defs', {}, svg);
|
|
||||||
let marker = Blockly.utils.createSvgElement('marker', {
|
|
||||||
'id': 'head',
|
|
||||||
'orient': "auto",
|
|
||||||
'markerWidth': '2',
|
|
||||||
'markerHeight': '4',
|
|
||||||
'refX': '0.1', 'refY': '1.5'
|
|
||||||
}, defs);
|
|
||||||
let markerPath = Blockly.utils.createSvgElement('path', {
|
|
||||||
'd': 'M0,0 V3 L1.5,1.5 Z',
|
|
||||||
'fill': '#f12a21'
|
|
||||||
}, marker);
|
|
||||||
this.reporter_ = pxsim.svg.child(svg, "text", {
|
|
||||||
'x': FieldTurnRatio.HALF, 'y': 96,
|
|
||||||
'text-anchor': 'middle', 'alignment-baseline': 'middle',
|
|
||||||
'style': 'font-size: 50px',
|
|
||||||
'class': 'sim-text inverted number'
|
|
||||||
}) as SVGTextElement;
|
|
||||||
this.path_ = Blockly.utils.createSvgElement('path', {
|
|
||||||
'x1': FieldTurnRatio.HALF,
|
|
||||||
'y1': FieldTurnRatio.HALF,
|
|
||||||
'marker-end': 'url(#head)',
|
|
||||||
'style': 'fill: none; stroke: #f12a21; stroke-width: 10'
|
|
||||||
}, svg);
|
|
||||||
this.updateGraph_();
|
|
||||||
let readout = document.createElement('span');
|
|
||||||
readout.setAttribute('class', 'blocklyFieldSliderReadout');
|
|
||||||
return [labelContainer, readout];
|
|
||||||
};
|
|
||||||
|
|
||||||
updateGraph_() {
|
|
||||||
if (!this.path_) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let v = goog.math.clamp(parseFloat(this.getText()), -100, 100);
|
|
||||||
if (isNaN(v)) {
|
|
||||||
v = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const x = goog.math.clamp(parseFloat(this.getText()), -100, 100) / 100;
|
|
||||||
const theta = x * Math.PI / 2;
|
|
||||||
const cx = FieldTurnRatio.HALF;
|
|
||||||
const cy = FieldTurnRatio.HALF - 14;
|
|
||||||
const gamma = Math.PI - 2 * theta;
|
|
||||||
const r = FieldTurnRatio.RADIUS;
|
|
||||||
const alpha = 0.2 + Math.abs(x) * 0.5;
|
|
||||||
const x1 = 0;
|
|
||||||
const y1 = r * alpha;
|
|
||||||
const y2 = r * Math.sin(Math.PI / 2 - theta);
|
|
||||||
const x2 = r * Math.cos(Math.PI / 2 - theta);
|
|
||||||
const y3 = y2 - r * alpha * Math.cos(2 * theta);
|
|
||||||
const x3 = x2 - r * alpha * Math.sin(2 * theta);
|
|
||||||
|
|
||||||
|
|
||||||
const d = `M ${cx} ${cy} C ${cx} ${cy - y1} ${cx + x3} ${cy - y3} ${cx + x2} ${cy - y2}`;
|
|
||||||
this.path_.setAttribute('d', d);
|
|
||||||
|
|
||||||
this.reporter_.textContent = `${v}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
setReadout_(readout: Element, value: string) {
|
|
||||||
this.updateGraph_();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +1,12 @@
|
|||||||
{
|
{
|
||||||
"chassis.Chassis": "A differential drive robot",
|
"chassis.Chassis": "A differential drive robot",
|
||||||
"chassis.Chassis.drive": "Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s)\nusing a unicycle model.",
|
"chassis.Chassis.drive": "Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s)\nusing a unicycle model.",
|
||||||
|
"chassis.Chassis.driveFor": "Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s)\nusing a unicycle model.",
|
||||||
|
"chassis.Chassis.driveFor|param|rotationSpeed": "rotation of the robot around the center point, eg: 30",
|
||||||
|
"chassis.Chassis.driveFor|param|speed": "speed of the center point between motors, eg: 10",
|
||||||
|
"chassis.Chassis.driveFor|param|value": "the amount of movement, eg: 2",
|
||||||
"chassis.Chassis.drive|param|rotationSpeed": "rotation of the robot around the center point, eg: 30",
|
"chassis.Chassis.drive|param|rotationSpeed": "rotation of the robot around the center point, eg: 30",
|
||||||
"chassis.Chassis.drive|param|speed": "speed of the center point between motors, eg: 10",
|
"chassis.Chassis.drive|param|speed": "speed of the center point between motors, eg: 10",
|
||||||
"chassis.Chassis.drive|param|value": "the amount of movement, eg: 2",
|
|
||||||
"chassis.Chassis.setMotors": "Sets the motors used by the chassis, default is B+C",
|
"chassis.Chassis.setMotors": "Sets the motors used by the chassis, default is B+C",
|
||||||
"chassis.Chassis.setProperty": "Sets a property of the robot",
|
"chassis.Chassis.setProperty": "Sets a property of the robot",
|
||||||
"chassis.Chassis.setProperty|param|property": "the property to set",
|
"chassis.Chassis.setProperty|param|property": "the property to set",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"ChassisProperty.BaseLength|block": "base length (cm)",
|
"ChassisProperty.BaseLength|block": "base length (cm)",
|
||||||
"ChassisProperty.WheelRadius|block": "wheel radius (cm)",
|
"ChassisProperty.WheelRadius|block": "wheel radius (cm)",
|
||||||
|
"chassis.Chassis.driveFor|block": "drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s|for %value|%unit",
|
||||||
"chassis.Chassis.drive|block": "drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s",
|
"chassis.Chassis.drive|block": "drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s",
|
||||||
"chassis.Chassis.setMotors|block": "set %chassis|motors to %motors",
|
"chassis.Chassis.setMotors|block": "set %chassis|motors to %motors",
|
||||||
"chassis.Chassis.setProperty|block": "set %chassis|%property|to %value",
|
"chassis.Chassis.setProperty|block": "set %chassis|%property|to %value",
|
||||||
|
@ -29,13 +29,26 @@ namespace chassis {
|
|||||||
* using a unicycle model.
|
* using a unicycle model.
|
||||||
* @param speed speed of the center point between motors, eg: 10
|
* @param speed speed of the center point between motors, eg: 10
|
||||||
* @param rotationSpeed rotation of the robot around the center point, eg: 30
|
* @param rotationSpeed rotation of the robot around the center point, eg: 30
|
||||||
* @param value the amount of movement, eg: 2
|
|
||||||
* @param unit
|
|
||||||
*/
|
*/
|
||||||
//% blockId=motorDrive block="drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s"
|
//% blockId=motorDrive block="drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s"
|
||||||
//% inlineInputMode=inline
|
//% inlineInputMode=inline
|
||||||
|
//% weight=99 blockGap=8
|
||||||
|
drive(speed: number, rotationSpeed: number) {
|
||||||
|
this.driveFor(speed, rotationSpeed, 0, MoveUnit.Degrees);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s)
|
||||||
|
* using a unicycle model.
|
||||||
|
* @param speed speed of the center point between motors, eg: 10
|
||||||
|
* @param rotationSpeed rotation of the robot around the center point, eg: 30
|
||||||
|
* @param value the amount of movement, eg: 2
|
||||||
|
* @param unit
|
||||||
|
*/
|
||||||
|
//% blockId=motorDriveFor block="drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s|for %value|%unit"
|
||||||
|
//% inlineInputMode=inline
|
||||||
//% weight=95 blockGap=8
|
//% weight=95 blockGap=8
|
||||||
drive(speed: number, rotationSpeed: number, value: number = 0, unit: MoveUnit = MoveUnit.MilliSeconds) {
|
driveFor(speed: number, rotationSpeed: number, value: number, unit: MoveUnit) {
|
||||||
// speed is expressed in %
|
// speed is expressed in %
|
||||||
const R = this.wheelRadius; // cm
|
const R = this.wheelRadius; // cm
|
||||||
const L = this.baseLength; // cm
|
const L = this.baseLength; // cm
|
||||||
@ -52,7 +65,7 @@ namespace chassis {
|
|||||||
const sr = vr / maxw * 100; // %
|
const sr = vr / maxw * 100; // %
|
||||||
const sl = vl / maxw * 100; // %
|
const sl = vl / maxw * 100; // %
|
||||||
|
|
||||||
this.motors.tank(sr, sl, value, unit)
|
this.motors.tankFor(sr, sl, value, unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,8 +11,5 @@
|
|||||||
"sensors.ColorSensor.onLightChanged|param|handler": "the code to run when detected",
|
"sensors.ColorSensor.onLightChanged|param|handler": "the code to run when detected",
|
||||||
"sensors.ColorSensor.pauseForColor": "Waits for the given color to be detected",
|
"sensors.ColorSensor.pauseForColor": "Waits for the given color to be detected",
|
||||||
"sensors.ColorSensor.pauseForColor|param|color": "the color to detect",
|
"sensors.ColorSensor.pauseForColor|param|color": "the color to detect",
|
||||||
"sensors.ColorSensor.pauseForLight": "Waits for the given color to be detected",
|
"sensors.ColorSensor.pauseForLight": "Waits for the given color to be detected"
|
||||||
"sensors.ColorSensor.setThreshold": "Sets a threshold value",
|
|
||||||
"sensors.ColorSensor.setThreshold|param|condition": "the dark or bright light condition",
|
|
||||||
"sensors.ColorSensor.setThreshold|param|value": "the value threshold"
|
|
||||||
}
|
}
|
@ -19,13 +19,11 @@
|
|||||||
"sensors.ColorSensor.onLightChanged|block": "on %sensor|%mode|%condition",
|
"sensors.ColorSensor.onLightChanged|block": "on %sensor|%mode|%condition",
|
||||||
"sensors.ColorSensor.pauseForColor|block": "pause %sensor|for color %color",
|
"sensors.ColorSensor.pauseForColor|block": "pause %sensor|for color %color",
|
||||||
"sensors.ColorSensor.pauseForLight|block": "pause %sensor|for %mode|%condition",
|
"sensors.ColorSensor.pauseForLight|block": "pause %sensor|for %mode|%condition",
|
||||||
"sensors.ColorSensor.setThreshold|block": "set %sensor|%condition|to %value",
|
|
||||||
"sensors.color1|block": "color 1",
|
"sensors.color1|block": "color 1",
|
||||||
"sensors.color2|block": "color 2",
|
"sensors.color2|block": "color 2",
|
||||||
"sensors.color3|block": "color 3",
|
"sensors.color3|block": "color 3",
|
||||||
"sensors.color4|block": "color 4",
|
"sensors.color4|block": "color 4",
|
||||||
"sensors|block": "sensors",
|
"sensors|block": "sensors",
|
||||||
"{id:category}Sensors": "Sensors",
|
"{id:category}Sensors": "Sensors",
|
||||||
"{id:group}Color Sensor": "Color Sensor",
|
"{id:group}Color Sensor": "Color Sensor"
|
||||||
"{id:group}Threshold": "Threshold"
|
|
||||||
}
|
}
|
@ -152,7 +152,7 @@ namespace sensors {
|
|||||||
//% parts="colorsensor"
|
//% parts="colorsensor"
|
||||||
//% blockNamespace=sensors
|
//% blockNamespace=sensors
|
||||||
//% sensor.fieldEditor="ports"
|
//% sensor.fieldEditor="ports"
|
||||||
//% weight=98
|
//% weight=99
|
||||||
//% group="Color Sensor"
|
//% group="Color Sensor"
|
||||||
color(): ColorSensorColor {
|
color(): ColorSensorColor {
|
||||||
this.setMode(ColorSensorMode.Color)
|
this.setMode(ColorSensorMode.Color)
|
||||||
@ -221,21 +221,6 @@ namespace sensors {
|
|||||||
reflectedLight() {
|
reflectedLight() {
|
||||||
return this.light(LightIntensityMode.Reflected);
|
return this.light(LightIntensityMode.Reflected);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a threshold value
|
|
||||||
* @param condition the dark or bright light condition
|
|
||||||
* @param value the value threshold
|
|
||||||
*/
|
|
||||||
//% blockId=colorSetThreshold block="set %sensor|%condition|to %value"
|
|
||||||
//% group="Threshold" blockGap=8 weight=90
|
|
||||||
//% value.min=0 value.max=100
|
|
||||||
setThreshold(condition: LightCondition, value: number) {
|
|
||||||
if (condition == LightCondition.Dark)
|
|
||||||
this.thresholdDetector.setLowThreshold(value)
|
|
||||||
else
|
|
||||||
this.thresholdDetector.setHighThreshold(value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//% whenUsed block="color 3" weight=90 fixedInstance jres=icons.port3
|
//% whenUsed block="color 3" weight=90 fixedInstance jres=icons.port3
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"BrickLight": "Patterns for lights under the buttons.",
|
|
||||||
"ButtonEvent": "User interaction on buttons",
|
"ButtonEvent": "User interaction on buttons",
|
||||||
"Draw": "Drawing modes",
|
"Draw": "Drawing modes",
|
||||||
"Image.buffer": "Returns the underlaying Buffer object.",
|
"Image.buffer": "Returns the underlaying Buffer object.",
|
||||||
@ -7,6 +6,7 @@
|
|||||||
"Image.draw": "Draw an image on the screen.",
|
"Image.draw": "Draw an image on the screen.",
|
||||||
"Image.height": "Returns the height of an image.",
|
"Image.height": "Returns the height of an image.",
|
||||||
"Image.width": "Returns the width of an image.",
|
"Image.width": "Returns the width of an image.",
|
||||||
|
"LightsPattern": "Patterns for lights under the buttons.",
|
||||||
"MMap.getNumber": "Read a number in specified format from the buffer.",
|
"MMap.getNumber": "Read a number in specified format from the buffer.",
|
||||||
"MMap.ioctl": "Perform ioctl(2) on the underlaying file",
|
"MMap.ioctl": "Perform ioctl(2) on the underlaying file",
|
||||||
"MMap.length": "Returns the length of a Buffer object.",
|
"MMap.length": "Returns the length of a Buffer object.",
|
||||||
@ -28,9 +28,11 @@
|
|||||||
"brick.buttonRight": "Right button on the EV3 Brick.",
|
"brick.buttonRight": "Right button on the EV3 Brick.",
|
||||||
"brick.buttonUp": "Up button on the EV3 Brick.",
|
"brick.buttonUp": "Up button on the EV3 Brick.",
|
||||||
"brick.clearScreen": "Clears the screen",
|
"brick.clearScreen": "Clears the screen",
|
||||||
|
"brick.lightPattern": "Pattern block.",
|
||||||
|
"brick.lightPattern|param|pattern": "the lights pattern to use. eg: LightsPattern.Green",
|
||||||
"brick.printPorts": "Prints the port states on the screen",
|
"brick.printPorts": "Prints the port states on the screen",
|
||||||
"brick.setLight": "Set lights.",
|
"brick.setLight": "Set lights.",
|
||||||
"brick.setLight|param|pattern": "the lights pattern to use. eg: BrickLight.Orange",
|
"brick.setLight|param|pattern": "the lights pattern to use.",
|
||||||
"brick.showImage": "Shows an image on screen",
|
"brick.showImage": "Shows an image on screen",
|
||||||
"brick.showImage|param|image": "image to draw",
|
"brick.showImage|param|image": "image to draw",
|
||||||
"brick.showNumber": "Shows a number on the screen",
|
"brick.showNumber": "Shows a number on the screen",
|
||||||
@ -59,8 +61,6 @@
|
|||||||
"control.raiseEvent|param|value": "Component specific code indicating the cause of the event.",
|
"control.raiseEvent|param|value": "Component specific code indicating the cause of the event.",
|
||||||
"motors.Motor.angle": "Gets motor angle.",
|
"motors.Motor.angle": "Gets motor angle.",
|
||||||
"motors.Motor.clearCounts": "Clears the motor count",
|
"motors.Motor.clearCounts": "Clears the motor count",
|
||||||
"motors.Motor.setRegulated": "Indicates if the motor speed should be regulated. Default is true.",
|
|
||||||
"motors.Motor.setRegulated|param|value": "true for regulated motor",
|
|
||||||
"motors.Motor.speed": "Gets motor actual speed.",
|
"motors.Motor.speed": "Gets motor actual speed.",
|
||||||
"motors.Motor.tacho": "Gets motor tachometer count.",
|
"motors.Motor.tacho": "Gets motor tachometer count.",
|
||||||
"motors.Motor.toString": "Returns the status of the motor",
|
"motors.Motor.toString": "Returns the status of the motor",
|
||||||
@ -71,7 +71,7 @@
|
|||||||
"motors.MotorBase.setBrake": "Sets the automatic brake on or off when the motor is off",
|
"motors.MotorBase.setBrake": "Sets the automatic brake on or off when the motor is off",
|
||||||
"motors.MotorBase.setBrake|param|brake": "a value indicating if the motor should break when off",
|
"motors.MotorBase.setBrake|param|brake": "a value indicating if the motor should break when off",
|
||||||
"motors.MotorBase.setReversed": "Reverses the motor polarity",
|
"motors.MotorBase.setReversed": "Reverses the motor polarity",
|
||||||
"motors.MotorBase.setSpeed": "Sets the motor speed for limited time or distance.",
|
"motors.MotorBase.setSpeed": "Sets the motor speed for limited time or distance",
|
||||||
"motors.MotorBase.setSpeed|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50",
|
"motors.MotorBase.setSpeed|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50",
|
||||||
"motors.MotorBase.setSpeed|param|unit": "(optional) unit of the value",
|
"motors.MotorBase.setSpeed|param|unit": "(optional) unit of the value",
|
||||||
"motors.MotorBase.setSpeed|param|value": "(optional) measured distance or rotation",
|
"motors.MotorBase.setSpeed|param|value": "(optional) measured distance or rotation",
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"BrickLight.GreenFlash|block": "green flash",
|
|
||||||
"BrickLight.GreenPulse|block": "green pulse",
|
|
||||||
"BrickLight.Green|block": "green",
|
|
||||||
"BrickLight.Off|block": "off",
|
|
||||||
"BrickLight.OrangeFlash|block": "orange flash",
|
|
||||||
"BrickLight.OrangePulse|block": "orange pulse",
|
|
||||||
"BrickLight.Orange|block": "orange",
|
|
||||||
"BrickLight.RedFlash|block": "red flash",
|
|
||||||
"BrickLight.RedPulse|block": "red pulse",
|
|
||||||
"BrickLight.Red|block": "red",
|
|
||||||
"ButtonEvent.Click|block": "click",
|
"ButtonEvent.Click|block": "click",
|
||||||
"ButtonEvent.Down|block": "down",
|
"ButtonEvent.Down|block": "down",
|
||||||
"ButtonEvent.Up|block": "up",
|
"ButtonEvent.Up|block": "up",
|
||||||
|
"LightsPattern.GreenFlash|block": "Flashing Green",
|
||||||
|
"LightsPattern.GreenPulse|block": "Pulsing Green",
|
||||||
|
"LightsPattern.Green|block": "Green",
|
||||||
|
"LightsPattern.Off|block": "Off",
|
||||||
|
"LightsPattern.OrangeFlash|block": "Flashing Orange",
|
||||||
|
"LightsPattern.OrangePulse|block": "Pulsing Orange",
|
||||||
|
"LightsPattern.Orange|block": "Orange",
|
||||||
|
"LightsPattern.RedFlash|block": "Flashing Red",
|
||||||
|
"LightsPattern.RedPulse|block": "Pulsing Red",
|
||||||
|
"LightsPattern.Red|block": "Red",
|
||||||
"MoveUnit.Degrees|block": "degrees",
|
"MoveUnit.Degrees|block": "degrees",
|
||||||
"MoveUnit.MilliSeconds|block": "milliseconds",
|
"MoveUnit.MilliSeconds|block": "milliseconds",
|
||||||
"MoveUnit.Rotations|block": "rotations",
|
"MoveUnit.Rotations|block": "rotations",
|
||||||
@ -30,14 +30,15 @@
|
|||||||
"brick.Button.pauseUntil|block": "pause until %button|%event",
|
"brick.Button.pauseUntil|block": "pause until %button|%event",
|
||||||
"brick.Button.wasPressed|block": "%button|was pressed",
|
"brick.Button.wasPressed|block": "%button|was pressed",
|
||||||
"brick.batteryLevel|block": "battery level",
|
"brick.batteryLevel|block": "battery level",
|
||||||
"brick.buttonDown|block": "button down",
|
"brick.buttonDown|block": "down",
|
||||||
"brick.buttonEnter|block": "button enter",
|
"brick.buttonEnter|block": "enter",
|
||||||
"brick.buttonLeft|block": "button left",
|
"brick.buttonLeft|block": "left",
|
||||||
"brick.buttonRight|block": "button right",
|
"brick.buttonRight|block": "right",
|
||||||
"brick.buttonUp|block": "button up",
|
"brick.buttonUp|block": "up",
|
||||||
"brick.clearScreen|block": "clear screen",
|
"brick.clearScreen|block": "clear screen",
|
||||||
|
"brick.lightPattern|block": "%pattern",
|
||||||
"brick.printPorts|block": "print ports",
|
"brick.printPorts|block": "print ports",
|
||||||
"brick.setLight|block": "set light to %pattern",
|
"brick.setLight|block": "set light to %pattern=led_pattern",
|
||||||
"brick.showImage|block": "show image %image=screen_image_picker",
|
"brick.showImage|block": "show image %image=screen_image_picker",
|
||||||
"brick.showNumber|block": "show number %name|at line %line",
|
"brick.showNumber|block": "show number %name|at line %line",
|
||||||
"brick.showString|block": "show string %text|at line %line",
|
"brick.showString|block": "show string %text|at line %line",
|
||||||
@ -51,16 +52,13 @@
|
|||||||
"control|block": "control",
|
"control|block": "control",
|
||||||
"motors.Motor.angle|block": "%motor|angle",
|
"motors.Motor.angle|block": "%motor|angle",
|
||||||
"motors.Motor.clearCounts|block": "%motor|clear counts",
|
"motors.Motor.clearCounts|block": "%motor|clear counts",
|
||||||
"motors.Motor.setRegulated|block": "set %motor|regulated %value",
|
|
||||||
"motors.Motor.speed|block": "%motor|speed",
|
"motors.Motor.speed|block": "%motor|speed",
|
||||||
"motors.Motor.tacho|block": "%motor|tacho",
|
"motors.Motor.tacho|block": "%motor|tacho",
|
||||||
"motors.MotorBase.pauseUntilReady|block": "%motor|pause until ready",
|
"motors.MotorBase.pauseUntilReady|block": "%motor|pause until ready",
|
||||||
"motors.MotorBase.reset|block": "%motors|reset",
|
|
||||||
"motors.MotorBase.setBrake|block": "set %motor|brake %brake",
|
"motors.MotorBase.setBrake|block": "set %motor|brake %brake",
|
||||||
"motors.MotorBase.setReversed|block": "set %motor|reversed %reversed",
|
"motors.MotorBase.setReversed|block": "set %motor|reversed %reversed",
|
||||||
"motors.MotorBase.setSpeed|block": "set %motor|speed to %speed=motorSpeedPicker|%",
|
"motors.MotorBase.setSpeed|block": "set %motor|speed to %speed=motorSpeedPicker|%",
|
||||||
"motors.MotorBase.stop|block": "%motors|stop",
|
"motors.SynchedMotorPair.steer|block": "steer %chassis|turn ratio %turnRatio|speed %speed=motorSpeedPicker|%",
|
||||||
"motors.SynchedMotorPair.steer|block": "steer %chassis|turn ratio %turnRatio=motorTurnRatioPicker|speed %speed=motorSpeedPicker|%",
|
|
||||||
"motors.SynchedMotorPair.tank|block": "tank %motors|%speedLeft=motorSpeedPicker|%|%speedRight=motorSpeedPicker|%",
|
"motors.SynchedMotorPair.tank|block": "tank %motors|%speedLeft=motorSpeedPicker|%|%speedRight=motorSpeedPicker|%",
|
||||||
"motors.largeAB|block": "large A+B",
|
"motors.largeAB|block": "large A+B",
|
||||||
"motors.largeAD|block": "large A+D",
|
"motors.largeAD|block": "large A+D",
|
||||||
@ -92,6 +90,7 @@
|
|||||||
"{id:category}Serial": "Serial",
|
"{id:category}Serial": "Serial",
|
||||||
"{id:group}Buttons": "Buttons",
|
"{id:group}Buttons": "Buttons",
|
||||||
"{id:group}Counters": "Counters",
|
"{id:group}Counters": "Counters",
|
||||||
|
"{id:group}Light": "Light",
|
||||||
"{id:group}More": "More",
|
"{id:group}More": "More",
|
||||||
"{id:group}Move": "Move",
|
"{id:group}Move": "Move",
|
||||||
"{id:group}Screen": "Screen",
|
"{id:group}Screen": "Screen",
|
||||||
|
@ -2,35 +2,35 @@
|
|||||||
/**
|
/**
|
||||||
* Patterns for lights under the buttons.
|
* Patterns for lights under the buttons.
|
||||||
*/
|
*/
|
||||||
const enum BrickLight {
|
const enum LightsPattern {
|
||||||
//% block=off enumval=0
|
//% block=Off enumval=0
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
Off = 0,
|
Off = 0,
|
||||||
//% block=green enumval=1
|
//% block=Green enumval=1
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
Green = 1,
|
Green = 1,
|
||||||
//% block=red enumval=2
|
//% block=Red enumval=2
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
Red = 2,
|
Red = 2,
|
||||||
//% block=orange enumval=3
|
//% block=Orange enumval=3
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
Orange = 3,
|
Orange = 3,
|
||||||
//% block="green flash" enumval=4
|
//% block="Flashing Green" enumval=4
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
GreenFlash = 4,
|
GreenFlash = 4,
|
||||||
//% block="red flash" enumval=5
|
//% block="Flashing Red" enumval=5
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
RedFlash = 5,
|
RedFlash = 5,
|
||||||
//% block="orange flash" enumval=6
|
//% block="Flashing Orange" enumval=6
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
OrangeFlash = 6,
|
OrangeFlash = 6,
|
||||||
//% block="green pulse" enumval=7
|
//% block="Pulsing Green" enumval=7
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
GreenPulse = 7,
|
GreenPulse = 7,
|
||||||
//% block="red pulse" enumval=8
|
//% block="Pulsing Red" enumval=8
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
RedPulse = 8,
|
RedPulse = 8,
|
||||||
//% block="orange pulse" enumval=9
|
//% block="Pulsing Orange" enumval=9
|
||||||
//% blockIdentity=brick.lightPattern
|
//% blockIdentity=brick.lightPattern
|
||||||
OrangePulse = 9,
|
OrangePulse = 9,
|
||||||
}
|
}
|
||||||
@ -170,7 +170,6 @@ namespace brick {
|
|||||||
// this needs to be done in query(), which is run without the main JS execution mutex
|
// this needs to be done in query(), which is run without the main JS execution mutex
|
||||||
// otherwise, while(true){} will lock the device
|
// otherwise, while(true){} will lock the device
|
||||||
if (ret & DAL.BUTTON_ID_ESCAPE) {
|
if (ret & DAL.BUTTON_ID_ESCAPE) {
|
||||||
motors.stopAllMotors(); // ensuring that all motors are off
|
|
||||||
control.reset()
|
control.reset()
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
@ -204,31 +203,31 @@ namespace brick {
|
|||||||
/**
|
/**
|
||||||
* Enter button on the EV3 Brick.
|
* Enter button on the EV3 Brick.
|
||||||
*/
|
*/
|
||||||
//% whenUsed block="button enter" weight=95 fixedInstance
|
//% whenUsed block="enter" weight=95 fixedInstance
|
||||||
export const buttonEnter: Button = new DevButton(DAL.BUTTON_ID_ENTER)
|
export const buttonEnter: Button = new DevButton(DAL.BUTTON_ID_ENTER)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Left button on the EV3 Brick.
|
* Left button on the EV3 Brick.
|
||||||
*/
|
*/
|
||||||
//% whenUsed block="button left" weight=95 fixedInstance
|
//% whenUsed block="left" weight=95 fixedInstance
|
||||||
export const buttonLeft: Button = new DevButton(DAL.BUTTON_ID_LEFT)
|
export const buttonLeft: Button = new DevButton(DAL.BUTTON_ID_LEFT)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Right button on the EV3 Brick.
|
* Right button on the EV3 Brick.
|
||||||
*/
|
*/
|
||||||
//% whenUsed block="button right" weight=94 fixedInstance
|
//% whenUsed block="right" weight=94 fixedInstance
|
||||||
export const buttonRight: Button = new DevButton(DAL.BUTTON_ID_RIGHT)
|
export const buttonRight: Button = new DevButton(DAL.BUTTON_ID_RIGHT)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Up button on the EV3 Brick.
|
* Up button on the EV3 Brick.
|
||||||
*/
|
*/
|
||||||
//% whenUsed block="button up" weight=95 fixedInstance
|
//% whenUsed block="up" weight=95 fixedInstance
|
||||||
export const buttonUp: Button = new DevButton(DAL.BUTTON_ID_UP)
|
export const buttonUp: Button = new DevButton(DAL.BUTTON_ID_UP)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Down button on the EV3 Brick.
|
* Down button on the EV3 Brick.
|
||||||
*/
|
*/
|
||||||
//% whenUsed block="button down" weight=95 fixedInstance
|
//% whenUsed block="down" weight=95 fixedInstance
|
||||||
export const buttonDown: Button = new DevButton(DAL.BUTTON_ID_DOWN)
|
export const buttonDown: Button = new DevButton(DAL.BUTTON_ID_DOWN)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,21 +251,32 @@ namespace control {
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace brick {
|
namespace brick {
|
||||||
// the brick starts with the red color
|
let currPattern: LightsPattern
|
||||||
let currPattern: BrickLight = BrickLight.Red;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set lights.
|
* Set lights.
|
||||||
* @param pattern the lights pattern to use. eg: BrickLight.Orange
|
* @param pattern the lights pattern to use.
|
||||||
*/
|
*/
|
||||||
//% blockId=setLights block="set light to %pattern"
|
//% blockId=setLights block="set light to %pattern=led_pattern"
|
||||||
//% weight=100 group="Buttons"
|
//% weight=100 group="Buttons"
|
||||||
export function setLight(pattern: BrickLight): void {
|
export function setLight(pattern: number): void {
|
||||||
if (currPattern === pattern)
|
if (currPattern === pattern)
|
||||||
return
|
return
|
||||||
currPattern = pattern;
|
currPattern = pattern
|
||||||
const cmd = output.createBuffer(2)
|
let cmd = output.createBuffer(2)
|
||||||
cmd[0] = pattern + 48
|
cmd[0] = pattern + 48
|
||||||
brick.internal.getBtnsMM().write(cmd)
|
brick.internal.getBtnsMM().write(cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pattern block.
|
||||||
|
* @param pattern the lights pattern to use. eg: LightsPattern.Green
|
||||||
|
*/
|
||||||
|
//% blockId=led_pattern block="%pattern"
|
||||||
|
//% shim=TD_ID colorSecondary="#6e9a36" group="Light"
|
||||||
|
//% blockHidden=true useEnumVal=1 pattern.fieldOptions.decompileLiterals=1
|
||||||
|
export function lightPattern(pattern: LightsPattern): number {
|
||||||
|
return pattern;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,23 @@
|
|||||||
"progressWaterLevel3": "iVBORw0KGgoAAAANSUhEUgAAALIAAACAAQAAAACHQw5jAAABP0lEQVR42u2VMWrEMBBFRxGsGrNqXYT4CltuFV9lj5EqVlhImyPkKoKFbJcrrHKCKJ2XKFb+BGxsGBdbBRJ/mGHm+VtjJGNT/srQO6cG8cnFKXvKLVdHRFcjfXD3xDyybY9IFVJgbpgHtilEa5E8XJ1m/gJbVwJFXuwRrqSYa9hSCZt/A1/B1VLjqdMG1mu0bgeD4W5Te2r1A6YVJne0qfNP57fWU9AY5dYKd29tDgodldoTqagjGaoc3VAiiibQmlg1ApeIQIjuufDUq+C0Q1z1xaJFi/60iluZ28aJ3Jy9yPU5iFxlmesZvsry+kUz8/z/5qTuZKyizM2F3IYZfnDyuR7kc61fL+P4qYmq0mCZ+tuhfHZjPvhV8iKnMVejuZNXrjnK3O77aeo03hEzNGqyUcbNnJdfPjqLFv2+vgH+JtBJ4nz/SAAAAABJRU5ErkJggg==",
|
"progressWaterLevel3": "iVBORw0KGgoAAAANSUhEUgAAALIAAACAAQAAAACHQw5jAAABP0lEQVR42u2VMWrEMBBFRxGsGrNqXYT4CltuFV9lj5EqVlhImyPkKoKFbJcrrHKCKJ2XKFb+BGxsGBdbBRJ/mGHm+VtjJGNT/srQO6cG8cnFKXvKLVdHRFcjfXD3xDyybY9IFVJgbpgHtilEa5E8XJ1m/gJbVwJFXuwRrqSYa9hSCZt/A1/B1VLjqdMG1mu0bgeD4W5Te2r1A6YVJne0qfNP57fWU9AY5dYKd29tDgodldoTqagjGaoc3VAiiibQmlg1ApeIQIjuufDUq+C0Q1z1xaJFi/60iluZ28aJ3Jy9yPU5iFxlmesZvsry+kUz8/z/5qTuZKyizM2F3IYZfnDyuR7kc61fL+P4qYmq0mCZ+tuhfHZjPvhV8iKnMVejuZNXrjnK3O77aeo03hEzNGqyUcbNnJdfPjqLFv2+vgH+JtBJ4nz/SAAAAABJRU5ErkJggg==",
|
||||||
"systemAccept1": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAAQElEQVR42mM4wMDMsP//X4b6//+AWI6h/p8dQ/2fOob6H/8YKj/+Y6h4/I+hxvkfQx07UJ4fiOf/A6sF6QHqBQDsYh9jNdETHwAAAABJRU5ErkJggg==",
|
"systemAccept1": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAAQElEQVR42mM4wMDMsP//X4b6//+AWI6h/p8dQ/2fOob6H/8YKj/+Y6h4/I+hxvkfQx07UJ4fiOf/A6sF6QHqBQDsYh9jNdETHwAAAABJRU5ErkJggg==",
|
||||||
"systemAccept2": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAAQUlEQVR42mM4wMDMsP//X4YEBjYGB4ZHDA6MhxgcmJsYHNiZGNz4mBjcZZgYnPcwMTj+YGJw+ADECUxgtSA9QL0A+IIPxwiZFtwAAAAASUVORK5CYII=",
|
"systemAccept2": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAAQUlEQVR42mM4wMDMsP//X4YEBjYGB4ZHDA6MhxgcmJsYHNiZGNz4mBjcZZgYnPcwMTj+YGJw+ADECUxgtSA9QL0A+IIPxwiZFtwAAAAASUVORK5CYII=",
|
||||||
|
"systemAlert": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAVAQAAAAB0khOLAAAARUlEQVR42iXD0QmAIAAE0IvWCtqmMbLG8MtVhAZwjBvALyE85XzwoE/QO8f5WPsd0K+An6c3Jq8sThIUUVg9qfmDDRn7AD/WMAQEJ+pCAAAAAElFTkSuQmCC",
|
||||||
"systemBox": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAAGklEQVR42mM4wMDMsP//X4b6//9IwiA9QL0AlQYkzY8nCoAAAAAASUVORK5CYII=",
|
"systemBox": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAAGklEQVR42mM4wMDMsP//X4b6//9IwiA9QL0AlQYkzY8nCoAAAAAASUVORK5CYII=",
|
||||||
|
"systemBusy0": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAPAQAAAAAuP8mBAAAAMElEQVR42mPY/38Bg/x/BgbnHw4Msd8dGKLeA+k4IL0XSGdB6TioOFAepA6kHqgPAJCPFdTsOCPGAAAAAElFTkSuQmCC",
|
||||||
|
"systemBusy1": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAATAQAAAABnuWoHAAAAOUlEQVR42mNoYGKw/8EAJO9/A6GrYQyv1jF8jWP4tY/hbx3D730M3+4xvH/HcO8bw90yhlvbGGDqAdjhGYsKgwC5AAAAAElFTkSuQmCC",
|
||||||
"systemDecline1": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAANUlEQVR42mM4wMDMsP//X4b6//8Y6urtGOrt6hjq5/xjqD8JxI+hGMQGiQHlwGqAakF6gHoBybUeX0RcSJEAAAAASUVORK5CYII=",
|
"systemDecline1": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAANUlEQVR42mM4wMDMsP//X4b6//8Y6urtGOrt6hjq5/xjqD8JxI+hGMQGiQHlwGqAakF6gHoBybUeX0RcSJEAAAAASUVORK5CYII=",
|
||||||
"systemDecline2": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAANUlEQVR42mM4wMDMsP//X4YEBjYGx4ZDDA4HmxgckpkYHMyAWAaKQWyQGFAOpAakFqQHqBcAGz4QyzSHE/gAAAAASUVORK5CYII="
|
"systemDecline2": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAQAQAAAAAkX4I4AAAANUlEQVR42mM4wMDMsP//X4YEBjYGx4ZDDA4HmxgckpkYHMyAWAaKQWyQGFAOpAakFqQHqBcAGz4QyzSHE/gAAAAASUVORK5CYII=",
|
||||||
|
"systemDotEmpty": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfAQAAAAA31SuUAAAAYklEQVR42oWOMQ5AQBRE5yZ7FEfSKTmC25CQuILehkahkc12IvgjRqHUTPX/ew+MzsByNlhxGq7ochz90mFL9gmBFjCSGTxZoSUb1OTwTkquP/Md61cU8USWQzZ5VaCWp+oGeLZn9EklJaAAAAAASUVORK5CYII=",
|
||||||
|
"systemDotFull": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfAQAAAAA31SuUAAAAX0lEQVR42mP4/0H+H8P//sf/GP7V//nH8PeDfB3D7wPs+xi+MzDeY3jHAER3GBjKGG4wMJgx7GBgsGLYwMAgBSESGBh4CBAIxWC9YFPA5oFNBtsBtg1sL9gFYLeAXAUAPIwyHWLMTS8AAAAASUVORK5CYII=",
|
||||||
|
"systemEv3small": "iVBORw0KGgoAAAANSUhEUgAAACsAAAANAQAAAAAY06pGAAAAPUlEQVR42mNg4LFvYwACFEr+n32fPYiS5/8P5PLLyz8AUXwQqs8eSMn/b7H/D6IO1NmDBA/UgbTzP/gHpwBcwBWO2QYBDwAAAABJRU5ErkJggg==",
|
||||||
|
"systemPlay": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQAAAAA3iMLMAAAAMElEQVR42mP4Y8/wsZ/h+XOG858Z5v5k2POXwcaGoUYOhIAMIBcoCJQCKgAq+2MPAAFKFVmziLfGAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider0": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAEklEQVR42mM4YMBwfwPV0AEDAHmKKNims3dJAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider1": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAGklEQVR42mM4YMBwfwNFCAKuGjCc2sBwwAAAT7olG9TpXdAAAAAASUVORK5CYII=",
|
||||||
|
"systemSlider2": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAG0lEQVR42mM4YMBwfwM5CAJObWC4aoAgDxgAACpUJGftPg+WAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider3": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAG0lEQVR42mM4YMBwfwMJCAKuGjCc2oCFPGAAAPSIIz417p4OAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider4": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAG0lEQVR42mM4YMBwfwNhBAGnNjBcNcBHHjAAAMJ6IooqNLP/AAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider5": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAG0lEQVR42mM4YMBwfwNOBAFXDRhObSCKPGAAAHfbIWHuFKlNAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider6": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAG0lEQVR42mM4YMBwfwM6goBTGxiuGpBGHjAAADklIK1PooVQAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider7": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAG0lEQVR42mM4YMBwfwMUQcBVA4ZTG8gkDxgAANmVH4SOiUHMAAAAAElFTkSuQmCC",
|
||||||
|
"systemSlider8": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAbAQAAAABg3VNpAAAAFElEQVR42mM4YMBwagPDVSqRBwwASoohT92wVBIAAAAASUVORK5CYII="
|
||||||
}
|
}
|
@ -220,10 +220,41 @@ namespace images {
|
|||||||
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
export const systemAccept2 = screen.unpackPNG(hex``);
|
export const systemAccept2 = screen.unpackPNG(hex``);
|
||||||
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemAlert = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
export const systemBox = screen.unpackPNG(hex``);
|
export const systemBox = screen.unpackPNG(hex``);
|
||||||
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemBusy0 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemBusy1 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
export const systemDecline1 = screen.unpackPNG(hex``);
|
export const systemDecline1 = screen.unpackPNG(hex``);
|
||||||
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
export const systemDecline2 = screen.unpackPNG(hex``);
|
export const systemDecline2 = screen.unpackPNG(hex``);
|
||||||
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemDotEmpty = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemDotFull = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemEv3small = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemPlay = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider0 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider1 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider2 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider3 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider4 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider5 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider6 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider7 = screen.unpackPNG(hex``);
|
||||||
|
//% fixedInstance jres blockIdentity=brick.__imagePicker
|
||||||
|
export const systemSlider8 = screen.unpackPNG(hex``);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ namespace sensors.internal {
|
|||||||
init();
|
init();
|
||||||
return {
|
return {
|
||||||
temp: analogMM.getNumber(NumberFormat.Int16LE, AnalogOff.BatteryTemp),
|
temp: analogMM.getNumber(NumberFormat.Int16LE, AnalogOff.BatteryTemp),
|
||||||
current: Math.round(analogMM.getNumber(NumberFormat.Int16LE, AnalogOff.BatteryCurrent) / 10)
|
current: analogMM.getNumber(NumberFormat.Int16LE, AnalogOff.BatteryCurrent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ namespace sensors.internal {
|
|||||||
return getUartNumber(fmt, off, this._port)
|
return getUartNumber(fmt, off, this._port)
|
||||||
}
|
}
|
||||||
|
|
||||||
reset() {
|
protected reset() {
|
||||||
if (this.isActive()) uartReset(this._port);
|
if (this.isActive()) uartReset(this._port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,15 +11,4 @@ namespace motors {
|
|||||||
export function __speedPicker(speed: number): number {
|
export function __speedPicker(speed: number): number {
|
||||||
return speed;
|
return speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A turn ratio picker
|
|
||||||
* @param turnratio the turn ratio, eg: 0
|
|
||||||
*/
|
|
||||||
//% blockId=motorTurnRatioPicker block="%turnratio" shim=TD_ID
|
|
||||||
//% turnratio.fieldEditor="turnratio" colorSecondary="#FFFFFF"
|
|
||||||
//% weight=0 blockHidden=1 turnRatio.fieldOptions.decompileLiterals=1
|
|
||||||
export function __turnRatioPicker(turnratio: number): number {
|
|
||||||
return turnratio;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -111,7 +111,7 @@ namespace motors {
|
|||||||
* Stops all motors
|
* Stops all motors
|
||||||
*/
|
*/
|
||||||
//% blockId=motorStopAll block="stop all motors"
|
//% blockId=motorStopAll block="stop all motors"
|
||||||
//% weight=1
|
//% weight=5
|
||||||
//% group="Move"
|
//% group="Move"
|
||||||
export function stopAllMotors() {
|
export function stopAllMotors() {
|
||||||
const b = mkCmd(Output.ALL, DAL.opOutputStop, 0)
|
const b = mkCmd(Output.ALL, DAL.opOutputStop, 0)
|
||||||
@ -175,7 +175,7 @@ namespace motors {
|
|||||||
*/
|
*/
|
||||||
//% blockId=motorSetReversed block="set %motor|reversed %reversed"
|
//% blockId=motorSetReversed block="set %motor|reversed %reversed"
|
||||||
//% reversed.fieldEditor=toggleonoff
|
//% reversed.fieldEditor=toggleonoff
|
||||||
//% weight=59 blockGap=8
|
//% weight=59
|
||||||
//% group="Move"
|
//% group="Move"
|
||||||
setReversed(reversed: boolean) {
|
setReversed(reversed: boolean) {
|
||||||
this.init();
|
this.init();
|
||||||
@ -187,9 +187,7 @@ namespace motors {
|
|||||||
/**
|
/**
|
||||||
* Stops the motor(s).
|
* Stops the motor(s).
|
||||||
*/
|
*/
|
||||||
//% weight=6 blockGap=8
|
//%
|
||||||
//% group="Move"
|
|
||||||
//% blockId=motorStop block="%motors|stop"
|
|
||||||
stop() {
|
stop() {
|
||||||
this.init();
|
this.init();
|
||||||
stop(this._port, this._brake);
|
stop(this._port, this._brake);
|
||||||
@ -198,16 +196,14 @@ namespace motors {
|
|||||||
/**
|
/**
|
||||||
* Resets the motor(s).
|
* Resets the motor(s).
|
||||||
*/
|
*/
|
||||||
//% weight=5
|
//%
|
||||||
//% group="Move"
|
|
||||||
//% blockId=motorReset block="%motors|reset"
|
|
||||||
reset() {
|
reset() {
|
||||||
this.init();
|
this.init();
|
||||||
reset(this._port);
|
reset(this._port);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the motor speed for limited time or distance.
|
* Sets the motor speed for limited time or distance
|
||||||
* @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50
|
* @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50
|
||||||
* @param value (optional) measured distance or rotation
|
* @param value (optional) measured distance or rotation
|
||||||
* @param unit (optional) unit of the value
|
* @param unit (optional) unit of the value
|
||||||
@ -218,17 +214,10 @@ namespace motors {
|
|||||||
setSpeed(speed: number, value: number = 0, unit: MoveUnit = MoveUnit.MilliSeconds) {
|
setSpeed(speed: number, value: number = 0, unit: MoveUnit = MoveUnit.MilliSeconds) {
|
||||||
this.init();
|
this.init();
|
||||||
speed = Math.clamp(-100, 100, speed >> 0);
|
speed = Math.clamp(-100, 100, speed >> 0);
|
||||||
// stop if speed is 0
|
|
||||||
if (!speed) {
|
if (!speed) {
|
||||||
this.stop();
|
this.stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// special: 0 is infinity
|
|
||||||
if (value == 0) {
|
|
||||||
this._setSpeed(speed);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// timed motor moves
|
|
||||||
let useSteps: boolean;
|
let useSteps: boolean;
|
||||||
let stepsOrTime: number;
|
let stepsOrTime: number;
|
||||||
switch (unit) {
|
switch (unit) {
|
||||||
@ -251,8 +240,6 @@ namespace motors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._move(useSteps, stepsOrTime, speed);
|
this._move(useSteps, stepsOrTime, speed);
|
||||||
// wait till motor is done with this work
|
|
||||||
this.pauseUntilReady();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -282,12 +269,10 @@ namespace motors {
|
|||||||
//% fixedInstances
|
//% fixedInstances
|
||||||
export class Motor extends MotorBase {
|
export class Motor extends MotorBase {
|
||||||
private _large: boolean;
|
private _large: boolean;
|
||||||
private _regulated: boolean;
|
|
||||||
|
|
||||||
constructor(port: Output, large: boolean) {
|
constructor(port: Output, large: boolean) {
|
||||||
super(port, () => this.__init(), (speed) => this.__setSpeed(speed), (steps, stepsOrTime, speed) => this.__move(steps, stepsOrTime, speed));
|
super(port, () => this.__init(), (speed) => this.__setSpeed(speed), (steps, stepsOrTime, speed) => this.__move(steps, stepsOrTime, speed));
|
||||||
this._large = large;
|
this._large = large;
|
||||||
this._regulated = true;
|
|
||||||
this.markUsed();
|
this.markUsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +288,7 @@ namespace motors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private __setSpeed(speed: number) {
|
private __setSpeed(speed: number) {
|
||||||
const b = mkCmd(this._port, this._regulated ? DAL.opOutputPower : DAL.opOutputSpeed, 1)
|
const b = mkCmd(this._port, DAL.opOutputSpeed, 1)
|
||||||
b.setNumber(NumberFormat.Int8LE, 2, speed)
|
b.setNumber(NumberFormat.Int8LE, 2, speed)
|
||||||
writePWM(b)
|
writePWM(b)
|
||||||
if (speed) {
|
if (speed) {
|
||||||
@ -317,24 +302,11 @@ namespace motors {
|
|||||||
step1: 0,
|
step1: 0,
|
||||||
step2: stepsOrTime,
|
step2: stepsOrTime,
|
||||||
step3: 0,
|
step3: 0,
|
||||||
speed: this._regulated ? speed : undefined,
|
speed: speed,
|
||||||
power: this._regulated ? undefined : speed,
|
|
||||||
useBrake: this._brake
|
useBrake: this._brake
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates if the motor speed should be regulated. Default is true.
|
|
||||||
* @param value true for regulated motor
|
|
||||||
*/
|
|
||||||
//% blockId=outputMotorSetRegulated block="set %motor|regulated %value"
|
|
||||||
//% value.fieldEditor=toggleonoff
|
|
||||||
//% weight=58
|
|
||||||
//% group="Move"
|
|
||||||
setRegulated(value: boolean) {
|
|
||||||
this._regulated = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets motor actual speed.
|
* Gets motor actual speed.
|
||||||
* @param motor the port which connects to the motor
|
* @param motor the port which connects to the motor
|
||||||
@ -502,7 +474,7 @@ namespace motors {
|
|||||||
* @param value (optional) move duration or rotation
|
* @param value (optional) move duration or rotation
|
||||||
* @param unit (optional) unit of the value
|
* @param unit (optional) unit of the value
|
||||||
*/
|
*/
|
||||||
//% blockId=motorPairSteer block="steer %chassis|turn ratio %turnRatio=motorTurnRatioPicker|speed %speed=motorSpeedPicker|%"
|
//% blockId=motorPairSteer block="steer %chassis|turn ratio %turnRatio|speed %speed=motorSpeedPicker|%"
|
||||||
//% weight=95
|
//% weight=95
|
||||||
//% turnRatio.min=-200 turnRatio=200
|
//% turnRatio.min=-200 turnRatio=200
|
||||||
//% inlineInputMode=inline
|
//% inlineInputMode=inline
|
||||||
|
@ -2,7 +2,7 @@ screen.clear()
|
|||||||
brick.print("PXT!", 10, 30, Draw.Quad)
|
brick.print("PXT!", 10, 30, Draw.Quad)
|
||||||
|
|
||||||
brick.drawRect(40, 40, 20, 10, Draw.Fill)
|
brick.drawRect(40, 40, 20, 10, Draw.Fill)
|
||||||
brick.setLight(BrickLight.Orange)
|
brick.setLight(LightsPattern.Orange)
|
||||||
|
|
||||||
brick.heart.doubled().draw(100, 50, Draw.Double | Draw.Transparent)
|
brick.heart.doubled().draw(100, 50, Draw.Double | Draw.Transparent)
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ brick.buttonEnter.onEvent(ButtonEvent.Click, () => {
|
|||||||
|
|
||||||
brick.buttonLeft.onEvent(ButtonEvent.Click, () => {
|
brick.buttonLeft.onEvent(ButtonEvent.Click, () => {
|
||||||
brick.drawRect(10, 70, 20, 10, Draw.Fill)
|
brick.drawRect(10, 70, 20, 10, Draw.Fill)
|
||||||
brick.setLight(BrickLight.Red)
|
brick.setLight(LightsPattern.Red)
|
||||||
brick.setFont(brick.microbitFont())
|
brick.setFont(brick.microbitFont())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ namespace brick {
|
|||||||
|
|
||||||
//% color="#C8509B" weight=95 icon="\uf10f"
|
//% color="#C8509B" weight=95 icon="\uf10f"
|
||||||
//% labelLineWidth=0
|
//% labelLineWidth=0
|
||||||
//% groups='["Touch Sensor", "Color Sensor", "Ultrasonic Sensor", "Gyro Sensor", "Infrared Sensor", "Remote Infrared Beacon", "Threshold"]'
|
//% groups='["Ultrasonic Sensor", "Touch Sensor", "Color Sensor", "Infrared Sensor", "Remote Infrared Beacon", "Gyro Sensor"]'
|
||||||
//% groupIcons='["\uf101","\uf103","\uf102","","","\uf104"]'
|
//% groupIcons='["\uf101","\uf103","\uf102","","","\uf104"]'
|
||||||
namespace sensors {
|
namespace sensors {
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"sensors.GyroSensor.angle": "Get the current angle from the gyroscope.",
|
"sensors.GyroSensor.angle": "Get the current angle from the gyroscope.",
|
||||||
"sensors.GyroSensor.rate": "Get the current rotation rate from the gyroscope.",
|
"sensors.GyroSensor.calibrate": "Forces a calibration of the gyro. Must be called when the sensor is completely still.",
|
||||||
"sensors.GyroSensor.reset": "Forces a calibration of the gyro. Must be called when the sensor is completely still."
|
"sensors.GyroSensor.rotationRate": "Get the current rotation rate from the gyroscope."
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"sensors.GyroSensor.angle|block": "%sensor|angle",
|
"sensors.GyroSensor.angle|block": "%sensor|angle",
|
||||||
"sensors.GyroSensor.rate|block": "%sensor|rate",
|
"sensors.GyroSensor.calibrate|block": "%sensor|calibrate",
|
||||||
"sensors.GyroSensor.reset|block": "%sensor|reset",
|
"sensors.GyroSensor.rotationRate|block": "%sensor|rotation rate",
|
||||||
"sensors.gyro1|block": "gyro 1",
|
"sensors.gyro1|block": "gyro 1",
|
||||||
"sensors.gyro2|block": "gyro 2",
|
"sensors.gyro2|block": "gyro 2",
|
||||||
"sensors.gyro3|block": "gyro 3",
|
"sensors.gyro3|block": "gyro 3",
|
||||||
|
@ -31,7 +31,7 @@ namespace sensors {
|
|||||||
//% parts="gyroscope"
|
//% parts="gyroscope"
|
||||||
//% blockNamespace=sensors
|
//% blockNamespace=sensors
|
||||||
//% sensor.fieldEditor="ports"
|
//% sensor.fieldEditor="ports"
|
||||||
//% weight=64 blockGap=8
|
//% weight=65 blockGap=8
|
||||||
//% group="Gyro Sensor"
|
//% group="Gyro Sensor"
|
||||||
angle(): number {
|
angle(): number {
|
||||||
if (this.calibrating)
|
if (this.calibrating)
|
||||||
@ -45,15 +45,15 @@ namespace sensors {
|
|||||||
* Get the current rotation rate from the gyroscope.
|
* Get the current rotation rate from the gyroscope.
|
||||||
* @param sensor the gyroscope to query the request
|
* @param sensor the gyroscope to query the request
|
||||||
*/
|
*/
|
||||||
//% help=input/gyro/rate
|
//% help=input/gyro/rotation-rate
|
||||||
//% block="%sensor|rate"
|
//% block="%sensor|rotation rate"
|
||||||
//% blockId=gyroGetRate
|
//% blockId=gyroGetRate
|
||||||
//% parts="gyroscope"
|
//% parts="gyroscope"
|
||||||
//% blockNamespace=sensors
|
//% blockNamespace=sensors
|
||||||
//% sensor.fieldEditor="ports"
|
//% sensor.fieldEditor="ports"
|
||||||
//% weight=65 blockGap=8
|
//% weight=65 blockGap=8
|
||||||
//% group="Gyro Sensor"
|
//% group="Gyro Sensor"
|
||||||
rate(): number {
|
rotationRate(): number {
|
||||||
if (this.calibrating)
|
if (this.calibrating)
|
||||||
pauseUntil(() => !this.calibrating, 2000);
|
pauseUntil(() => !this.calibrating, 2000);
|
||||||
|
|
||||||
@ -65,21 +65,21 @@ namespace sensors {
|
|||||||
* Forces a calibration of the gyro. Must be called when the sensor is completely still.
|
* Forces a calibration of the gyro. Must be called when the sensor is completely still.
|
||||||
*/
|
*/
|
||||||
//% help=input/gyro/calibrate
|
//% help=input/gyro/calibrate
|
||||||
//% block="%sensor|reset"
|
//% block="%sensor|calibrate"
|
||||||
//% blockId=gyroReset
|
//% blockId=gyroCalibrate
|
||||||
//% parts="gyroscope"
|
//% parts="gyroscope"
|
||||||
//% blockNamespace=sensors
|
//% blockNamespace=sensors
|
||||||
//% sensor.fieldEditor="ports"
|
//% sensor.fieldEditor="ports"
|
||||||
//% weight=50 blockGap=8
|
//% weight=65 blockGap=8
|
||||||
//% group="Gyro Sensor"
|
//% group="Gyro Sensor"
|
||||||
reset(): void {
|
calibrate(): void {
|
||||||
if (this.calibrating) return; // already in calibration mode
|
if (this.calibrating) return; // already in calibration mode
|
||||||
|
|
||||||
this.calibrating = true;
|
this.calibrating = true;
|
||||||
// may be triggered by a button click, give time to settle
|
// may be triggered by a button click, give time to settle
|
||||||
loops.pause(500);
|
loops.pause(500);
|
||||||
// send a reset command
|
// send a reset command
|
||||||
super.reset();
|
this.reset();
|
||||||
// we need to switch mode twice to perform a calibration
|
// we need to switch mode twice to perform a calibration
|
||||||
if (this.mode == GyroSensorMode.Rate)
|
if (this.mode == GyroSensorMode.Rate)
|
||||||
this.setMode(GyroSensorMode.Angle);
|
this.setMode(GyroSensorMode.Angle);
|
||||||
@ -90,9 +90,7 @@ namespace sensors {
|
|||||||
this.setMode(GyroSensorMode.Angle);
|
this.setMode(GyroSensorMode.Angle);
|
||||||
else
|
else
|
||||||
this.setMode(GyroSensorMode.Rate);
|
this.setMode(GyroSensorMode.Rate);
|
||||||
// give it more time to settle
|
this.calibrating = false;
|
||||||
loops.pause(500);
|
|
||||||
this.calibrating = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,9 +4,6 @@
|
|||||||
"sensors.InfraredSensor.pauseUntil": "Waits for the event to occur",
|
"sensors.InfraredSensor.pauseUntil": "Waits for the event to occur",
|
||||||
"sensors.InfraredSensor.proximity": "Get the promixity measured by the infrared sensor, from ``0`` (close) to ``100`` (far)",
|
"sensors.InfraredSensor.proximity": "Get the promixity measured by the infrared sensor, from ``0`` (close) to ``100`` (far)",
|
||||||
"sensors.InfraredSensor.remoteCommand": "Get the remote commandreceived the infrared sensor.",
|
"sensors.InfraredSensor.remoteCommand": "Get the remote commandreceived the infrared sensor.",
|
||||||
"sensors.InfraredSensor.setThreshold": "Sets a threshold value",
|
|
||||||
"sensors.InfraredSensor.setThreshold|param|condition": "the dark or bright light condition",
|
|
||||||
"sensors.InfraredSensor.setThreshold|param|value": "the value threshold",
|
|
||||||
"sensors.RemoteInfraredBeaconButton.isPressed": "Check if a remote button is currently pressed or not.",
|
"sensors.RemoteInfraredBeaconButton.isPressed": "Check if a remote button is currently pressed or not.",
|
||||||
"sensors.RemoteInfraredBeaconButton.onEvent": "Do something when a button or sensor is clicked, up or down",
|
"sensors.RemoteInfraredBeaconButton.onEvent": "Do something when a button or sensor is clicked, up or down",
|
||||||
"sensors.RemoteInfraredBeaconButton.onEvent|param|body": "code to run when the event is raised",
|
"sensors.RemoteInfraredBeaconButton.onEvent|param|body": "code to run when the event is raised",
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
"sensors.InfraredSensor.pauseUntil|block": "pause until %sensor| %event",
|
"sensors.InfraredSensor.pauseUntil|block": "pause until %sensor| %event",
|
||||||
"sensors.InfraredSensor.proximity|block": "%sensor|proximity",
|
"sensors.InfraredSensor.proximity|block": "%sensor|proximity",
|
||||||
"sensors.InfraredSensor.remoteCommand|block": "%sensor|remote command",
|
"sensors.InfraredSensor.remoteCommand|block": "%sensor|remote command",
|
||||||
"sensors.InfraredSensor.setThreshold|block": "set %sensor|%condition|to %value",
|
|
||||||
"sensors.RemoteInfraredBeaconButton.isPressed|block": "%button|is pressed",
|
"sensors.RemoteInfraredBeaconButton.isPressed|block": "%button|is pressed",
|
||||||
"sensors.RemoteInfraredBeaconButton.onEvent|block": "on %button|%event",
|
"sensors.RemoteInfraredBeaconButton.onEvent|block": "on %button|%event",
|
||||||
"sensors.RemoteInfraredBeaconButton.wasPressed|block": "%button|was pressed",
|
"sensors.RemoteInfraredBeaconButton.wasPressed|block": "%button|was pressed",
|
||||||
@ -21,6 +20,5 @@
|
|||||||
"sensors|block": "sensors",
|
"sensors|block": "sensors",
|
||||||
"{id:category}Sensors": "Sensors",
|
"{id:category}Sensors": "Sensors",
|
||||||
"{id:group}Infrared Sensor": "Infrared Sensor",
|
"{id:group}Infrared Sensor": "Infrared Sensor",
|
||||||
"{id:group}Remote Infrared Beacon": "Remote Infrared Beacon",
|
"{id:group}Remote Infrared Beacon": "Remote Infrared Beacon"
|
||||||
"{id:group}Threshold": "Threshold"
|
|
||||||
}
|
}
|
@ -250,22 +250,6 @@ namespace sensors {
|
|||||||
this._setMode(IrSensorMode.Seek)
|
this._setMode(IrSensorMode.Seek)
|
||||||
return this.getNumber(NumberFormat.UInt16LE, this.channel * 2)
|
return this.getNumber(NumberFormat.UInt16LE, this.channel * 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a threshold value
|
|
||||||
* @param condition the dark or bright light condition
|
|
||||||
* @param value the value threshold
|
|
||||||
*/
|
|
||||||
//% blockId=irSetThreshold block="set %sensor|%condition|to %value"
|
|
||||||
//% group="Threshold" blockGap=8
|
|
||||||
//% value.min=0 value.max=100
|
|
||||||
setThreshold(condition: InfraredSensorEvent, value: number) {
|
|
||||||
if (condition == InfraredSensorEvent.ObjectNear)
|
|
||||||
this.proximityThreshold.setLowThreshold(value)
|
|
||||||
else
|
|
||||||
this.proximityThreshold.setHighThreshold(value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//% fixedInstance whenUsed block="infrared 1" jres=icons.port1
|
//% fixedInstance whenUsed block="infrared 1" jres=icons.port1
|
||||||
|
1
libs/matrix/README.md
Normal file
1
libs/matrix/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# Matrix
|
15
libs/matrix/_locales/matrix-jsdoc-strings.json
Normal file
15
libs/matrix/_locales/matrix-jsdoc-strings.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"matrix.Matrix": "A 2D matrix",
|
||||||
|
"matrix.Matrix.add": "Returns a new matrix as the sum of both matrices",
|
||||||
|
"matrix.Matrix.cholesky": "Performs a Cholesky factorized for a symmetric and positive definite",
|
||||||
|
"matrix.Matrix.clone": "Clones the matrix",
|
||||||
|
"matrix.Matrix.get": "Gets a value from the matrix",
|
||||||
|
"matrix.Matrix.get|param|row": "@param col ",
|
||||||
|
"matrix.Matrix.identity": "Creates an identity matrix",
|
||||||
|
"matrix.Matrix.logToConsole": "Renders the matrix to the console",
|
||||||
|
"matrix.Matrix.multiply": "Multiplies the current matrix with the other matrix and returns a new matrix",
|
||||||
|
"matrix.Matrix.scale": "Returns a new matrix with scaled values",
|
||||||
|
"matrix.Matrix.set": "Sets a value in the array",
|
||||||
|
"matrix.Matrix.set|param|row": "@param col ",
|
||||||
|
"matrix.Matrix.transpose": "Returns a transposed matrix"
|
||||||
|
}
|
4
libs/matrix/_locales/matrix-strings.json
Normal file
4
libs/matrix/_locales/matrix-strings.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"matrix|block": "matrix",
|
||||||
|
"{id:category}Matrix": "Matrix"
|
||||||
|
}
|
186
libs/matrix/matrix.ts
Normal file
186
libs/matrix/matrix.ts
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
namespace matrix {
|
||||||
|
function pre(check: boolean) {
|
||||||
|
if (!check)
|
||||||
|
control.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A 2D matrix
|
||||||
|
*/
|
||||||
|
export class Matrix {
|
||||||
|
private _rows: number;
|
||||||
|
private _cols: number;
|
||||||
|
private _values: number[];
|
||||||
|
|
||||||
|
constructor(rows: number, cols: number, values: number[] = undefined) {
|
||||||
|
pre(rows > 0);
|
||||||
|
pre(cols > 0);
|
||||||
|
this._rows = rows;
|
||||||
|
this._cols = cols;
|
||||||
|
const n = this._rows * this._cols;
|
||||||
|
this._values = values || [];
|
||||||
|
// fill gaps
|
||||||
|
while (this._values.length < n)
|
||||||
|
this._values.push(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an identity matrix
|
||||||
|
* @param size
|
||||||
|
*/
|
||||||
|
static identity(size: number): Matrix {
|
||||||
|
const m = new Matrix(size, size);
|
||||||
|
for (let i = 0; i < size; ++i)
|
||||||
|
m._values[i * size] = 1;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value in the array
|
||||||
|
* @param row
|
||||||
|
* @param col
|
||||||
|
* @param val
|
||||||
|
*/
|
||||||
|
set(row: number, col: number, val: number) {
|
||||||
|
pre(row == row >> 0 && row >= 0 && row < this._rows && col == col >> 0 && col >= 0 && col < this._cols);
|
||||||
|
this._values[row * this._cols + col] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a value from the matrix
|
||||||
|
* @param row
|
||||||
|
* @param col
|
||||||
|
*/
|
||||||
|
get(row: number, col: number): number {
|
||||||
|
pre(row == row >> 0 && row >= 0 && row < this._rows && col == col >> 0 && col >= 0 && col < this._cols);
|
||||||
|
return this._values[row * this._cols + col];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the number of rows
|
||||||
|
*/
|
||||||
|
get rows(): number {
|
||||||
|
return this._rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the number of colums
|
||||||
|
*/
|
||||||
|
get cols(): number {
|
||||||
|
return this._cols;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the raw storage buffer
|
||||||
|
*/
|
||||||
|
get values(): number[] {
|
||||||
|
return this._values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new matrix as the sum of both matrices
|
||||||
|
* @param other
|
||||||
|
*/
|
||||||
|
add(other: Matrix): Matrix {
|
||||||
|
pre(this._rows != other._rows || this._cols != other._cols)
|
||||||
|
const n = this._rows * this._cols;
|
||||||
|
const r: number[] = [];
|
||||||
|
for (let i = 0; i < n; ++i) {
|
||||||
|
r[i] = this._values[i] + other._values[i];
|
||||||
|
}
|
||||||
|
return new Matrix(this._rows, this._cols, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new matrix with scaled values
|
||||||
|
* @param factor
|
||||||
|
*/
|
||||||
|
scale(factor: number): Matrix {
|
||||||
|
const n = this._rows * this._cols;
|
||||||
|
const r: number[] = [];
|
||||||
|
for (let i = 0; i < n; ++i) {
|
||||||
|
r[i] = this._values[i] * factor;
|
||||||
|
}
|
||||||
|
return new Matrix(this._rows, this._cols, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multiplies the current matrix with the other matrix and returns a new matrix
|
||||||
|
* @param other
|
||||||
|
*/
|
||||||
|
multiply(other: Matrix): Matrix {
|
||||||
|
pre(this._cols == other._rows);
|
||||||
|
const r: number[] = [];
|
||||||
|
for (let i = 0; i < this._rows; ++i) {
|
||||||
|
for (let j = 0; j < other._cols; ++j) {
|
||||||
|
let s = 0;
|
||||||
|
for (let k = 0; k < this._cols; ++k) {
|
||||||
|
s += this._values[i * this._cols + k] * other._values[k * other._cols + j];
|
||||||
|
}
|
||||||
|
r[i * other._cols + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Matrix(this._rows, other._cols, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a transposed matrix
|
||||||
|
*/
|
||||||
|
transpose(): Matrix {
|
||||||
|
const R = new Matrix(this._cols, this._rows);
|
||||||
|
const r: number[] = R._values;
|
||||||
|
for (let i = 0; i < this._rows; ++i) {
|
||||||
|
for (let j = 0; j < this._cols; ++j) {
|
||||||
|
r[i + j * this._rows] = this._values[i * this._cols + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return R;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clones the matrix
|
||||||
|
*/
|
||||||
|
clone(): Matrix {
|
||||||
|
const r = new Matrix(this._rows, this._cols, this._values.slice(0));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a Cholesky factorized for a symmetric and positive definite
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
cholesky(): Matrix {
|
||||||
|
pre(this._rows == this._cols);
|
||||||
|
const l = this.clone();
|
||||||
|
const n = this._rows;
|
||||||
|
const L = l._values;
|
||||||
|
|
||||||
|
for (let j = 0; j < n; j++) {
|
||||||
|
const jj = L[j * n + j] = Math.sqrt(L[j * n + j]);
|
||||||
|
for (let i = j + 1; i < n; ++i)
|
||||||
|
L[i * n + j] /= jj;
|
||||||
|
for (let k = j + 1; k < n; k++)
|
||||||
|
for (let i = k; i < n; i++)
|
||||||
|
L[i * n + j] -= L[i * n + j] * L[k * n + j];
|
||||||
|
}
|
||||||
|
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders the matrix to the console
|
||||||
|
*/
|
||||||
|
logToConsole(): void {
|
||||||
|
let k = 0;
|
||||||
|
for(let i = 0; i < this._rows; ++i) {
|
||||||
|
let s = ""
|
||||||
|
for(let j = 0; j < this._cols; ++j) {
|
||||||
|
if (j > 0)
|
||||||
|
s += " "
|
||||||
|
s += Math.round((this._values[k++] * 100) / 100);
|
||||||
|
}
|
||||||
|
console.log(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
libs/matrix/pxt.json
Normal file
15
libs/matrix/pxt.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "matrix",
|
||||||
|
"description": "Matrix algebra",
|
||||||
|
"files": [
|
||||||
|
"README.md",
|
||||||
|
"matrix.ts"
|
||||||
|
],
|
||||||
|
"testFiles": [
|
||||||
|
"test.ts"
|
||||||
|
],
|
||||||
|
"public": true,
|
||||||
|
"dependencies": {
|
||||||
|
"core": "file:../core"
|
||||||
|
}
|
||||||
|
}
|
1
libs/matrix/test.ts
Normal file
1
libs/matrix/test.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
// add tests here
|
@ -33,34 +33,34 @@
|
|||||||
"music.stopAllSounds|block": "stop all sounds",
|
"music.stopAllSounds|block": "stop all sounds",
|
||||||
"music.tempo|block": "tempo (bpm)",
|
"music.tempo|block": "tempo (bpm)",
|
||||||
"music|block": "music",
|
"music|block": "music",
|
||||||
"sounds.animalsCatPurr|block": "animals cat purr",
|
"sounds.animalsCatPurr|block": "Animals cat purr",
|
||||||
"sounds.animalsDogBark1|block": "animals dog bark 1",
|
"sounds.animalsDogBark1|block": "Animals dog bark 1",
|
||||||
"sounds.animalsDogBark2|block": "animals dog bark 2",
|
"sounds.animalsDogBark2|block": "Animals dog bark 2",
|
||||||
"sounds.animalsDogGrowl|block": "animals dog growl",
|
"sounds.animalsDogGrowl|block": "Animals dog growl",
|
||||||
"sounds.animalsDogSniff|block": "animals dog sniff",
|
"sounds.animalsDogSniff|block": "Animals dog sniff",
|
||||||
"sounds.animalsDogWhine|block": "animals dog whine",
|
"sounds.animalsDogWhine|block": "Animals dog whine",
|
||||||
"sounds.animalsElephantCall|block": "animals elephant call",
|
"sounds.animalsElephantCall|block": "Animals elephant call",
|
||||||
"sounds.animalsInsectBuzz1|block": "animals insect buzz1",
|
"sounds.animalsInsectBuzz1|block": "Animals insect buzz1",
|
||||||
"sounds.animalsInsectBuzz2|block": "animals insect buzz2",
|
"sounds.animalsInsectBuzz2|block": "Animals insect buzz2",
|
||||||
"sounds.animalsInsectChirp|block": "animals insect chirp",
|
"sounds.animalsInsectChirp|block": "Animals insect chirp",
|
||||||
"sounds.animalsSnakeHiss|block": "animals snake hiss",
|
"sounds.animalsSnakeHiss|block": "Animals snake hiss",
|
||||||
"sounds.animalsSnakeRattle|block": "animals snake rattle",
|
"sounds.animalsSnakeRattle|block": "Animals snake rattle",
|
||||||
"sounds.animalsTRexRoar|block": "animals trex roar",
|
"sounds.animalsTRexRoar|block": "Animals trex roar",
|
||||||
"sounds.colorsBlack|block": "colors black",
|
"sounds.colorsBlack|block": "Colors black",
|
||||||
"sounds.colorsBlue|block": "colors blue",
|
"sounds.colorsBlue|block": "Colors blue",
|
||||||
"sounds.colorsBrown|block": "colors brown",
|
"sounds.colorsBrown|block": "Colors brown",
|
||||||
"sounds.colorsGreen|block": "colors green",
|
"sounds.colorsGreen|block": "Colors green",
|
||||||
"sounds.colorsRed|block": "colors red",
|
"sounds.colorsRed|block": "Colors red",
|
||||||
"sounds.colorsWhite|block": "colors white",
|
"sounds.colorsWhite|block": "Colors white",
|
||||||
"sounds.colorsYellow|block": "colors yellow",
|
"sounds.colorsYellow|block": "Colors yellow",
|
||||||
"sounds.communicationBravo|block": "communication bravo",
|
"sounds.communicationBravo|block": "Communication bravo",
|
||||||
"sounds.communicationEv3|block": "communication ev3",
|
"sounds.communicationEv3|block": "Communication ev3",
|
||||||
"sounds.communicationFantastic|block": "communication fantastic",
|
"sounds.communicationFantastic|block": "Communication fantastic",
|
||||||
"sounds.communicationGameOver|block": "communication game over",
|
"sounds.communicationGameOver|block": "Communication game over",
|
||||||
"sounds.communicationGoodJob|block": "communicationGoodJob",
|
"sounds.communicationGoodJob|block": "communicationGoodJob",
|
||||||
"sounds.communicationGoodbye|block": "communication goodbye",
|
"sounds.communicationGoodbye|block": "communication goodbye",
|
||||||
"sounds.communicationGood|block": "communication good",
|
"sounds.communicationGood|block": "communication good",
|
||||||
"sounds.communicationGo|block": "communication go",
|
"sounds.communicationGo|block": "Communication go",
|
||||||
"sounds.communicationHello|block": "communication hello",
|
"sounds.communicationHello|block": "communication hello",
|
||||||
"sounds.communicationHi|block": "communication hi",
|
"sounds.communicationHi|block": "communication hi",
|
||||||
"sounds.communicationLego|block": "communication lego",
|
"sounds.communicationLego|block": "communication lego",
|
||||||
@ -159,7 +159,7 @@
|
|||||||
"sounds.systemOverpower|block": "system overpower",
|
"sounds.systemOverpower|block": "system overpower",
|
||||||
"sounds.systemPowerDown|block": "system power down",
|
"sounds.systemPowerDown|block": "system power down",
|
||||||
"sounds.systemReady|block": "system ready",
|
"sounds.systemReady|block": "system ready",
|
||||||
"sounds.systemStartUp|block": "system start up",
|
"sounds.systemStartUp|block": "S",
|
||||||
"{id:category}Music": "Music",
|
"{id:category}Music": "Music",
|
||||||
"{id:category}Sound": "Sound",
|
"{id:category}Sound": "Sound",
|
||||||
"{id:category}Sounds": "Sounds"
|
"{id:category}Sounds": "Sounds"
|
||||||
|
@ -1,53 +1,53 @@
|
|||||||
namespace sounds {
|
namespace sounds {
|
||||||
//% fixedInstance jres block="animals cat purr"
|
//% fixedInstance jres block="Animals cat purr"
|
||||||
export const animalsCatPurr = music.fromWAV(hex``);
|
export const animalsCatPurr = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals dog bark 1"
|
//% fixedInstance jres block="Animals dog bark 1"
|
||||||
export const animalsDogBark1 = music.fromWAV(hex``);
|
export const animalsDogBark1 = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals dog bark 2"
|
//% fixedInstance jres block="Animals dog bark 2"
|
||||||
export const animalsDogBark2 = music.fromWAV(hex``);
|
export const animalsDogBark2 = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals dog growl"
|
//% fixedInstance jres block="Animals dog growl"
|
||||||
export const animalsDogGrowl = music.fromWAV(hex``);
|
export const animalsDogGrowl = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals dog sniff"
|
//% fixedInstance jres block="Animals dog sniff"
|
||||||
export const animalsDogSniff = music.fromWAV(hex``);
|
export const animalsDogSniff = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals dog whine"
|
//% fixedInstance jres block="Animals dog whine"
|
||||||
export const animalsDogWhine = music.fromWAV(hex``);
|
export const animalsDogWhine = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals elephant call"
|
//% fixedInstance jres block="Animals elephant call"
|
||||||
export const animalsElephantCall = music.fromWAV(hex``);
|
export const animalsElephantCall = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals insect buzz1"
|
//% fixedInstance jres block="Animals insect buzz1"
|
||||||
export const animalsInsectBuzz1 = music.fromWAV(hex``);
|
export const animalsInsectBuzz1 = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals insect buzz2"
|
//% fixedInstance jres block="Animals insect buzz2"
|
||||||
export const animalsInsectBuzz2 = music.fromWAV(hex``);
|
export const animalsInsectBuzz2 = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals insect chirp"
|
//% fixedInstance jres block="Animals insect chirp"
|
||||||
export const animalsInsectChirp = music.fromWAV(hex``);
|
export const animalsInsectChirp = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals snake hiss"
|
//% fixedInstance jres block="Animals snake hiss"
|
||||||
export const animalsSnakeHiss = music.fromWAV(hex``);
|
export const animalsSnakeHiss = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals snake rattle"
|
//% fixedInstance jres block="Animals snake rattle"
|
||||||
export const animalsSnakeRattle = music.fromWAV(hex``);
|
export const animalsSnakeRattle = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="animals trex roar"
|
//% fixedInstance jres block="Animals trex roar"
|
||||||
export const animalsTRexRoar = music.fromWAV(hex``);
|
export const animalsTRexRoar = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors black"
|
//% fixedInstance jres block="Colors black"
|
||||||
export const colorsBlack = music.fromWAV(hex``);
|
export const colorsBlack = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors blue"
|
//% fixedInstance jres block="Colors blue"
|
||||||
export const colorsBlue = music.fromWAV(hex``);
|
export const colorsBlue = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors brown"
|
//% fixedInstance jres block="Colors brown"
|
||||||
export const colorsBrown = music.fromWAV(hex``);
|
export const colorsBrown = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors green"
|
//% fixedInstance jres block="Colors green"
|
||||||
export const colorsGreen = music.fromWAV(hex``);
|
export const colorsGreen = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors red"
|
//% fixedInstance jres block="Colors red"
|
||||||
export const colorsRed = music.fromWAV(hex``);
|
export const colorsRed = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors white"
|
//% fixedInstance jres block="Colors white"
|
||||||
export const colorsWhite = music.fromWAV(hex``);
|
export const colorsWhite = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="colors yellow"
|
//% fixedInstance jres block="Colors yellow"
|
||||||
export const colorsYellow = music.fromWAV(hex``);
|
export const colorsYellow = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="communication bravo"
|
//% fixedInstance jres block="Communication bravo"
|
||||||
export const communicationBravo = music.fromWAV(hex``);
|
export const communicationBravo = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="communication ev3"
|
//% fixedInstance jres block="Communication ev3"
|
||||||
export const communicationEv3 = music.fromWAV(hex``);
|
export const communicationEv3 = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="communication fantastic"
|
//% fixedInstance jres block="Communication fantastic"
|
||||||
export const communicationFantastic = music.fromWAV(hex``);
|
export const communicationFantastic = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="communication game over"
|
//% fixedInstance jres block="Communication game over"
|
||||||
export const communicationGameOver = music.fromWAV(hex``);
|
export const communicationGameOver = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="communication go"
|
//% fixedInstance jres block="Communication go"
|
||||||
export const communicationGo = music.fromWAV(hex``);
|
export const communicationGo = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="communicationGoodJob"
|
//% fixedInstance jres block="communicationGoodJob"
|
||||||
export const communicationGoodJob = music.fromWAV(hex``);
|
export const communicationGoodJob = music.fromWAV(hex``);
|
||||||
@ -251,7 +251,7 @@ namespace sounds {
|
|||||||
export const systemPowerDown = music.fromWAV(hex``);
|
export const systemPowerDown = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="system ready"
|
//% fixedInstance jres block="system ready"
|
||||||
export const systemReady = music.fromWAV(hex``);
|
export const systemReady = music.fromWAV(hex``);
|
||||||
//% fixedInstance jres block="system start up"
|
//% fixedInstance jres block=S
|
||||||
export const systemStartUp = music.fromWAV(hex``);
|
export const systemStartUp = music.fromWAV(hex``);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,8 +2,5 @@
|
|||||||
"sensors.UltraSonicSensor.distance": "Gets the distance from the sonar in centimeters",
|
"sensors.UltraSonicSensor.distance": "Gets the distance from the sonar in centimeters",
|
||||||
"sensors.UltraSonicSensor.onEvent": "Registers code to run when the given color is close",
|
"sensors.UltraSonicSensor.onEvent": "Registers code to run when the given color is close",
|
||||||
"sensors.UltraSonicSensor.onEvent|param|handler": "the code to run when detected",
|
"sensors.UltraSonicSensor.onEvent|param|handler": "the code to run when detected",
|
||||||
"sensors.UltraSonicSensor.pauseUntil": "Waits for the event to occur",
|
"sensors.UltraSonicSensor.pauseUntil": "Waits for the event to occur"
|
||||||
"sensors.UltraSonicSensor.setThreshold": "Sets a threshold value",
|
|
||||||
"sensors.UltraSonicSensor.setThreshold|param|condition": "the dark or bright light condition",
|
|
||||||
"sensors.UltraSonicSensor.setThreshold|param|value": "the value threshold"
|
|
||||||
}
|
}
|
@ -5,12 +5,10 @@
|
|||||||
"sensors.UltraSonicSensor.distance|block": "%sensor|distance",
|
"sensors.UltraSonicSensor.distance|block": "%sensor|distance",
|
||||||
"sensors.UltraSonicSensor.onEvent|block": "on %sensor|%event",
|
"sensors.UltraSonicSensor.onEvent|block": "on %sensor|%event",
|
||||||
"sensors.UltraSonicSensor.pauseUntil|block": "pause until %sensor| %event",
|
"sensors.UltraSonicSensor.pauseUntil|block": "pause until %sensor| %event",
|
||||||
"sensors.UltraSonicSensor.setThreshold|block": "set %sensor|%condition|to %value",
|
|
||||||
"sensors.ultrasonic1|block": "ultrasonic 1",
|
"sensors.ultrasonic1|block": "ultrasonic 1",
|
||||||
"sensors.ultrasonic2|block": "ultrasonic 2",
|
"sensors.ultrasonic2|block": "ultrasonic 2",
|
||||||
"sensors.ultrasonic3|block": "ultrasonic 3",
|
"sensors.ultrasonic3|block": "ultrasonic 3",
|
||||||
"sensors.ultrasonic4|block": "ultrasonic 4",
|
"sensors.ultrasonic4|block": "ultrasonic 4",
|
||||||
"{id:category}Sensors": "Sensors",
|
"{id:category}Sensors": "Sensors",
|
||||||
"{id:group}Threshold": "Threshold",
|
|
||||||
"{id:group}Ultrasonic Sensor": "Ultrasonic Sensor"
|
"{id:group}Ultrasonic Sensor": "Ultrasonic Sensor"
|
||||||
}
|
}
|
@ -85,23 +85,6 @@ namespace sensors {
|
|||||||
this._setMode(0)
|
this._setMode(0)
|
||||||
return this._query();
|
return this._query();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a threshold value
|
|
||||||
* @param condition the dark or bright light condition
|
|
||||||
* @param value the value threshold
|
|
||||||
*/
|
|
||||||
//% blockId=ultrasonicSetThreshold block="set %sensor|%condition|to %value"
|
|
||||||
//% group="Threshold" blockGap=8
|
|
||||||
//% value.min=0 value.max=255
|
|
||||||
setThreshold(condition: UltrasonicSensorEvent, value: number) {
|
|
||||||
switch(condition) {
|
|
||||||
case UltrasonicSensorEvent.ObjectNear: this.promixityThreshold.setLowThreshold(value); break;
|
|
||||||
case UltrasonicSensorEvent.ObjectFar: this.promixityThreshold.setHighThreshold(value); break;
|
|
||||||
case UltrasonicSensorEvent.ObjectDetected: this.movementThreshold = value; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//% fixedInstance whenUsed block="ultrasonic 4" jres=icons.port4
|
//% fixedInstance whenUsed block="ultrasonic 4" jres=icons.port4
|
||||||
|
87
package-lock.json
generated
87
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pxt-ev3",
|
"name": "pxt-ev3",
|
||||||
"version": "0.0.59",
|
"version": "0.0.51",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -399,7 +399,7 @@
|
|||||||
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
|
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bn.js": "4.11.8",
|
"bn.js": "4.11.8",
|
||||||
"randombytes": "2.0.6"
|
"randombytes": "2.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"browserify-sign": {
|
"browserify-sign": {
|
||||||
@ -792,7 +792,7 @@
|
|||||||
"inherits": "2.0.3",
|
"inherits": "2.0.3",
|
||||||
"pbkdf2": "3.0.14",
|
"pbkdf2": "3.0.14",
|
||||||
"public-encrypt": "4.0.0",
|
"public-encrypt": "4.0.0",
|
||||||
"randombytes": "2.0.6",
|
"randombytes": "2.0.5",
|
||||||
"randomfill": "1.0.3"
|
"randomfill": "1.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -956,7 +956,7 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"bn.js": "4.11.8",
|
"bn.js": "4.11.8",
|
||||||
"miller-rabin": "4.0.1",
|
"miller-rabin": "4.0.1",
|
||||||
"randombytes": "2.0.6"
|
"randombytes": "2.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"domain-browser": {
|
"domain-browser": {
|
||||||
@ -1009,9 +1009,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"end-of-stream": {
|
"end-of-stream": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
|
||||||
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
|
"integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"once": "1.4.0"
|
"once": "1.4.0"
|
||||||
}
|
}
|
||||||
@ -1562,15 +1562,6 @@
|
|||||||
"verror": "1.10.0"
|
"verror": "1.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"keytar": {
|
|
||||||
"version": "3.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/keytar/-/keytar-3.0.2.tgz",
|
|
||||||
"integrity": "sha1-TcFd01I/4wYx+dOIV4pAFRpgWG8=",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"nan": "2.3.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"kind-of": {
|
"kind-of": {
|
||||||
"version": "3.2.2",
|
"version": "3.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
@ -1842,9 +1833,9 @@
|
|||||||
"integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI="
|
"integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI="
|
||||||
},
|
},
|
||||||
"marked": {
|
"marked": {
|
||||||
"version": "0.3.12",
|
"version": "0.3.9",
|
||||||
"resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz",
|
"resolved": "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz",
|
||||||
"integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA=="
|
"integrity": "sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw=="
|
||||||
},
|
},
|
||||||
"math-expression-evaluator": {
|
"math-expression-evaluator": {
|
||||||
"version": "1.2.17",
|
"version": "1.2.17",
|
||||||
@ -1975,7 +1966,8 @@
|
|||||||
"nan": {
|
"nan": {
|
||||||
"version": "2.3.2",
|
"version": "2.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.3.2.tgz",
|
||||||
"integrity": "sha1-TU7PF+HaTpie+08nPY0AIBytCH4="
|
"integrity": "sha1-TU7PF+HaTpie+08nPY0AIBytCH4=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"neatequal": {
|
"neatequal": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -2518,7 +2510,7 @@
|
|||||||
"npmlog": "4.1.2",
|
"npmlog": "4.1.2",
|
||||||
"os-homedir": "1.0.2",
|
"os-homedir": "1.0.2",
|
||||||
"pump": "1.0.3",
|
"pump": "1.0.3",
|
||||||
"rc": "1.2.3",
|
"rc": "1.2.2",
|
||||||
"simple-get": "1.4.3",
|
"simple-get": "1.4.3",
|
||||||
"tar-fs": "1.16.0",
|
"tar-fs": "1.16.0",
|
||||||
"tunnel-agent": "0.6.0",
|
"tunnel-agent": "0.6.0",
|
||||||
@ -2566,7 +2558,7 @@
|
|||||||
"browserify-rsa": "4.0.1",
|
"browserify-rsa": "4.0.1",
|
||||||
"create-hash": "1.1.3",
|
"create-hash": "1.1.3",
|
||||||
"parse-asn1": "5.1.0",
|
"parse-asn1": "5.1.0",
|
||||||
"randombytes": "2.0.6"
|
"randombytes": "2.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pump": {
|
"pump": {
|
||||||
@ -2574,7 +2566,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
|
||||||
"integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
|
"integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"end-of-stream": "1.4.1",
|
"end-of-stream": "1.4.0",
|
||||||
"once": "1.4.0"
|
"once": "1.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -2584,19 +2576,19 @@
|
|||||||
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
|
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
|
||||||
},
|
},
|
||||||
"pxt-common-packages": {
|
"pxt-common-packages": {
|
||||||
"version": "0.15.4",
|
"version": "0.14.13",
|
||||||
"resolved": "https://registry.npmjs.org/pxt-common-packages/-/pxt-common-packages-0.15.4.tgz",
|
"resolved": "https://registry.npmjs.org/pxt-common-packages/-/pxt-common-packages-0.14.13.tgz",
|
||||||
"integrity": "sha1-hI1q5+UQ7vIuBqlOrIy66PmiePo=",
|
"integrity": "sha1-L/axrdv7I1g6xjGC8JXNx/Bv0Ss=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"autoprefixer": "6.7.7",
|
"autoprefixer": "6.7.7",
|
||||||
"pxt-core": "3.0.8",
|
"pxt-core": "3.0.2",
|
||||||
"rtlcss": "2.2.1"
|
"rtlcss": "2.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pxt-core": {
|
"pxt-core": {
|
||||||
"version": "3.0.8",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-3.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-3.0.2.tgz",
|
||||||
"integrity": "sha1-wmvgLvyX1lV5ZB6EM9APj22/gIo=",
|
"integrity": "sha1-q7aCkAXRwvsmhPaeHR1S9osLK98=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bluebird": "3.5.1",
|
"bluebird": "3.5.1",
|
||||||
"browserify": "13.3.0",
|
"browserify": "13.3.0",
|
||||||
@ -2604,16 +2596,15 @@
|
|||||||
"faye-websocket": "0.11.1",
|
"faye-websocket": "0.11.1",
|
||||||
"fuse.js": "2.6.1",
|
"fuse.js": "2.6.1",
|
||||||
"highlight.js": "9.12.0",
|
"highlight.js": "9.12.0",
|
||||||
"keytar": "3.0.2",
|
|
||||||
"lzma": "2.3.2",
|
"lzma": "2.3.2",
|
||||||
"marked": "0.3.12",
|
"marked": "0.3.9",
|
||||||
"node-hid": "0.5.7",
|
"node-hid": "0.5.7",
|
||||||
"postcss": "6.0.16",
|
"postcss": "6.0.15",
|
||||||
"request": "2.83.0",
|
"request": "2.83.0",
|
||||||
"rimraf": "2.5.4",
|
"rimraf": "2.5.4",
|
||||||
"rtlcss": "2.2.1",
|
"rtlcss": "2.2.1",
|
||||||
"serialport": "4.0.7",
|
"serialport": "4.0.7",
|
||||||
"uglify-js": "3.3.5"
|
"uglify-js": "3.3.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-styles": {
|
"ansi-styles": {
|
||||||
@ -2650,9 +2641,9 @@
|
|||||||
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
|
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
|
||||||
},
|
},
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "6.0.16",
|
"version": "6.0.15",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.15.tgz",
|
||||||
"integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==",
|
"integrity": "sha512-v/SpyMzLbtkmh45zUdaqLAaqXqzPdSrw8p4cQVO0/w6YiYfpj4k+Wkzhn68qk9br+H+0qfddhdPEVnbmBPfXVQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"chalk": "2.3.0",
|
"chalk": "2.3.0",
|
||||||
"source-map": "0.6.1",
|
"source-map": "0.6.1",
|
||||||
@ -2704,9 +2695,9 @@
|
|||||||
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
|
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
|
||||||
},
|
},
|
||||||
"randombytes": {
|
"randombytes": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
|
||||||
"integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
|
"integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "5.1.1"
|
"safe-buffer": "5.1.1"
|
||||||
}
|
}
|
||||||
@ -2716,14 +2707,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
|
||||||
"integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
|
"integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"randombytes": "2.0.6",
|
"randombytes": "2.0.5",
|
||||||
"safe-buffer": "5.1.1"
|
"safe-buffer": "5.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rc": {
|
"rc": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz",
|
||||||
"integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=",
|
"integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"deep-extend": "0.4.2",
|
"deep-extend": "0.4.2",
|
||||||
@ -4319,7 +4310,7 @@
|
|||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"bl": "1.2.1",
|
"bl": "1.2.1",
|
||||||
"end-of-stream": "1.4.1",
|
"end-of-stream": "1.4.0",
|
||||||
"readable-stream": "2.3.3",
|
"readable-stream": "2.3.3",
|
||||||
"xtend": "4.0.1"
|
"xtend": "4.0.1"
|
||||||
}
|
}
|
||||||
@ -4431,9 +4422,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"uglify-js": {
|
"uglify-js": {
|
||||||
"version": "3.3.5",
|
"version": "3.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.4.tgz",
|
||||||
"integrity": "sha512-ZebM2kgBL/UI9rKeAbsS2J0UPPv7SBy5hJNZml/YxB1zC6JK8IztcPs+cxilE4pu0li6vadVSFqiO7xFTKuSrg==",
|
"integrity": "sha512-hfIwuAQI5dlXP30UtdmWoYF9k+ypVqBXIdmd6ZKBiaNHHvA8ty7ZloMe3+7S5AEKVkxHbjByl4DfRHQ7QpZquw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"commander": "2.12.2",
|
"commander": "2.12.2",
|
||||||
"source-map": "0.6.1"
|
"source-map": "0.6.1"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pxt-ev3",
|
"name": "pxt-ev3",
|
||||||
"version": "0.0.60",
|
"version": "0.0.57",
|
||||||
"description": "LEGO Mindstorms EV3 for Microsoft MakeCode",
|
"description": "LEGO Mindstorms EV3 for Microsoft MakeCode",
|
||||||
"private": true,
|
"private": true,
|
||||||
"keywords": [
|
"keywords": [
|
||||||
@ -45,7 +45,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"pxt-common-packages": "0.15.4",
|
"pxt-common-packages": "0.15.4",
|
||||||
"pxt-core": "3.0.8"
|
"pxt-core": "3.0.5"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "node node_modules/pxt-core/built/pxt.js travis"
|
"test": "node node_modules/pxt-core/built/pxt.js travis"
|
||||||
|
@ -18,7 +18,8 @@
|
|||||||
"libs/chassis",
|
"libs/chassis",
|
||||||
"libs/ev3",
|
"libs/ev3",
|
||||||
"libs/tests",
|
"libs/tests",
|
||||||
"libs/behaviors"
|
"libs/behaviors",
|
||||||
|
"libs/matrix"
|
||||||
],
|
],
|
||||||
"simulator": {
|
"simulator": {
|
||||||
"autoRun": true,
|
"autoRun": true,
|
||||||
|
@ -30,8 +30,8 @@ namespace pxsim {
|
|||||||
data,
|
data,
|
||||||
beforeMemRead: () => {
|
beforeMemRead: () => {
|
||||||
//console.log("analog before read");
|
//console.log("analog before read");
|
||||||
util.map16Bit(data, AnalogOff.BatteryTemp, 21);
|
data[AnalogOff.BatteryTemp] = 21; // TODO simulate this
|
||||||
util.map16Bit(data, AnalogOff.BatteryCurrent, 900);
|
data[AnalogOff.BatteryCurrent] = 100; // TODO simulate this
|
||||||
const inputNodes = ev3board().getInputNodes();
|
const inputNodes = ev3board().getInputNodes();
|
||||||
for (let port = 0; port < DAL.NUM_INPUTS; port++) {
|
for (let port = 0; port < DAL.NUM_INPUTS; port++) {
|
||||||
const node = inputNodes[port];
|
const node = inputNodes[port];
|
||||||
|
@ -40,10 +40,6 @@ namespace pxsim {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setSpeedCmd(cmd: DAL, values: number[]) {
|
setSpeedCmd(cmd: DAL, values: number[]) {
|
||||||
if (this.speedCmd != cmd ||
|
|
||||||
JSON.stringify(this.speedCmdValues) != JSON.stringify(values))
|
|
||||||
this.setChangedState();
|
|
||||||
// new command TODO: values
|
|
||||||
this.speedCmd = cmd;
|
this.speedCmd = cmd;
|
||||||
this.speedCmdValues = values;
|
this.speedCmdValues = values;
|
||||||
this.speedCmdTacho = this.angle;
|
this.speedCmdTacho = this.angle;
|
||||||
|
@ -50,15 +50,6 @@ namespace pxsim.visuals {
|
|||||||
fill:#5A5A5A;
|
fill:#5A5A5A;
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-drag, .sim-text, .sim-text-pin {
|
|
||||||
user-drag: none;
|
|
||||||
user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-webkit-user-drag: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Color Grid */
|
/* Color Grid */
|
||||||
.sim-color-grid-circle:hover {
|
.sim-color-grid-circle:hover {
|
||||||
stroke-width: 0.4;
|
stroke-width: 0.4;
|
||||||
|
@ -173,15 +173,15 @@ namespace pxsim.visuals {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inject all ports
|
// Inject all ports
|
||||||
this.setInput(0, new PortView(0, '1'));
|
this.setInput(0, new PortView(0, 'A'));
|
||||||
this.setInput(1, new PortView(1, '2'));
|
this.setInput(1, new PortView(1, 'B'));
|
||||||
this.setInput(2, new PortView(2, '3'));
|
this.setInput(2, new PortView(2, 'C'));
|
||||||
this.setInput(3, new PortView(3, '4'));
|
this.setInput(3, new PortView(3, 'D'));
|
||||||
|
|
||||||
this.setOutput(0, new PortView(0, 'A'));
|
this.setOutput(0, new PortView(0, '1'));
|
||||||
this.setOutput(1, new PortView(1, 'B'));
|
this.setOutput(1, new PortView(1, '2'));
|
||||||
this.setOutput(2, new PortView(2, 'C'));
|
this.setOutput(2, new PortView(2, '3'));
|
||||||
this.setOutput(3, new PortView(3, 'D'));
|
this.setOutput(3, new PortView(3, '4'));
|
||||||
|
|
||||||
return this.contentGroup;
|
return this.contentGroup;
|
||||||
}
|
}
|
||||||
|
@ -34,14 +34,14 @@ namespace pxsim.visuals {
|
|||||||
this.syncedLabelG = pxsim.svg.child(this.element, 'g', {'transform': 'scale(0.5)'}) as SVGGElement;
|
this.syncedLabelG = pxsim.svg.child(this.element, 'g', {'transform': 'scale(0.5)'}) as SVGGElement;
|
||||||
pxsim.svg.child(this.syncedLabelG, 'rect', {'rx': 15, 'ry': 15, 'x': 0, 'y': 0, 'width': 84, 'height': 34, 'fill': '#A8A9A8'});
|
pxsim.svg.child(this.syncedLabelG, 'rect', {'rx': 15, 'ry': 15, 'x': 0, 'y': 0, 'width': 84, 'height': 34, 'fill': '#A8A9A8'});
|
||||||
pxsim.svg.child(this.syncedLabelG, 'circle', {'cx': 17, 'cy': 17, 'r': 15, 'fill': 'white'});
|
pxsim.svg.child(this.syncedLabelG, 'circle', {'cx': 17, 'cy': 17, 'r': 15, 'fill': 'white'});
|
||||||
const leftLabel = pxsim.svg.child(this.syncedLabelG, 'text', {'transform': 'translate(11, 22)', 'class': 'no-drag', 'style': 'isolation: isolate;font-size: 16px;fill: #A8A9A8;font-family: ArialMT, Arial'});
|
const leftLabel = pxsim.svg.child(this.syncedLabelG, 'text', {'transform': 'translate(11, 22)', 'style': 'isolation: isolate;font-size: 16px;fill: #A8A9A8;font-family: ArialMT, Arial'});
|
||||||
leftLabel.textContent = a;
|
leftLabel.textContent = a;
|
||||||
|
|
||||||
pxsim.svg.child(this.syncedLabelG, 'rect', {'rx': 0, 'ry': 0, 'x': 37, 'y': 12, 'width': 10, 'height': 3, 'fill': '#ffffff'});
|
pxsim.svg.child(this.syncedLabelG, 'rect', {'rx': 0, 'ry': 0, 'x': 37, 'y': 12, 'width': 10, 'height': 3, 'fill': '#ffffff'});
|
||||||
pxsim.svg.child(this.syncedLabelG, 'rect', {'rx': 0, 'ry': 0, 'x': 37, 'y': 18, 'width': 10, 'height': 3, 'fill': '#ffffff'});
|
pxsim.svg.child(this.syncedLabelG, 'rect', {'rx': 0, 'ry': 0, 'x': 37, 'y': 18, 'width': 10, 'height': 3, 'fill': '#ffffff'});
|
||||||
|
|
||||||
pxsim.svg.child(this.syncedLabelG, 'circle', {'cx': 67, 'cy': 17, 'r': 15, 'fill': 'white'});
|
pxsim.svg.child(this.syncedLabelG, 'circle', {'cx': 67, 'cy': 17, 'r': 15, 'fill': 'white'});
|
||||||
const rightLabel = pxsim.svg.child(this.syncedLabelG, 'text', {'transform': 'translate(61, 22)', 'class': 'no-drag', 'style': 'isolation: isolate;font-size: 16px;fill: #A8A9A8;font-family: ArialMT, Arial'});
|
const rightLabel = pxsim.svg.child(this.syncedLabelG, 'text', {'transform': 'translate(61, 22)', 'style': 'isolation: isolate;font-size: 16px;fill: #A8A9A8;font-family: ArialMT, Arial'});
|
||||||
rightLabel.textContent = b;
|
rightLabel.textContent = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.blocklyFlyoutLabel .blocklyFlyoutLabelIcon {
|
.blocklyFlyoutLabel .blocklyFlyoutLabelIcon {
|
||||||
font-family: 'legoIcons' !important;
|
font-family: 'legoIcons';
|
||||||
}
|
}
|
||||||
|
|
||||||
span.blocklyTreeIcon {
|
span.blocklyTreeIcon {
|
||||||
|
Reference in New Issue
Block a user