Compare commits

...

53 Commits

Author SHA1 Message Date
80454f55c7 0.0.36 2017-12-06 16:31:06 -08:00
30e576345b more icon updates 2017-12-06 16:29:21 -08:00
dfc4c83718 resizing svg to sqaures
updates some icons
2017-12-06 16:22:31 -08:00
e25d273765 LEGO resources 2017-12-06 15:57:40 -08:00
903e98ca22 Merge pull request #70 from Microsoft/nodefaultinfrared
removing infrared from default ev3 configuration
2017-12-05 11:15:17 -08:00
8a64085288 enable language/high contrast 2017-12-05 10:53:26 -08:00
22ab1cba8d removing infrared from default ev3 configuration 2017-12-05 10:49:48 -08:00
1865ced312 Merge pull request #67 from Microsoft/note_default
Default piano note should be 1046
2017-11-30 15:41:55 -08:00
b940befe85 Default piano note should be 1046 2017-11-30 12:44:22 -08:00
c6bae5e17b missed files 2017-11-30 11:28:20 -08:00
83e4898eab Merge pull request #66 from Microsoft/gyroproject
moving gyro into separate project
2017-11-30 10:47:13 -08:00
7bdb9683c9 fixing naming 2017-11-30 10:37:59 -08:00
3c675892aa moving gyro into separate project 2017-11-30 10:34:34 -08:00
3d29c5e323 0.0.35 2017-11-30 10:16:04 -08:00
15d59269d4 bump pxt-core to 2.3.31, 2017-11-30 10:15:54 -08:00
73b5e7dc3f Merge pull request #65 from Microsoft/ultrasonicsensor
Ultrasonic/IR sensor refactoring work
2017-11-30 10:14:30 -08:00
a92edcffee adding waitUntil to buttons 2017-11-30 10:05:00 -08:00
305a650125 using threshold detector 2017-11-30 09:59:28 -08:00
34a5aeb7d2 moving IR as well 2017-11-30 09:53:43 -08:00
32f524ddd8 fixing build 2017-11-30 09:48:43 -08:00
b690c1634b updated distance detection 2017-11-30 09:41:34 -08:00
8089841892 wait until 2017-11-30 09:39:24 -08:00
3d8c697586 moving into separate project 2017-11-30 09:38:04 -08:00
e365e3d1be Merge pull request #64 from Microsoft/color-sensor
Color sensor refactoring
2017-11-30 08:55:50 -08:00
4ed41adb6a avoid conflicts of event values 2017-11-30 08:31:31 -08:00
39b7f99741 update mode selection 2017-11-30 08:20:00 -08:00
ad17191ae2 collapse reflected/ambient blocks 2017-11-29 22:47:17 -08:00
4a8633f506 updated descriptions 2017-11-29 22:11:59 -08:00
3690f409b0 docs skeleton 2017-11-29 22:09:12 -08:00
97663d2b83 updated naming 2017-11-29 21:57:05 -08:00
4d2b7ced71 moving color sensor to separate project 2017-11-29 21:41:00 -08:00
5676103052 Merge pull request #63 from Microsoft/speedispower
use speed when setting power
2017-11-29 21:22:32 -08:00
cb8c14fbb1 Allow waitForEvent on main thread; fixes #60
also use target_panic() instead of assert
2017-11-29 19:54:17 -03:00
815d438d86 use speed when setting power 2017-11-29 00:04:54 -08:00
da8de1e31e Merge pull request #56 from Microsoft/note 2017-11-28 17:00:57 -08:00
b028916025 Increment pxt-core and pxt-common-packages dependencies 2017-11-28 16:48:16 -08:00
b9be74bad8 Merge pull request #59 from Microsoft/touch
adding touch button examples
2017-11-28 16:35:48 -08:00
7e502b1749 adding bare docs 2017-11-28 16:24:22 -08:00
f22edac84d moving touch stuff into separate projects 2017-11-28 16:11:15 -08:00
ef2807a84e Fill in real min and max 2017-11-28 16:04:25 -08:00
580b40876c fixing bumped 2017-11-28 16:02:04 -08:00
b57ae5d588 implement wasPressed 2017-11-28 15:33:43 -08:00
71479d0caa adding touch button examples 2017-11-28 15:23:54 -08:00
7e39cdde9d Add a todo 2017-11-27 17:21:32 -08:00
85ca6b3698 Support for new data structure 2017-11-27 14:12:04 -08:00
2c89848fda More 2017-11-21 17:11:11 -08:00
ed1c187514 Initial work 2017-11-21 11:35:53 -08:00
52816e6de7 Merge pull request #51 from Microsoft/debugging
Add debug function
2017-11-20 10:54:44 -08:00
60ac3a9d00 0.0.34 2017-11-18 07:37:59 -08:00
d2c7a5ace0 support for wait/when 2017-11-18 07:37:46 -08:00
79fcd1c01e 0.0.33 2017-11-18 07:34:50 -08:00
2d48725c63 bump pxt-core to 2.3.28, bump pxt-common-packages to 0.14.3, 2017-11-18 07:34:40 -08:00
ead69e3c6e Add debug function 2017-11-16 16:28:10 -08:00
85 changed files with 3623 additions and 338 deletions

View File

@ -4,5 +4,12 @@ Here are some fun programs for your @boardname@!
## Fun stuff
Coming soon.
```codecard
[
{
"name": "Happy unhappy",
"description": "Keep your brick entertained and happy",
"url":"/examples/happy-unhappy",
"cardType": "example"
}]
```

View File

@ -0,0 +1,12 @@
# Happy unhappy
Use a touch sensor to make the brick happy.
```blocks
sensors.touchSensor1.onEvent(TouchSensorEvent.Pressed, function () {
brick.showImage(images.expressionsBigSmile)
})
sensors.touchSensor1.onEvent(TouchSensorEvent.Released, function () {
brick.showImage(images.expressionsSick)
})
```

View File

@ -1,3 +1,8 @@
# Reference
TODO
## See Also
[touch sensor](/reference/sensors/touch-sensor),
[color sensor](/reference/sensors/color-sensor)

View File

@ -9,6 +9,13 @@ eval("if (typeof process === 'object' && process + '' === '[object process]') px
namespace pxt.editor {
import UF2 = pxtc.UF2;
export let ev3: Ev3Wrapper
export function debug() {
return initAsync()
.then(w => w.downloadFileAsync("/tmp/dmesg.txt", v => console.log(pxt.Util.uint8ArrayToString(v))))
}
// this comes from aux/pxt.lms
const rbfTemplate = `
4c45474f580000006d000100000000001c000000000000000e000000821b038405018130813e8053
@ -19,6 +26,7 @@ namespace pxt.editor {
return pxt.HF2.mkPacketIOAsync()
.then(h => {
let w = new Ev3Wrapper(h)
ev3 = w
return w.reconnectAsync(true)
.then(() => w)
})

View File

@ -252,6 +252,13 @@ namespace pxt.editor {
return loop()
}
downloadFileAsync(path: string, cb: (d: Uint8Array) => void) {
return this.lock.enqueue("file", () =>
this.streamFileOnceAsync(path, cb))
}
private initAsync() {
return Promise.resolve()
}

BIN
legoresources/SVGassets/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,246 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="1925.358 6183.438 36.101 36.101003"
version="1.1"
id="svg41"
sodipodi:docname="Color Sensor.svg"
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\colorSensor-icon.png"
inkscape:export-xdpi="319.10471"
inkscape:export-ydpi="319.10471"
width="36.101002"
height="36.101002"
inkscape:version="0.92.1 r15371">
<metadata
id="metadata45">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1137"
id="namedview43"
showgrid="false"
inkscape:zoom="7.072009"
inkscape:cx="18.050501"
inkscape:cy="16.685499"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg41" />
<defs
id="defs22">
<style
id="style2">
.cls-1 {
fill: #a8a9a8;
}
.cls-2 {
clip-path: url(#clip-path);
}
.cls-3 {
fill: url(#linear-gradient);
}
.cls-4 {
fill: #b72b1c;
}
.cls-5 {
fill: #f2f2f2;
}
.cls-6 {
filter: url(#Path_1);
}
</style>
<clipPath
id="clip-path">
<path
id="Union_5"
data-name="Union 5"
class="cls-1"
d="m 3.907,33.37 c -1.069,0 -1.935,-0.617 -1.935,-1.377 V 27.606 H 0.758 A 0.758,0.758 0 0 1 0,26.848 V 7.129 A 0.758,0.758 0 0 1 0.758,6.371 H 1.972 V 1.377 C 1.972,0.617 2.838,0 3.907,0 h 28.287 c 1.069,0 1.935,0.617 1.935,1.377 v 4.994 h 1.213 a 0.758,0.758 0 0 1 0.759,0.758 v 19.719 a 0.758,0.758 0 0 1 -0.759,0.758 h -1.213 v 4.387 c 0,0.761 -0.867,1.377 -1.935,1.377 z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</clipPath>
<linearGradient
id="linear-gradient"
x1="16.378942"
y1="29.514856"
x2="16.378942"
y2="34.98542"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.98165674,1.018686)">
<stop
offset="0"
stop-color="#a8a9a8"
id="stop6" />
<stop
offset="1"
stop-color="#545554"
id="stop8" />
</linearGradient>
<filter
id="Path_1"
x="1918.33"
y="6177.438"
width="50.157001"
height="51.370998"
filterUnits="userSpaceOnUse">
<feOffset
dy="3"
input="SourceAlpha"
id="feOffset11" />
<feGaussianBlur
stdDeviation="3"
result="blur"
id="feGaussianBlur13" />
<feFlood
flood-opacity="0.502"
id="feFlood15" />
<feComposite
operator="in"
in2="blur"
id="feComposite17"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite19" />
</filter>
</defs>
<g
id="Color_Sensor"
data-name="Color Sensor"
transform="translate(1346,5555.3645)">
<g
id="Mask_Group_5"
data-name="Mask Group 5"
class="cls-2"
transform="translate(579.358,629.439)"
clip-path="url(#clip-path)">
<g
id="Group_4"
data-name="Group 4">
<g
id="Group_2"
data-name="Group 2">
<path
id="Path_28"
data-name="Path 28"
class="cls-1"
d="M 0.758,0 H 35.342 A 0.758,0.758 0 0 1 36.1,0.758 v 19.719 a 0.758,0.758 0 0 1 -0.758,0.758 H 0.758 A 0.758,0.758 0 0 1 0,20.477 V 0.758 A 0.758,0.758 0 0 1 0.758,0 Z"
transform="translate(0,6.371)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
<g
class="cls-6"
transform="translate(-1925.36,-6183.44)"
id="g26"
style="filter:url(#Path_1)">
<path
id="Path_1-2"
data-name="Path 1"
class="cls-3"
d="m 1.935,0 h 28.287 c 1.069,0 1.935,0.617 1.935,1.377 v 30.616 c 0,0.761 -0.866,1.377 -1.935,1.377 H 1.935 C 0.866,33.371 0,32.754 0,31.993 V 1.377 C 0,0.617 0.866,0 1.935,0 Z"
transform="translate(1927.33,6183.44)"
inkscape:connector-curvature="0"
style="fill:url(#linear-gradient)" />
</g>
<rect
id="Rectangle_2"
data-name="Rectangle 2"
width="0.75800002"
height="6.0669999"
transform="translate(34.584,9.404)"
x="0"
y="0" />
<rect
id="Rectangle_5"
data-name="Rectangle 5"
width="0.75800002"
height="6.0669999"
transform="translate(0.91,9.404)"
x="0"
y="0" />
<rect
id="Rectangle_3"
data-name="Rectangle 3"
width="0.75800002"
height="6.0669999"
transform="translate(34.584,18.05)"
x="0"
y="0" />
<rect
id="Rectangle_4"
data-name="Rectangle 4"
width="0.75800002"
height="6.0669999"
transform="translate(0.91,18.05)"
x="0"
y="0" />
</g>
<path
id="Union_1"
data-name="Union 1"
class="cls-4"
d="m 2.579,17.747 a 7,7 0 0 1 0.16,-1.494 9.556,9.556 0 1 1 13.634,0 6.978,6.978 0 1 1 -13.794,1.494 z"
transform="translate(8.494,4.096)"
inkscape:connector-curvature="0"
style="fill:#b72b1c" />
<path
id="Union_2"
data-name="Union 2"
d="M 2.67,16.308 A 5.374,5.374 0 0 1 3.042,14.337 8.039,8.039 0 1 1 13.064,14.315 5.388,5.388 0 1 1 2.67,16.308 Z"
transform="translate(10.011,5.534)"
inkscape:connector-curvature="0" />
<g
id="Group_3"
data-name="Group 3"
transform="translate(14.41,10.163)">
<circle
id="Ellipse_5"
data-name="Ellipse 5"
class="cls-5"
cx="3.6400001"
cy="3.6400001"
r="3.6400001"
style="fill:#f2f2f2" />
<circle
id="Ellipse_6"
data-name="Ellipse 6"
class="cls-5"
cx="1.972"
cy="1.972"
transform="translate(1.669,9.556)"
r="1.972"
style="fill:#f2f2f2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -0,0 +1,146 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1549 6115.496 110.729 170.038">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-2 {
fill: #f2f2f2;
}
.cls-3 {
fill: url(#linear-gradient-2);
}
.cls-4 {
fill: #3c3c3c;
}
.cls-5 {
fill: #a0b5a6;
}
.cls-6 {
fill: url(#linear-gradient-3);
}
.cls-7 {
fill: #6a6a6a;
}
.cls-8 {
fill: url(#linear-gradient-4);
}
.cls-9 {
fill: #a8a9a8;
}
.cls-10 {
fill: #9a9a9a;
}
.cls-11 {
fill: url(#linear-gradient-5);
}
.cls-12 {
fill: gray;
}
.cls-13 {
fill: #fff;
}
.cls-14 {
clip-path: url(#clip-path);
}
.cls-15 {
fill: #ffed00;
}
.cls-16 {
fill: #b72b1c;
}
.cls-17 {
fill: #1d1d1b;
}
</style>
<linearGradient id="linear-gradient" x1="0.5" y1="0.942" x2="0.5" y2="1.018" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#f2f2f2"/>
<stop offset="1" stop-color="#797979"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.5" y1="0.924" x2="0.5" y2="0.948" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#a8a9a8"/>
<stop offset="1" stop-color="gray"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.5" y1="0.807" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#a8a9a8"/>
<stop offset="1" stop-color="#545554"/>
</linearGradient>
<linearGradient id="linear-gradient-4" x1="0.5" y1="0.948" x2="0.5" y2="0.059" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#6a6a6a"/>
<stop offset="0.522" stop-color="#8ce300"/>
<stop offset="1" stop-color="#6a6a6a"/>
</linearGradient>
<linearGradient id="linear-gradient-5" x1="0.5" y1="0.363" x2="0.5" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#747474"/>
<stop offset="1" stop-color="#3c3c3c"/>
</linearGradient>
<clipPath id="clip-path">
<rect id="Rectangle_32" data-name="Rectangle 32" width="12.383" height="12.383"/>
</clipPath>
</defs>
<g id="EV3" transform="translate(1346 5554)">
<g id="brick" transform="translate(203 561.496)">
<path id="Path_19" data-name="Path 19" class="cls-1" d="M1.972,0H108.758a1.972,1.972,0,0,1,1.972,1.972V104.965a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,104.965V1.972A1.972,1.972,0,0,1,1.972,0Z" transform="translate(0 31.702)"/>
<path id="Path_20" data-name="Path 20" class="cls-2" d="M1.972,0H96.319a1.972,1.972,0,0,1,1.972,1.972V40.5a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,40.5V1.972A1.972,1.972,0,0,1,1.972,0Z" transform="translate(6.219 127.566)"/>
<path id="Path_18" data-name="Path 18" class="cls-3" d="M1.972,0H98.14a1.972,1.972,0,0,1,1.972,1.972V77.207a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,77.207V1.972A1.972,1.972,0,0,1,1.972,0Z" transform="translate(5.309)"/>
<path id="Path_17" data-name="Path 17" class="cls-4" d="M3.792,0H78.269a3.792,3.792,0,0,1,3.792,3.792V45.657a3.792,3.792,0,0,1-3.792,3.792H3.792A3.792,3.792,0,0,1,0,45.657V3.792A3.792,3.792,0,0,1,3.792,0Z" transform="translate(14.41 10.466)"/>
<path id="Path_16" data-name="Path 16" class="cls-5" d="M2.73,0H65.983a2.73,2.73,0,0,1,2.73,2.73V43.078a2.73,2.73,0,0,1-2.73,2.73H2.73A2.73,2.73,0,0,1,0,43.078V2.73A2.73,2.73,0,0,1,2.73,0Z" transform="translate(21.236 12.438)"/>
<path id="Path_21" data-name="Path 21" class="cls-6" d="M0,0H98.291V21.387a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,21.387Z" transform="translate(6.219 146.679)"/>
</g>
<g id="buttons" transform="translate(216.197 621.259)">
<path id="Union_4" data-name="Union 4" class="cls-7" d="M25.938,48.842c-5.585-5.391-14.259-14.258-14.259-14.258V32.764H8.267a8.266,8.266,0,1,1,0-16.533h3.413V14.41L25.786,0H39.893C46.282,6.511,54,14.107,54,14.107v2.124h3.261a8.266,8.266,0,0,1,0,16.533H54v1.821c-7.514,7.729-13.955,14.258-13.955,14.258Z" transform="translate(9.556 25.331)"/>
<path id="light" class="cls-8" d="M25.938,48.842c-5.585-5.391-14.259-14.258-14.259-14.258V32.764H8.267a8.266,8.266,0,1,1,0-16.533h3.413V14.41L25.787,0H39.893C46.282,6.511,54,14.107,54,14.107v2.124h3.261a8.266,8.266,0,0,1,0,16.533H54v1.821c-7.514,7.729-13.955,14.258-13.955,14.258Z" transform="translate(9.556 25.331)"/>
<path id="Rectangle_23" data-name="Rectangle 23" class="cls-9" d="M6.143,0h10.39a0,0,0,0,1,0,0V12.286a0,0,0,0,1,0,0H6.143A6.143,6.143,0,0,1,0,6.143v0A6.143,6.143,0,0,1,6.143,0Z" transform="translate(11.528 43.533)"/>
<path id="Rectangle_24" data-name="Rectangle 24" class="cls-9" d="M6.143,0h10.39a0,0,0,0,1,0,0V12.286a0,0,0,0,1,0,0H6.143A6.143,6.143,0,0,1,0,6.143v0A6.143,6.143,0,0,1,6.143,0Z" transform="translate(72.96 55.82) rotate(180)"/>
<path id="Path_42" data-name="Path 42" class="cls-4" d="M.455,0H12.438a.455.455,0,0,1,.455.455V11.831a.455.455,0,0,1-.455.455H.455A.455.455,0,0,1,0,11.831V.455A.455.455,0,0,1,.455,0Z" transform="translate(35.797 43.533)"/>
<path id="Path_15" data-name="Path 15" class="cls-9" d="M-98.892-1598.849l12.741-.152,9.556,9.859-3.944,3.944v7.129h-3.64v-4.1a3.058,3.058,0,0,0-3.034-3.034c-2.961-.047-11.073,0-11.073,0a2.468,2.468,0,0,0-2.579,2.578v4.551h-3.64v-7.129l-3.944-3.944Z" transform="translate(134.841 1626.455)"/>
<path id="Path_16-2" data-name="Path 16" class="cls-9" d="M9.624.095,22.286,0l9.582,9.851-4,3.907v7.17h-3.6V16.815a3.065,3.065,0,0,0-3.026-3.058c-2.961-.047-11.011,0-11.011,0a2.6,2.6,0,0,0-2.65,2.65v4.521H3.907v-7.17L0,9.851Z" transform="translate(58.26 71.876) rotate(180)"/>
<rect id="Rectangle_26" data-name="Rectangle 26" class="cls-4" width="3.034" height="13.803" transform="translate(40.803)"/>
<rect id="Rectangle_10" data-name="Rectangle 10" class="cls-10" width="3.034" height="6.067" transform="translate(40.803 13.197)"/>
<rect id="Rectangle_12" data-name="Rectangle 12" class="cls-11" width="3.034" height="6.219" transform="translate(40.803 13.197)"/>
<rect id="Rectangle_11" data-name="Rectangle 11" class="cls-12" width="3.034" height="5.916" transform="translate(40.803 19.416)"/>
<path id="Path_15-2" data-name="Path 15" class="cls-9" d="M0,0H23.663V5.714c-2.618,2.638-5.976,5.965-5.976,5.965H1.972A1.972,1.972,0,0,1,0,9.708Z" transform="translate(0 19.416)"/>
</g>
<g id="LEGO_logo" data-name="LEGO logo" transform="translate(289.475 711.071)">
<rect id="Rectangle_31" data-name="Rectangle 31" class="cls-13" width="12.208" height="12.208" transform="translate(0.087 0.087)"/>
<g id="Group_15" data-name="Group 15">
<g id="Group_10" data-name="Group 10" class="cls-14">
<path id="Path_18-2" data-name="Path 18" class="cls-15" d="M.4,12.608H12.608V.4H.4ZM11.8,5.467a5.136,5.136,0,0,1-.24,1.179c-.437,1.267-.917,2.075-2.075,2.075a1.131,1.131,0,0,1-1.157-.7l-.044-.153L8.2,7.978A1.873,1.873,0,0,1,6.733,8.7a1.287,1.287,0,0,1-1.026-.437l-.066-.087-.066.066a1.589,1.589,0,0,1-1.157.415,1.317,1.317,0,0,1-.961-.371L3.37,8.262,3.3,8.327A1.556,1.556,0,0,1,2.191,8.7a.878.878,0,0,1-.961-.9A8.05,8.05,0,0,1,2.322,4.7a1.027,1.027,0,0,1,.917-.524.8.8,0,0,1,.568.175c.109.109.109.2.131.415l.022.284.153-.24a1.611,1.611,0,0,1,1.529-.655,1.05,1.05,0,0,1,.9.371l.044.087.066-.066a1.808,1.808,0,0,1,1.2-.393,1.52,1.52,0,0,1,1.114.371.762.762,0,0,1,.131.2l.066.109.087-.109a1.6,1.6,0,0,1,1.31-.568,1.258,1.258,0,0,1,.983.349,1.352,1.352,0,0,1,.262.961" transform="translate(-0.313 -0.313)"/>
</g>
<g id="Group_11" data-name="Group 11" class="cls-14">
<path id="Path_19-2" data-name="Path 19" class="cls-16" d="M.4,12.608H12.608V.4H.4ZM12.149,5.947a6.83,6.83,0,0,1-.524,1.594,2.28,2.28,0,0,1-2.1,1.551,1.694,1.694,0,0,1-1.354-.546,2.194,2.194,0,0,1-1.485.546A1.764,1.764,0,0,1,5.6,8.742a2.182,2.182,0,0,1-1.223.349,1.781,1.781,0,0,1-1.026-.306,2.2,2.2,0,0,1-1.179.306A1.285,1.285,0,0,1,.815,7.847,8.327,8.327,0,0,1,1.994,4.506a1.407,1.407,0,0,1,1.245-.743c.59,0,.786.175.9.371A2.259,2.259,0,0,1,5.6,3.741a1.5,1.5,0,0,1,1,.328,2.393,2.393,0,0,1,1.2-.306,1.731,1.731,0,0,1,1.354.459,2.039,2.039,0,0,1,1.332-.437,1.566,1.566,0,0,1,1.376.611,1.8,1.8,0,0,1,.284,1.551" transform="translate(-0.313 -0.313)"/>
</g>
<g id="Group_12" data-name="Group 12" class="cls-14">
<path id="Path_20-2" data-name="Path 20" class="cls-17" d="M0,12.383H12.383V0H0Zm12.208-.175H.175V.175H12.208Z"/>
</g>
<g id="Group_13" data-name="Group 13" class="cls-14">
<path id="Path_21-2" data-name="Path 21" class="cls-17" d="M52.962,15.984V15.9h.066c.044,0,.066.022.066.044s-.022.044-.066.044Zm.2.175-.044-.066q-.033-.066-.066-.066h0a.094.094,0,0,0,.087-.087.08.08,0,0,0-.087-.087H52.9v.306h.066v-.131h.022c.022,0,.044,0,.044.022.022.022.022.044.044.066l.022.044Zm-.153-.393a.24.24,0,1,1-.24.24.258.258,0,0,1,.24-.24m0-.066a.306.306,0,1,0,.306.306.312.312,0,0,0-.306-.306" transform="translate(-41.191 -12.271)"/>
</g>
<g id="Group_14" data-name="Group 14" class="cls-14">
<path id="Path_22" data-name="Path 22" class="cls-17" d="M13.189,17.122a1.713,1.713,0,0,0-1.376.611.557.557,0,0,0-.153-.218A1.442,1.442,0,0,0,10.5,17.1a1.858,1.858,0,0,0-1.245.415A1.089,1.089,0,0,0,8.3,17.1a1.68,1.68,0,0,0-1.594.7.539.539,0,0,0-.153-.459.883.883,0,0,0-.633-.2,1.1,1.1,0,0,0-.983.568A8.8,8.8,0,0,0,3.8,20.878a.966.966,0,0,0,1.048.961,1.516,1.516,0,0,0,1.179-.393,1.316,1.316,0,0,0,1,.393,1.582,1.582,0,0,0,1.223-.459,1.378,1.378,0,0,0,1.092.459,1.913,1.913,0,0,0,1.529-.764,1.2,1.2,0,0,0,1.245.743c1.2,0,1.725-.83,2.162-2.118a4.449,4.449,0,0,0,.262-1.2,1.207,1.207,0,0,0-1.354-1.376M5.218,20.4c.611-.109.786.109.764.328-.066.611-.633.764-1.114.743a.626.626,0,0,1-.7-.59,8.208,8.208,0,0,1,1.07-2.97.709.709,0,0,1,.677-.393c.306,0,.371.153.371.328A14.253,14.253,0,0,1,5.218,20.4m2.009-.568c-.044.109-.109.349-.175.59a2.42,2.42,0,0,1,.611-.087c.306,0,.48.131.48.371,0,.59-.655.764-1.114.764a.845.845,0,0,1-.939-.83,6.135,6.135,0,0,1,.677-2.271,1.372,1.372,0,0,1,1.529-.9c.306,0,.677.131.677.437,0,.415-.349.568-.677.59a3.851,3.851,0,0,1-.5,0,3.871,3.871,0,0,0-.24.48c.633-.087.9.044.786.415-.153.5-.59.524-1.114.437m3.123-1.551a.472.472,0,0,0-.371.218,6.165,6.165,0,0,0-.633,1.725c-.044.284.087.349.218.349.218,0,.459-.24.546-.611,0,0-.415,0-.306-.371s.328-.437.677-.459c.7-.022.633.48.568.764a1.8,1.8,0,0,1-1.7,1.594.89.89,0,0,1-.983-.961,4.914,4.914,0,0,1,.393-1.551c.371-.874.764-1.485,1.769-1.485.59,0,1.07.218,1,.764a.658.658,0,0,1-.633.677c-.109,0-.524,0-.393-.415.022-.131.044-.24-.153-.24m3.756.743a7.171,7.171,0,0,1-.59,1.616,1.409,1.409,0,0,1-1.376.852c-.437,0-.939-.175-.939-.852A5.286,5.286,0,0,1,11.595,19c.306-.83.633-1.507,1.66-1.485,1.157,0,.939,1.048.852,1.507m-.852-.524a9.808,9.808,0,0,1-.633,1.856.328.328,0,0,1-.306.218c-.131,0-.175-.087-.2-.2a7.657,7.657,0,0,1,.7-1.944c.087-.131.175-.153.262-.131.175,0,.175.109.175.2" transform="translate(-2.969 -13.366)"/>
</g>
</g>
</g>
<g id="EV3_logo" data-name="EV3 logo" transform="translate(215.286 714.697)">
<path id="Path_12" data-name="Path 12" class="cls-2" d="M72.066,1.849a.183.183,0,0,1,.191.164h0v.847A.153.153,0,0,1,72.094,3H70.071a.366.366,0,0,0-.383.328V4.473a.346.346,0,0,0,.383.3h2.023c.191,0,.164.137.164.137v.82c0,.082-.055.137-.164.137H68.677a.187.187,0,0,1-.191-.191V5.621a.391.391,0,0,0-.383-.383H66.983a.391.391,0,0,0-.383.383v1.64a.366.366,0,0,0,.383.328h6.751a.346.346,0,0,0,.383-.3V.4a.346.346,0,0,0-.383-.3H67.01a.346.346,0,0,0-.383.3V2.068a.387.387,0,0,0,.355.383H68.1a.362.362,0,0,0,.355-.355V2.041a.173.173,0,0,1,.191-.191h3.417Z" transform="translate(-48.397 -0.073)"/>
<path id="Path_13" data-name="Path 13" class="cls-2" d="M39.03,0H37.445c-.246,0-.328.164-.437.383L35.067,4.756a.23.23,0,0,1-.191.109.206.206,0,0,1-.191-.137L32.744.383C32.635.164,32.525,0,32.279,0H30.667c-.355,0-.41.191-.3.41l3.2,6.724c.164.328.273.383.574.383h1.421a.546.546,0,0,0,.574-.383L39.358.41c.109-.219.027-.41-.328-.41" transform="translate(-22.029)"/>
<path id="Path_14" data-name="Path 14" class="cls-2" d="M7.106,2.97a.346.346,0,0,1,.383.3V4.446a.346.346,0,0,1-.383.3H2.05c-.109,0-.191.055-.191.137h0V5.7h0c0,.082.082.137.191.137H7.106a.346.346,0,0,1,.383.3V7.288a.336.336,0,0,1-.355.3H.383A.346.346,0,0,1,0,7.288V.4A.346.346,0,0,1,.383.1H7.134a.319.319,0,0,1,.355.3V1.549a.319.319,0,0,1-.355.3H2.077c-.109,0-.219.027-.219.137v.847c0,.082.082.137.191.137Z" transform="translate(0 -0.073)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,647 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="2135.306 6140.141 153.634 153.634"
version="1.1"
id="svg7024"
sodipodi:docname="Large Motor.svg"
width="153.634"
height="153.634"
inkscape:version="0.92.1 r15371">
<metadata
id="metadata7028">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1137"
id="namedview7026"
showgrid="false"
inkscape:zoom="1.5361183"
inkscape:cx="39.260502"
inkscape:cy="76.817001"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7024" />
<defs
id="defs6971">
<style
id="style6897">
.cls-1 {
fill: #a8a9a8;
}
.cls-2 {
clip-path: url(#clip-path);
}
.cls-3 {
fill: #fff;
}
.cls-4 {
clip-path: url(#clip-path-2);
}
.cls-5 {
fill: #f2f2f2;
}
.cls-6 {
clip-path: url(#clip-path-3);
}
.cls-7 {
fill: #6a6a6a;
}
.cls-8 {
fill: #9a9a9a;
}
.cls-9 {
fill: #b72b1c;
}
.cls-10 {
fill: #3c3c3c;
}
.cls-11 {
fill: #242424;
}
.cls-12 {
filter: url(#rød);
}
.cls-13 {
filter: url(#Path_4);
}
.cls-14 {
filter: url(#Path_1-2);
}
.cls-15 {
filter: url(#Path_2);
}
.cls-16 {
filter: url(#Path_1);
}
.cls-17 {
filter: url(#Path_34);
}
</style>
<clipPath
id="clip-path">
<path
id="Union_6"
data-name="Union 6"
class="cls-1"
d="M 0,136.571 A 17.07,17.07 0 0 1 14.122,119.759 L 13.757,119.371 13.747,83.6 c 0,-0.419 0.142,-0.4 0.392,-0.673 L 25.043,72.4 V 62.372 l -0.75,-0.775 V 60.8 H 17.5 a 4,4 0 0 1 -4,-4 V 30.978 a 4,4 0 0 1 4,-4 h 6.793 V 18.8 a 5.784,5.784 0 0 1 5.784,-5.784 h 6.508 V 5.446 A 4,4 0 0 1 39.477,1.6 v -1 A 0.607,0.607 0 0 1 40.084,0 h 26.262 a 0.607,0.607 0 0 1 0.607,0.607 v 1.282 a 4,4 0 0 1 2.169,3.557 v 7.569 h 3.615 A 5.784,5.784 0 0 1 78.521,18.8 V 48.44 C 68.153,62.5 60.394,72.305 60.394,72.305 H 59.8 c 0,0 -7.092,-0.053 -13.682,-0.1 l 0.034,11.8 h 6.882 a 4,4 0 0 1 4,4 v 25.826 a 4,4 0 0 1 -4,4 h -6.785 l 0.034,11.775 c 0,0.838 -0.155,0.838 -0.462,1.137 l -10.415,10.099 -0.212,0.191 A 1.518,1.518 0 0 1 33.6,140.8 17.067,17.067 0 0 1 0,136.571 Z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</clipPath>
<filter
id="Path_34"
x="2168.8911"
y="6138.5869"
width="38.536999"
height="21.907"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset6901" />
<feGaussianBlur
stdDeviation="1"
result="blur"
id="feGaussianBlur6903" />
<feFlood
flood-opacity="0.502"
id="feFlood6905" />
<feComposite
operator="in"
in2="blur"
id="feComposite6907"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite6909" />
</filter>
<filter
id="Path_1"
x="2146.053"
y="6207.1338"
width="38.536999"
height="77.177002"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset6912" />
<feGaussianBlur
stdDeviation="1"
result="blur-2"
id="feGaussianBlur6914" />
<feFlood
flood-opacity="0.502"
id="feFlood6916" />
<feComposite
operator="in"
in2="blur-2"
id="feComposite6918"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite6920" />
</filter>
<filter
id="Path_2"
x="2157.3491"
y="6198.8062"
width="27.028999"
height="28.403"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset6923" />
<feGaussianBlur
stdDeviation="1"
result="blur-3"
id="feGaussianBlur6925" />
<feFlood
flood-opacity="0.502"
id="feFlood6927" />
<feComposite
operator="in"
in2="blur-3"
id="feComposite6929"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite6931" />
</filter>
<filter
id="Path_1-2"
x="2156.6001"
y="6150.1548"
width="60.229"
height="65.290001"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset6934" />
<feGaussianBlur
stdDeviation="1"
result="blur-4"
id="feGaussianBlur6936" />
<feFlood
flood-opacity="0.502"
id="feFlood6938" />
<feComposite
operator="in"
in2="blur-4"
id="feComposite6940"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite6942" />
</filter>
<clipPath
id="clip-path-2">
<path
id="Path_9"
data-name="Path 9"
class="cls-1"
d="m 5.784,0 h 42.66 a 5.784,5.784 0 0 1 5.784,5.784 v 29.64 C 43.86,49.487 36.1,59.29 36.1,59.29 h -0.595 c 0,0 -19.462,-0.147 -23.864,-0.147 A 2.28,2.28 0 0 1 9.263,58.158 L 0,48.582 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</clipPath>
<filter
id="Path_4"
x="2162.384"
y="6155.2168"
width="48.66"
height="54.444"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset6947" />
<feGaussianBlur
stdDeviation="1"
result="blur-5"
id="feGaussianBlur6949" />
<feFlood
flood-opacity="0.502"
id="feFlood6951" />
<feComposite
operator="in"
in2="blur-5"
id="feComposite6953"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite6955" />
</filter>
<clipPath
id="clip-path-3">
<path
id="Path_10"
data-name="Path 10"
class="cls-1"
d="M 5.784,0 H 36.875 A 5.784,5.784 0 0 1 42.66,5.784 V 28.032 C 34.013,39.3 27.1,48.444 27.1,48.444 H 5.784 A 5.784,5.784 0 0 1 0,42.66 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</clipPath>
<filter
id="rød"
x="2132.3059"
y="6256.646"
width="40.129002"
height="40.129002"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset6960" />
<feGaussianBlur
stdDeviation="1"
result="blur-6"
id="feGaussianBlur6962" />
<feFlood
flood-opacity="0.502"
id="feFlood6964" />
<feComposite
operator="in"
in2="blur-6"
id="feComposite6966"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite6968" />
</filter>
</defs>
<g
id="Large_Motor"
data-name="Large Motor"
transform="translate(1383.553,5554.0014)">
<g
id="Mask_Group_6"
data-name="Mask Group 6"
class="cls-2"
transform="translate(789.306,586.141)"
clip-path="url(#clip-path)">
<g
id="Large_motor-2"
data-name="Large motor"
transform="translate(-1.623)">
<path
id="Path_45"
data-name="Path 45"
class="cls-1"
d="m 5.461,0 h 5.612 a 5.461,5.461 0 0 1 5.461,5.461 v 22.9 a 5.461,5.461 0 0 1 -5.461,5.461 H 5.461 A 5.461,5.461 0 0 1 0,28.365 V 5.461 A 5.461,5.461 0 0 1 5.461,0 Z"
transform="translate(42.123,84.012)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
<circle
id="Ellipse_2"
data-name="Ellipse 2"
class="cls-3"
cx="3.7920001"
cy="3.7920001"
transform="translate(49.555,85.528)"
r="3.7920001"
style="fill:#ffffff" />
<circle
id="Ellipse_1"
data-name="Ellipse 1"
class="cls-3"
cx="3.7920001"
cy="3.7920001"
transform="translate(49.555,108.736)"
r="3.7920001"
style="fill:#ffffff" />
<path
id="Path_36"
data-name="Path 36"
class="cls-1"
d="m 0.607,0 h 26.262 a 0.607,0.607 0 0 1 0.607,0.607 V 5.9 A 0.607,0.607 0 0 1 26.869,6.507 H 0.607 A 0.607,0.607 0 0 1 0,5.9 V 0.607 A 0.607,0.607 0 0 1 0.607,0 Z"
transform="translate(41.1)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
<g
class="cls-17"
transform="translate(-2133.68,-6140.14)"
id="g6978"
style="filter:url(#Path_34)">
<path
id="Path_34-2"
data-name="Path 34"
class="cls-1"
d="M 0.607,0 H 31.93 a 0.607,0.607 0 0 1 0.607,0.607 V 15.3 A 0.607,0.607 0 0 1 31.93,15.907 H 0.607 A 0.607,0.607 0 0 1 0,15.3 V 0.607 A 0.607,0.607 0 0 1 0.607,0 Z"
transform="translate(2171.89,6141.59)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</g>
<path
id="Path_2-2"
data-name="Path 2"
class="cls-3"
d="m 5610.158,939.234 a 4.151,4.151 0 0 1 -2.342,0.705 5.131,5.131 0 0 1 -2.988,-0.705 c -1.257,-0.931 -1.229,0.1 -1.229,0.1 v 1.8 c 0,0.45 0.553,0.846 1.229,0.459 0.676,-0.387 1,-0.581 1,-0.581 0,0 0.361,-0.184 0.361,0.335 v 2.62 c 0,0 0.021,0.786 -0.73,0.768 -0.751,-0.018 -1.38,0 -1.38,0 0,0 -0.293,0.248 -0.293,1.385 0,1.137 0.293,1.322 0.293,1.322 h 1.38 c 0,0 0.73,-0.024 0.73,0.649 v 1.3 c 0,0 0.227,0.359 1.169,0.306 a 3.6,3.6 0 0 0 1.4,-0.306 v -1.3 a 0.67,0.67 0 0 1 0.66,-0.649 c 0.631,-0.01 1.257,0 1.257,0 0,0 0.252,-0.191 0.287,-1.322 0.035,-1.131 -0.287,-1.385 -0.287,-1.385 h -1.257 c 0,0 -0.805,-0.052 -0.817,-0.768 -0.012,-0.716 0,-2.62 0,-2.62 0,0 -0.047,-0.515 0.332,-0.335 0.379,0.18 1.215,0.581 1.215,0.581 0,0 0.83,0.407 0.814,-0.459 -0.016,-0.866 0,-1.8 0,-1.8 0,0 -0.072,-0.534 -0.804,-0.1 z"
transform="translate(-5553.893,-845.301)"
inkscape:connector-curvature="0"
style="fill:#ffffff" />
<path
id="Path_3"
data-name="Path 3"
class="cls-3"
d="m 5601.9,1015.336 a 0.83,0.83 0 0 1 1.2,-0.594 6.516,6.516 0 0 0 2.85,0.772 5.05,5.05 0 0 0 2.768,-0.772 c 0.829,-0.4 1.067,0.594 1.067,0.594 v 1.76 a 0.71,0.71 0 0 1 -1.067,0.561 5.791,5.791 0 0 0 -2.768,-0.837 7.06,7.06 0 0 0 -2.85,0.837 c 0,0 -1.178,0.239 -1.2,-0.561 -0.022,-0.8 0,-1.76 0,-1.76 z"
transform="translate(-5552.485,-909.604)"
inkscape:connector-curvature="0"
style="fill:#ffffff" />
<g
class="cls-16"
transform="translate(-2133.68,-6140.14)"
id="g6983"
style="filter:url(#Path_1)">
<path
id="Path_1-3"
data-name="Path 1"
class="cls-1"
d="M 0.016,8.513 13.42,-4.416 31.991,-3.746 32.162,55.2 c 0,0.838 -0.155,0.838 -0.462,1.137 l -10.416,10.096 -0.212,0.19 c -0.584,0.4 -1.987,-0.115 -1.987,-0.952 L -0.364,44.961 -0.375,9.187 c 0,-0.419 0.142,-0.402 0.391,-0.674 z"
transform="translate(2149.43,6214.55)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</g>
<g
class="cls-15"
transform="translate(-2133.68,-6140.14)"
id="g6986"
style="filter:url(#Path_2)">
<path
id="Path_2-3"
data-name="Path 2"
class="cls-1"
d="m 1484.037,521.285 v 17.253 c 0,0 0.019,0.845 0.3,1.121 0.281,0.276 3.516,3.626 3.516,3.626 a 1.566,1.566 0 0 0 1.157,0.4 c 0.758,-0.025 11.627,0 11.627,0 l 4.429,-4.7 v -7.963 l -10.662,-0.567 z"
transform="translate(676.31,5680.52)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</g>
<g
id="Group_4"
data-name="Group 4"
transform="translate(15.123,26.978)">
<path
id="Path_44"
data-name="Path 44"
class="cls-1"
d="m 5.461,0 h 5.612 a 5.461,5.461 0 0 1 5.461,5.461 v 22.9 a 5.461,5.461 0 0 1 -5.461,5.461 H 5.461 A 5.461,5.461 0 0 1 0,28.365 V 5.461 A 5.461,5.461 0 0 1 5.461,0 Z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
<circle
id="Ellipse_3"
data-name="Ellipse 3"
class="cls-3"
cx="3.7920001"
cy="3.7920001"
transform="translate(1.062,1.517)"
r="3.7920001"
style="fill:#ffffff" />
<circle
id="Ellipse_4"
data-name="Ellipse 4"
class="cls-3"
cx="3.7920001"
cy="3.7920001"
transform="translate(1.062,24.725)"
r="3.7920001"
style="fill:#ffffff" />
<path
id="Path_5"
data-name="Path 5"
class="cls-3"
d="m 5610.158,939.234 a 4.151,4.151 0 0 1 -2.342,0.705 5.131,5.131 0 0 1 -2.988,-0.705 c -1.257,-0.931 -1.229,0.1 -1.229,0.1 v 1.8 c 0,0.45 0.553,0.846 1.229,0.459 0.676,-0.387 1,-0.581 1,-0.581 0,0 0.361,-0.184 0.361,0.335 v 2.62 c 0,0 0.021,0.786 -0.73,0.768 -0.751,-0.018 -1.38,0 -1.38,0 0,0 -0.293,0.248 -0.293,1.385 0,1.137 0.293,1.322 0.293,1.322 h 1.38 c 0,0 0.73,-0.024 0.73,0.649 v 1.3 c 0,0 0.227,0.359 1.169,0.306 a 3.6,3.6 0 0 0 1.4,-0.306 v -1.3 a 0.67,0.67 0 0 1 0.66,-0.649 c 0.631,-0.01 1.257,0 1.257,0 0,0 0.252,-0.191 0.287,-1.322 0.035,-1.131 -0.287,-1.385 -0.287,-1.385 h -1.257 c 0,0 -0.805,-0.052 -0.817,-0.768 -0.012,-0.716 0,-2.62 0,-2.62 0,0 -0.047,-0.515 0.332,-0.335 0.379,0.18 1.215,0.581 1.215,0.581 0,0 0.83,0.407 0.814,-0.459 -0.016,-0.866 0,-1.8 0,-1.8 0,0 -0.072,-0.534 -0.804,-0.1 z"
transform="translate(-5602.386,-929.312)"
inkscape:connector-curvature="0"
style="fill:#ffffff" />
<path
id="Path_6"
data-name="Path 6"
class="cls-3"
d="m 5601.9,1015.336 a 0.83,0.83 0 0 1 1.2,-0.594 6.516,6.516 0 0 0 2.85,0.772 5.05,5.05 0 0 0 2.768,-0.772 c 0.829,-0.4 1.067,0.594 1.067,0.594 v 1.76 a 0.71,0.71 0 0 1 -1.067,0.561 5.791,5.791 0 0 0 -2.768,-0.837 7.06,7.06 0 0 0 -2.85,0.837 c 0,0 -1.178,0.239 -1.2,-0.561 -0.022,-0.8 0,-1.76 0,-1.76 z"
transform="translate(-5600.979,-993.616)"
inkscape:connector-curvature="0"
style="fill:#ffffff" />
</g>
<g
class="cls-14"
transform="translate(-2133.68,-6140.14)"
id="g6995"
style="filter:url(#Path_1-2)">
<path
id="Path_1-4"
data-name="Path 1"
class="cls-1"
d="m 5.784,0 h 42.66 a 5.784,5.784 0 0 1 5.784,5.784 v 29.64 C 43.86,49.487 36.1,59.29 36.1,59.29 h -0.595 c 0,0 -19.462,-0.147 -23.864,-0.147 A 2.28,2.28 0 0 1 9.263,58.158 L 0,48.582 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
transform="translate(2159.6,6153.16)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</g>
<g
id="hvid"
transform="translate(25.916,13.015)">
<g
id="Mask_Group_1"
data-name="Mask Group 1"
class="cls-4"
clip-path="url(#clip-path-2)">
<path
id="hvid-2"
data-name="hvid"
class="cls-5"
d="m 1498.578,449.051 7.155,7.37 23.789,31.08 v 14.857 l 13.063,-16.131 v -31.221 l -0.993,-7.691 z"
transform="translate(-1487.315,-449.455)"
inkscape:connector-curvature="0"
style="fill:#f2f2f2" />
</g>
</g>
<g
class="cls-13"
transform="translate(-2133.68,-6140.14)"
id="g7001"
style="filter:url(#Path_4)">
<path
id="Path_4-2"
data-name="Path 4"
class="cls-1"
d="M 5.784,0 H 36.875 A 5.784,5.784 0 0 1 42.66,5.784 V 28.032 C 34.013,39.3 27.1,48.444 27.1,48.444 H 5.784 A 5.784,5.784 0 0 1 0,42.66 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
transform="translate(2165.38,6158.22)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</g>
<g
id="Group_3"
data-name="Group 3"
transform="translate(31.7,18.38)">
<g
id="Mask_Group_2"
data-name="Mask Group 2"
class="cls-6"
clip-path="url(#clip-path-3)">
<path
id="Union_1"
data-name="Union 1"
class="cls-7"
d="M 14.461,28.56 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z m -3.615,0 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z m -3.615,0 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z m -3.615,0 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z M 0,28.56 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 A 1.085,1.085 0 1 1 0,28.56 Z"
transform="translate(15.907,-5.365)"
inkscape:connector-curvature="0"
style="fill:#6a6a6a" />
</g>
</g>
<circle
id="Ellipse_1-2"
data-name="Ellipse 1"
class="cls-8"
cx="2.2449999"
cy="2.2449999"
transform="translate(29.076,16.175)"
r="2.2449999"
style="fill:#9a9a9a" />
<circle
id="Ellipse_2-2"
data-name="Ellipse 2"
class="cls-8"
cx="2.2449999"
cy="2.2449999"
transform="translate(57.744,66.686)"
r="2.2449999"
style="fill:#9a9a9a" />
<g
class="cls-12"
transform="translate(-2133.68,-6140.14)"
id="g7009">
<circle
id="rød-2"
data-name="rød"
class="cls-9"
cx="17.063999"
cy="17.063999"
transform="translate(2135.31,6259.65)"
r="17.063999"
style="fill:#b72b1c" />
</g>
<g
id="Group_2"
data-name="Group 2"
transform="matrix(0.966,0.259,-0.259,0.966,7.93,117.883)">
<circle
id="Ellipse_4-2"
data-name="Ellipse 4"
class="cls-10"
cx="3.7920001"
cy="3.7920001"
transform="translate(11.528)"
r="3.7920001"
style="fill:#3c3c3c" />
<circle
id="Ellipse_7"
data-name="Ellipse 7"
class="cls-10"
cx="3.7920001"
cy="3.7920001"
transform="translate(23.056,11.528)"
r="3.7920001"
style="fill:#3c3c3c" />
<circle
id="Ellipse_5"
data-name="Ellipse 5"
class="cls-10"
cx="3.7920001"
cy="3.7920001"
transform="translate(11.528,23.056)"
r="3.7920001"
style="fill:#3c3c3c" />
<circle
id="Ellipse_6"
data-name="Ellipse 6"
class="cls-10"
cx="3.7920001"
cy="3.7920001"
transform="translate(0,11.528)"
r="3.7920001"
style="fill:#3c3c3c" />
<path
id="Path_4-3"
data-name="Path 4"
class="cls-11"
d="m 2.4,1.566 c 0,0 0.021,0.786 -0.73,0.768 -0.751,-0.018 -1.38,0 -1.38,0 0,0 -0.29,0.248 -0.29,1.385 0,1.137 0.294,1.322 0.294,1.322 h 1.38 c 0,0 0.73,-0.024 0.73,0.649 0,0.673 0,1.3 0,1.3 0,0 0.227,0.359 1.17,0.306 a 3.594,3.594 0 0 0 1.4,-0.306 v -1.3 a 0.67,0.67 0 0 1 0.66,-0.649 c 0.631,-0.01 1.257,0 1.257,0 0,0 0.253,-0.191 0.287,-1.322 C 7.212,2.588 6.891,2.333 6.891,2.333 H 5.638 c 0,0 -0.806,-0.052 -0.818,-0.768 A 12.478,12.478 0 0 1 4.884,0.305 2.9,2.9 0 0 0 2.529,0.213 C 2.45,0.819 2.4,1.566 2.4,1.566 Z"
transform="rotate(-90,15.2715,3.5915)"
inkscape:connector-curvature="0"
style="fill:#242424" />
<path
id="Path_5-2"
data-name="Path 5"
class="cls-10"
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
transform="translate(13.241,8.084)"
inkscape:connector-curvature="0"
style="fill:#3c3c3c" />
<path
id="Path_7"
data-name="Path 7"
class="cls-10"
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
transform="rotate(-90,12.71,4.628)"
inkscape:connector-curvature="0"
style="fill:#3c3c3c" />
<path
id="Path_6-2"
data-name="Path 6"
class="cls-10"
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
transform="rotate(180,8.668,11.2485)"
inkscape:connector-curvature="0"
style="fill:#3c3c3c" />
<path
id="Path_8"
data-name="Path 8"
class="cls-10"
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
transform="rotate(90,4.6265,17.8685)"
inkscape:connector-curvature="0"
style="fill:#3c3c3c" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="1719.858 6177.276 47.14 47.14"
version="1.1"
id="svg7610"
sodipodi:docname="Medium Motor.svg"
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\motorMedium-icon.png"
inkscape:export-xdpi="244.37845"
inkscape:export-ydpi="244.37845"
inkscape:version="0.92.1 r15371">
<metadata
id="metadata7614">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1137"
id="namedview7612"
showgrid="false"
inkscape:zoom="5.0063641"
inkscape:cx="23.57"
inkscape:cy="23.57"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7610" />
<defs
id="defs7591">
<style
id="style7573">
.cls-1 {
fill: url(#linear-gradient);
}
.cls-2 {
fill: #a8a9a8;
}
.cls-3 {
fill: #3c3c3c;
}
.cls-4 {
fill: #b72b1c;
stroke: #8b1104;
stroke-width: 0.25px;
}
.cls-5 {
stroke: none;
}
.cls-6 {
fill: none;
}
.cls-7 {
filter: url(#Union_1);
}
</style>
<linearGradient
id="linear-gradient"
x1="0.5"
y1="0.919"
x2="0.5"
y2="1.077"
gradientUnits="objectBoundingBox">
<stop
offset="0"
stop-color="#a8a9a8"
id="stop7575" />
<stop
offset="1"
stop-color="#545554"
id="stop7577" />
</linearGradient>
<filter
id="Union_1"
x="1719.858"
y="6177.276"
width="47.14"
height="47.14"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset7580" />
<feGaussianBlur
stdDeviation="0.5"
result="blur"
id="feGaussianBlur7582" />
<feFlood
flood-opacity="0.322"
id="feFlood7584" />
<feComposite
operator="in"
in2="blur"
id="feComposite7586"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite7588" />
</filter>
</defs>
<g
id="Medium_Motor"
data-name="Medium Motor"
transform="translate(1346 5554)">
<g
id="Group_4"
data-name="Group 4"
transform="translate(375.358 624.776)">
<path
id="Path_1"
data-name="Path 1"
class="cls-1"
d="M3.281-.287h39a2.357,2.357,0,0,1,2.57,1.972V42.033c0,1-1.1,1.82-2.57,1.82h-39c-1.473,0-2.57-.815-2.57-1.82V1.685A2.357,2.357,0,0,1,3.281-.287Z"
transform="translate(-0.711 0.287)" />
</g>
<g
id="Group_7"
data-name="Group 7"
transform="translate(419.498 624.776) rotate(90)">
<g
class="cls-7"
transform="matrix(0, -1, 1, 0, -6178.78, 1765.5)"
id="g7596">
<path
id="Union_1-2"
data-name="Union 1"
class="cls-2"
d="M21.236,44.14a6.219,6.219,0,0,1-6.219-6.219v-8.8h-8.8A6.219,6.219,0,0,1,0,22.9V21.236a6.219,6.219,0,0,1,6.219-6.219h8.8v-8.8A6.219,6.219,0,0,1,21.236,0H22.9a6.219,6.219,0,0,1,6.219,6.219v8.8h8.8a6.219,6.219,0,0,1,6.219,6.219V22.9a6.219,6.219,0,0,1-6.219,6.219h-8.8v8.8A6.219,6.219,0,0,1,22.9,44.14Z"
transform="translate(1765.5 6178.78) rotate(90)" />
</g>
<ellipse
id="Ellipse_1"
data-name="Ellipse 1"
class="cls-3"
cx="4.854"
cy="4.854"
rx="4.854"
ry="4.854"
transform="translate(17.292 1.517)" />
<ellipse
id="Ellipse_2"
data-name="Ellipse 2"
class="cls-3"
cx="4.854"
cy="4.854"
rx="4.854"
ry="4.854"
transform="translate(17.292 32.915)" />
<ellipse
id="Ellipse_1-2"
data-name="Ellipse 1"
class="cls-3"
cx="4.854"
cy="4.854"
rx="4.854"
ry="4.854"
transform="translate(1.517 26.848) rotate(-90)" />
<ellipse
id="Ellipse_2-2"
data-name="Ellipse 2"
class="cls-3"
cx="4.854"
cy="4.854"
rx="4.854"
ry="4.854"
transform="translate(32.915 26.848) rotate(-90)" />
</g>
<g
id="Ellipse_4"
data-name="Ellipse 4"
class="cls-4"
transform="translate(390.903 640.17)">
<ellipse
class="cls-5"
cx="6.752"
cy="6.752"
rx="6.752"
ry="6.752"
id="ellipse7603" />
<ellipse
class="cls-6"
cx="6.752"
cy="6.752"
rx="6.627"
ry="6.627"
id="ellipse7605" />
</g>
<path
id="Hole"
d="M5606.437,962.413s-.054,1.021-.769,1.029-1.461,0-1.461,0a2.363,2.363,0,0,0-.455,1.691c0,1.266.357,1.6.357,1.6h1.628a.645.645,0,0,1,.7.7V969.1a3.882,3.882,0,0,0,1.766.287,6.459,6.459,0,0,0,1.676-.287v-1.667a.73.73,0,0,1,.734-.7,10.674,10.674,0,0,0,1.444-.14s.4-.374.434-1.632-.353-1.644-.353-1.644h-1.693a.641.641,0,0,1-.762-.678,11.41,11.41,0,0,1,0-1.643,4.815,4.815,0,0,0-3.246,0C5606.42,961.694,5606.437,962.413,5606.437,962.413Z"
transform="translate(-5210.486 -318.186)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,344 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="1827.391 6183.664 36.101 36.101003"
version="1.1"
id="svg4572"
sodipodi:docname="Touch sensor.svg"
width="36.101002"
height="36.101002"
inkscape:version="0.92.1 r15371">
<metadata
id="metadata4576">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1137"
id="namedview4574"
showgrid="false"
inkscape:zoom="7.0722208"
inkscape:cx="18.050501"
inkscape:cy="16.684999"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4572" />
<defs
id="defs4547">
<style
id="style4522">
.cls-1 {
fill: #a8a9a8;
}
.cls-2 {
clip-path: url(#clip-path);
}
.cls-3 {
fill: url(#linear-gradient);
}
.cls-4 {
fill: url(#linear-gradient-2);
}
.cls-5 {
fill: #b72b1c;
stroke: #8b1104;
stroke-width: 0.25px;
}
.cls-6 {
stroke: none;
}
.cls-7 {
fill: none;
}
.cls-8 {
filter: url(#Path_1);
}
</style>
<clipPath
id="clip-path">
<path
id="Union_3"
data-name="Union 3"
class="cls-1"
d="m 3.944,33.37 c -1.069,0 -1.972,-0.6 -1.972,-1.365 v -4.4 H 1 a 1,1 0 0 1 -1,-1 V 7.371 a 1,1 0 0 1 1,-1 H 1.972 V 1.365 C 1.972,0.6 2.875,0 3.944,0 h 10.769 v 1.365 h 6.371 V 0 h 11.073 c 1.069,0 1.972,0.6 1.972,1.365 V 6.371 H 35.1 a 1,1 0 0 1 1,1 v 19.236 a 1,1 0 0 1 -1,1 H 34.128 V 32 c 0,0.761 -0.9,1.365 -1.972,1.365 z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</clipPath>
<linearGradient
id="linear-gradient"
x1="16.378942"
y1="29.809677"
x2="16.378942"
y2="34.264748"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.98165674,1.018686)">
<stop
offset="0"
stop-color="#a8a9a8"
id="stop4526" />
<stop
offset="1"
stop-color="#545554"
id="stop4528" />
</linearGradient>
<filter
id="Path_1"
x="1826.363"
y="6180.6641"
width="38.157001"
height="39.370998"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset4531" />
<feGaussianBlur
stdDeviation="1"
result="blur"
id="feGaussianBlur4533" />
<feFlood
flood-opacity="0.502"
id="feFlood4535" />
<feComposite
operator="in"
in2="blur"
id="feComposite4537"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite4539" />
</filter>
<linearGradient
id="linear-gradient-2"
x1="0.949"
y1="0.5"
x2="0.056000002"
y2="0.5"
gradientUnits="objectBoundingBox">
<stop
offset="0"
stop-color="#b72b1c"
id="stop4542" />
<stop
offset="1"
stop-color="#8b1104"
id="stop4544" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linear-gradient-2"
id="linearGradient5121"
gradientUnits="userSpaceOnUse"
x1="7.315846"
y1="3.8545027"
x2="0.43170431"
y2="3.8545027"
gradientTransform="scale(1.2395892,0.80671886)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linear-gradient-2"
id="linearGradient5123"
gradientUnits="userSpaceOnUse"
x1="7.315846"
y1="3.8545027"
x2="0.43170431"
y2="3.8545027"
gradientTransform="scale(1.2395892,0.80671886)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linear-gradient-2"
id="linearGradient5125"
gradientUnits="userSpaceOnUse"
x1="7.315846"
y1="3.8545027"
x2="0.43170431"
y2="3.8545027"
gradientTransform="scale(1.2395892,0.80671886)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linear-gradient-2"
id="linearGradient5127"
gradientUnits="userSpaceOnUse"
x1="7.315846"
y1="3.8545027"
x2="0.43170431"
y2="3.8545027"
gradientTransform="scale(1.2395892,0.80671886)" />
</defs>
<g
id="Touch_sensor"
data-name="Touch sensor"
transform="translate(1346,5555.3655)">
<g
id="Group_8"
data-name="Group 8"
transform="translate(481.391,629.664)">
<g
id="Mask_Group_3"
data-name="Mask Group 3"
class="cls-2"
clip-path="url(#clip-path)">
<g
id="Group_2"
data-name="Group 2">
<path
id="Path_27"
data-name="Path 27"
class="cls-1"
d="M 0.758,0 H 35.342 A 0.758,0.758 0 0 1 36.1,0.758 v 19.719 a 0.758,0.758 0 0 1 -0.758,0.758 H 0.758 A 0.758,0.758 0 0 1 0,20.477 V 0.758 A 0.758,0.758 0 0 1 0.758,0 Z"
transform="translate(0,6.371)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
<g
class="cls-8"
transform="translate(-1827.39,-6183.66)"
id="g4551"
style="filter:url(#Path_1)">
<path
id="Path_1-2"
data-name="Path 1"
class="cls-3"
d="m 1.972,0 h 10.77 v 1.365 h 6.371 V 0 h 11.072 c 1.069,0 1.972,0.6 1.972,1.365 v 30.64 c 0,0.761 -0.9,1.365 -1.972,1.365 H 1.972 C 0.9,33.371 0,32.766 0,32.005 V 1.365 C 0,0.6 0.9,0 1.972,0 Z"
transform="translate(1829.36,6183.66)"
inkscape:connector-curvature="0"
style="fill:url(#linear-gradient)" />
</g>
<rect
id="Rectangle_2"
data-name="Rectangle 2"
width="0.75800002"
height="6.0669999"
transform="translate(34.584,9.404)"
x="0"
y="0" />
<rect
id="Rectangle_5"
data-name="Rectangle 5"
width="0.75800002"
height="6.0669999"
transform="translate(0.91,9.404)"
x="0"
y="0" />
<rect
id="Rectangle_3"
data-name="Rectangle 3"
width="0.75800002"
height="6.0669999"
transform="translate(34.584,18.05)"
x="0"
y="0" />
<rect
id="Rectangle_4"
data-name="Rectangle 4"
width="0.75800002"
height="6.0669999"
transform="translate(0.91,18.05)"
x="0"
y="0" />
</g>
</g>
</g>
<g
id="Group_5"
data-name="Group 5"
transform="translate(485.942,633.835)">
<rect
id="Rectangle_6"
data-name="Rectangle 6"
class="cls-4"
width="9.5559998"
height="6.2189999"
transform="translate(0,10.542)"
x="0"
y="0"
style="fill:url(#linearGradient5121)" />
<rect
id="Rectangle_9"
data-name="Rectangle 9"
class="cls-4"
width="9.5559998"
height="6.2189999"
transform="rotate(90,8.3045,8.3045)"
x="0"
y="0"
style="fill:url(#linearGradient5123)" />
<rect
id="Rectangle_7"
data-name="Rectangle 7"
class="cls-4"
width="9.5559998"
height="6.2189999"
transform="rotate(180,13.5,8.3805)"
x="0"
y="0"
style="fill:url(#linearGradient5125)" />
<rect
id="Rectangle_8"
data-name="Rectangle 8"
class="cls-4"
width="9.5559998"
height="6.2189999"
transform="rotate(-90,18.695,8.305)"
x="0"
y="0"
style="fill:url(#linearGradient5127)" />
<g
id="Ellipse_1"
data-name="Ellipse 1"
class="cls-5"
transform="translate(7.433,7.508)"
style="fill:#b72b1c;stroke:#8b1104;stroke-width:0.25px">
<circle
class="cls-6"
cx="6.0669999"
cy="6.0669999"
id="ellipse4564"
r="6.0669999"
style="stroke:none" />
<circle
class="cls-7"
cx="6.0669999"
cy="6.0669999"
id="ellipse4566"
r="5.9419999"
style="fill:none" />
</g>
<path
id="Hole"
d="m 5606.165,962.241 c 0,0 -0.048,0.917 -0.69,0.925 -0.642,0.008 -1.312,0 -1.312,0 a 2.123,2.123 0 0 0 -0.409,1.52 c 0,1.138 0.321,1.442 0.321,1.442 h 1.463 a 0.58,0.58 0 0 1 0.628,0.628 v 1.5 a 3.487,3.487 0 0 0 1.586,0.258 5.8,5.8 0 0 0 1.507,-0.258 v -1.5 a 0.655,0.655 0 0 1 0.66,-0.628 9.594,9.594 0 0 0 1.3,-0.126 c 0,0 0.356,-0.336 0.39,-1.467 0.034,-1.131 -0.317,-1.477 -0.317,-1.477 h -1.522 a 0.576,0.576 0 0 1 -0.685,-0.609 10.168,10.168 0 0 1 0,-1.476 4.326,4.326 0 0 0 -2.917,0 c -0.019,0.627 0,1.268 0,1.268 z"
transform="translate(-5594.196,-951.087)"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256.68237mm"
height="256.68237mm"
viewBox="0 0 256.68237 256.68237"
version="1.1"
id="svg8853"
inkscape:version="0.92.1 r15371"
sodipodi:docname="brickbuttons.svg"
inkscape:export-filename="C:\Users\jhalleux\bitmap.png"
inkscape:export-xdpi="11.874598"
inkscape:export-ydpi="11.874598">
<defs
id="defs8847">
<linearGradient
id="linear-gradient-4"
x1="28.287067"
y1="53.631462"
x2="28.287067"
y2="3.3378232"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.5371664,0,0,3.3819467,4.7045157,7.0563355)">
<stop
offset="0"
stop-color="#6a6a6a"
id="stop8176" />
<stop
offset="0.522"
stop-color="#8ce300"
id="stop8178" />
<stop
offset="1"
stop-color="#6a6a6a"
id="stop8180" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-82.030812"
inkscape:cy="187.27864"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata8850">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-4.695057,58.29823)">
<g
id="g9431"
transform="translate(3.9780427e-6,-32.677281)">
<path
style="fill:#6a6a6a;stroke-width:3.91719985"
inkscape:connector-curvature="0"
d="M 106.30882,198.38022 C 84.431262,177.26258 50.453467,142.52878 50.453467,142.52878 v -7.12931 H 37.087971 a 32.381533,32.381533 0 1 1 0,-64.763062 H 50.457376 V 63.503186 L 105.71341,7.0563355 h 55.25994 c 25.02699,25.5048885 55.25994,55.2599395 55.25994,55.2599395 v 8.320133 h 12.77398 a 32.381533,32.381533 0 0 1 0,64.763062 h -12.77398 v 7.13323 c -29.43384,30.27603 -54.66454,55.85144 -54.66454,55.85144 z"
class="cls-7"
data-name="Union 4"
id="Union_4" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linear-gradient-4);stroke-width:3.91719985"
d="M 106.30882,198.38022 C 84.431262,177.26258 50.453467,142.52878 50.453467,142.52878 v -7.12931 H 37.087971 a 32.381533,32.381533 0 1 1 0,-64.763062 H 50.457376 V 63.503186 L 105.71731,7.0563355 h 55.25604 c 25.02699,25.5048885 55.25994,55.2599395 55.25994,55.2599395 v 8.320133 h 12.77398 a 32.381533,32.381533 0 0 1 0,64.763062 h -12.77398 v 7.13323 c -29.43384,30.27603 -54.66454,55.85144 -54.66454,55.85144 z"
class="cls-8"
id="light" />
<path
style="fill:#a8a9a8;stroke-width:3.91719985"
inkscape:connector-curvature="0"
d="m 36.492567,78.357208 h 40.69971 V 126.48393 H 36.492567 A 24.063359,24.063359 0 0 1 12.429199,102.42057 v 0 A 24.063359,24.063359 0 0 1 36.492567,78.357208 Z"
class="cls-9"
data-name="Rectangle 23"
id="Rectangle_23" />
<path
style="fill:#a8a9a8;stroke-width:3.91719985"
inkscape:connector-curvature="0"
d="M 229.00727,126.48784 H 188.30756 V 78.361126 h 40.69971 a 24.063359,24.063359 0 0 1 24.06335,24.063354 v 0 a 24.063359,24.063359 0 0 1 -24.06335,24.06336 z"
class="cls-9"
data-name="Rectangle 24"
id="Rectangle_24" />
<path
style="fill:#3c3c3c;stroke-width:3.91719985"
inkscape:connector-curvature="0"
d="m 109.27806,78.357208 h 46.9398 a 1.782326,1.782326 0 0 1 1.78233,1.782326 V 124.7016 a 1.782326,1.782326 0 0 1 -1.78233,1.78233 h -46.9398 a 1.782326,1.782326 0 0 1 -1.78233,-1.78233 V 80.139534 a 1.782326,1.782326 0 0 1 1.78233,-1.782326 z"
class="cls-4"
data-name="Path 42"
id="Path_42" />
<path
style="fill:#a8a9a8;stroke-width:3.91719985"
inkscape:connector-curvature="0"
d="m 108.09114,15.967966 49.90905,-0.59542 37.43276,38.619675 -15.44943,15.449437 V 97.367379 H 165.7249 V 81.306861 A 11.978797,11.978797 0 0 0 153.84012,69.422075 c -11.59883,-0.184102 -43.37516,0 -43.37516,0 A 9.6676495,9.6676495 0 0 0 100.36251,79.520618 V 97.347793 H 86.103905 V 69.422075 L 70.654464,53.97264 Z"
class="cls-9"
data-name="Path 15"
id="Path_15" />
<path
style="fill:#a8a9a8;stroke-width:3.91719985"
inkscape:connector-curvature="0"
d="M 157.78865,189.01028 108.18908,189.38233 70.654464,150.794 86.323259,135.4895 v -28.08625 h 14.101921 v 16.11144 a 12.006218,12.006218 0 0 0 11.85346,11.9788 c 11.59882,0.1841 43.13227,0 43.13227,0 a 10.18472,10.18472 0 0 0 10.38059,-10.38058 v -17.70966 h 14.39179 v 28.08632 l 15.3045,15.3045 z"
class="cls-9"
data-name="Path 16"
id="Path_16-2" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,308 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="2030.391 6170.607 60.976999 60.977"
version="1.1"
id="svg5788"
sodipodi:docname="gyro.svg"
width="60.977001"
height="60.977001"
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\gyroSensor-icon.png"
inkscape:export-xdpi="188.92369"
inkscape:export-ydpi="188.92369"
inkscape:version="0.92.1 r15371">
<metadata
id="metadata5792">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1137"
id="namedview5790"
showgrid="false"
inkscape:zoom="3.8703117"
inkscape:cx="17.974501"
inkscape:cy="30.488501"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg5788" />
<defs
id="defs5764">
<style
id="style5739">
.cls-1 {
fill: #a8a9a8;
}
.cls-2 {
clip-path: url(#clip-path);
}
.cls-3, .cls-9 {
fill: #9a9a9a;
}
.cls-4 {
fill: #f2f2f2;
}
.cls-5 {
opacity: 0.6;
fill: url(#linear-gradient);
}
.cls-6 {
fill: url(#linear-gradient-2);
}
.cls-7 {
fill: #b72b1c;
}
.cls-8, .cls-9 {
stroke: none;
}
.cls-10 {
filter: url(#Path_12);
}
</style>
<clipPath
id="clip-path">
<path
id="Union_7"
data-name="Union 7"
class="cls-1"
d="M 9.708,60.977 A 9.336,9.336 0 0 1 7.725,60.522 H 3.489 A 1.972,1.972 0 0 1 1.517,58.55 V 54 H 0.758 A 0.758,0.758 0 0 1 0,53.241 V 6.978 A 0.758,0.758 0 0 1 0.758,6.219 H 1.517 V 1.972 A 1.972,1.972 0 0 1 3.489,0 h 12.654 v 0.607 h 3.42 V 0 h 12.746 a 1.972,1.972 0 0 1 1.972,1.972 v 4.247 h 0.91 a 0.759,0.759 0 0 1 0.759,0.759 v 46.263 a 0.758,0.758 0 0 1 -0.759,0.758 h -0.91 v 4.551 a 1.972,1.972 0 0 1 -1.972,1.972 h -4.141 c -0.17,0.3 -1.911,0.455 -2.229,0.455 z"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</clipPath>
<filter
id="Path_12"
x="2030.408"
y="6169.1069"
width="35.764"
height="50.779999"
filterUnits="userSpaceOnUse">
<feOffset
input="SourceAlpha"
id="feOffset5743" />
<feGaussianBlur
stdDeviation="0.5"
result="blur"
id="feGaussianBlur5745" />
<feFlood
flood-opacity="0.502"
id="feFlood5747" />
<feComposite
operator="in"
in2="blur"
id="feComposite5749"
result="result1" />
<feComposite
in="SourceGraphic"
in2="result1"
id="feComposite5751" />
</filter>
<linearGradient
id="linear-gradient"
x1="6.4034481"
x2="6.4034481"
y2="12.806896"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(2.5583092,0.39088316)"
y1="0">
<stop
offset="0"
stop-color="#fff"
stop-opacity="0"
id="stop5754" />
<stop
offset="1"
stop-color="#404040"
id="stop5756" />
</linearGradient>
<linearGradient
id="linear-gradient-2"
x1="0.5"
x2="0.5"
y2="1"
gradientUnits="objectBoundingBox">
<stop
offset="0"
stop-color="#fff"
id="stop5759" />
<stop
offset="1"
stop-color="gray"
id="stop5761" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linear-gradient-2"
id="linearGradient6337"
gradientUnits="userSpaceOnUse"
x1="-0.54480195"
x2="-0.54480195"
y2="6.8587804"
gradientTransform="scale(3.1897429,0.31350489)"
y1="0.39872125" />
<linearGradient
inkscape:collect="always"
xlink:href="#linear-gradient-2"
id="linearGradient6339"
gradientUnits="userSpaceOnUse"
x1="-0.57290149"
x2="-0.57290149"
y2="6.9009762"
gradientTransform="scale(3.0330478,0.32970136)"
y1="3.2110665e-006" />
</defs>
<g
id="gyro"
transform="translate(1358.514,5554.0004)">
<g
id="Group_16"
data-name="Group 16"
transform="translate(684.391,616.607)">
<g
id="Mask_Group_7"
data-name="Mask Group 7"
class="cls-2"
clip-path="url(#clip-path)">
<g
id="Group_9"
data-name="Group 9">
<path
id="Path_29"
data-name="Path 29"
class="cls-1"
d="m 0.758,0 h 34.433 a 0.758,0.758 0 0 1 0.758,0.758 V 47.022 A 0.758,0.758 0 0 1 35.191,47.78 H 0.758 A 0.758,0.758 0 0 1 0,47.022 V 0.758 A 0.758,0.758 0 0 1 0.758,0 Z"
transform="translate(0,6.219)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
<rect
id="Rectangle_11"
data-name="Rectangle 11"
class="cls-3"
width="5.7639999"
height="15.775"
transform="translate(15.017,0.607)"
x="0"
y="0"
style="fill:#9a9a9a" />
<g
class="cls-10"
transform="translate(-2030.39,-6170.61)"
id="g5769"
style="filter:url(#Path_12)">
<path
id="Path_12-2"
data-name="Path 12"
class="cls-1"
d="m 1.972,0 h 12.655 v 16.015 l 3.42,-0.251 V 0 h 12.745 a 1.972,1.972 0 0 1 1.972,1.972 v 43.837 a 1.972,1.972 0 0 1 -1.972,1.972 H 1.972 A 1.972,1.972 0 0 1 0,45.809 V 1.972 A 1.972,1.972 0 0 1 1.972,0 Z"
transform="translate(2031.91,6170.61)"
inkscape:connector-curvature="0"
style="fill:#a8a9a8" />
</g>
<g
id="hvid"
transform="translate(1.517,29.578)">
<g
id="hvid-2"
data-name="hvid">
<path
id="Path_57"
data-name="Path 57"
class="cls-4"
d="M 1.213,0 H 31.55 a 1.213,1.213 0 0 1 1.213,1.213 v 27.759 a 1.972,1.972 0 0 1 -1.972,1.972 H 1.972 A 1.972,1.972 0 0 1 0,28.972 V 1.213 A 1.213,1.213 0 0 1 1.213,0 Z"
inkscape:connector-curvature="0"
style="fill:#f2f2f2" />
<path
id="Path_59"
data-name="Path 59"
class="cls-5"
d="M 0,0 H 32.764 V 3.034 A 1.972,1.972 0 0 1 30.792,5.006 H 1.972 A 1.972,1.972 0 0 1 0,3.034 Z"
transform="translate(0,25.938)"
inkscape:connector-curvature="0"
style="opacity:0.6;fill:url(#linear-gradient)" />
</g>
<g
id="Path_1"
data-name="Path 1"
class="cls-6"
transform="translate(17.936,29.123)"
style="fill:url(#linearGradient6339)">
<path
class="cls-8"
d="M 6.4848423,2.1502612 H -9.7453671 c -0.1358308,0 -0.6785509,-0.09074 -1.2538699,-0.2385202 -0.648927,-0.1666809 -0.94169,-0.3052633 -1.041505,-0.3812874 l 1.249305,-1.03739253 c 0.303109,-0.25294002 0.75468,-0.36806001 1.0460699,-0.36806001 H 6.4848423 c 0.2201104,0 0.3956304,0.15657998 0.5988703,0.33788 0.052504,0.0468377 0.106761,0.0952419 0.1628327,0.14147469 L 8.5651855,1.7936107 C 8.487011,1.8440639 8.2630816,1.9419193 7.6369224,2.0377111 7.1470423,2.1126511 6.6342626,2.1502612 6.4848423,2.1502612 Z"
id="path5774"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient6337);stroke:none" />
<path
class="cls-9"
d="m 6.4848423,2.0252612 c 0.3687601,0 1.4223461,-0.1225882 1.8561678,-0.2655033 L 7.1648941,0.69904226 C 7.1077342,0.65182292 7.0532455,0.6032095 7.0005026,0.55616105 6.8163424,0.39188105 6.6573024,0.25000107 6.4848423,0.25000107 H -9.7453671 c -0.2695699,0 -0.6867699,0.10602999 -0.9662209,0.33921999 l -1.113573,0.92468484 c 0.473236,0.2207455 1.776214,0.5113553 2.0797939,0.5113553 H 6.4848423 m 0,0.25 H -9.7453671 c -0.3350909,0 -2.4577609,-0.4373601 -2.4577609,-0.7724501 l 1.33183,-1.10592004 c 0.31863,-0.26589 0.79084,-0.396890001307 1.1259309,-0.396890001307 H 6.4848423 c 0.3350902,0 0.5700002,0.284719991307 0.8433003,0.509620021307 L 8.7278528,1.771991 c 0,0.3350902 -1.9079203,0.5032702 -2.2430105,0.5032702 z"
id="path5776"
inkscape:connector-curvature="0"
style="fill:#9a9a9a;stroke:none" />
</g>
</g>
<g
id="red_things"
data-name="red things"
transform="translate(4.551,8.494)">
<circle
id="red_dot"
data-name="red dot"
class="cls-7"
cx="3.0339999"
cy="3.0339999"
transform="translate(10.315,5.916)"
r="3.0339999"
style="fill:#b72b1c" />
<path
id="red_arrow_1"
data-name="red arrow 1"
class="cls-7"
d="m 3122.963,-1932.135 c 0,0 -3.9,-5.13 -0.759,-10.77 0.232,0.143 0.682,0.347 0.91,0.455 0.645,0.367 0.74,-0.309 0.607,-0.758 -0.3,-0.948 -1.214,-3.792 -1.214,-3.792 l -3.792,1.062 a 1.446,1.446 0 0 0 -0.455,0.152 c -0.2,0.125 -0.369,0.4 0,0.607 l 1.062,0.607 c 0,0 -4.526,6.652 1.062,14.258 1.598,-1.14 2.579,-1.821 2.579,-1.821 z"
transform="translate(-3117.592,1947)"
inkscape:connector-curvature="0"
style="fill:#b72b1c" />
<path
id="red_arrow_2"
data-name="red arrow 2"
class="cls-7"
d="m 3118.4,-1932.135 c 0,0 3.9,-5.13 0.758,-10.77 -0.231,0.143 -0.681,0.347 -0.91,0.455 -0.645,0.367 -0.741,-0.309 -0.607,-0.758 0.3,-0.948 1.213,-3.792 1.213,-3.792 l 3.792,1.062 a 1.446,1.446 0 0 1 0.455,0.152 c 0.2,0.125 0.368,0.4 0,0.607 l -1.062,0.607 c 0,0 4.526,6.652 -1.062,14.258 -1.594,-1.14 -2.577,-1.821 -2.577,-1.821 z"
transform="translate(-3097.107,1947)"
inkscape:connector-curvature="0"
style="fill:#b72b1c" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="1447.52 6142.536 49.96 58.928">
<defs>
<style>
.cls-1 {
fill: #eaeaea;
}
.cls-2 {
fill: #a8a9a8;
}
</style>
</defs>
<g id="icn_port" transform="translate(1447.52 6142.536)">
<path id="Path_8" data-name="Path 8" class="cls-1" d="M0-143.939H49.96v58.928H0Z" transform="translate(0 143.939)"/>
<path id="Path_9" data-name="Path 9" class="cls-2" d="M0-63.321V-91.143H17.114v-6.912H21.83v-9.159H34.753V-98.4h5.064v35.08H31.784v7.43h-2.62V-63.4H27.179v7.507H24.973V-63.4h-2.16v7.507h-2.1V-63.4H18.861v7.507h-2.1V-63.4H14.942v7.507H12.478V-63.4H10.8v7.507H8.282V-63.35Z" transform="translate(5.253 109.807)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 729 B

View File

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="26.48797mm"
height="26.48797mm"
viewBox="0 0 26.48797 26.487971"
version="1.1"
id="svg9467"
inkscape:version="0.92.1 r15371"
sodipodi:docname="screen.svg">
<defs
id="defs9461">
<linearGradient
id="linear-gradient-5"
x1="2.1718912"
y1="1.576793"
x2="2.1718912"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.18480341,0,0,0.37880435,268.75789,80.522339)"
y2="0">
<stop
offset="0"
stop-color="#747474"
id="stop8183" />
<stop
offset="1"
stop-color="#3c3c3c"
id="stop8185" />
</linearGradient>
<linearGradient
id="linear-gradient-2"
x1="44.516197"
y1="82.265938"
x2="44.516197"
y2="84.402718"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2975093,0,0,0.23530135,255.87506,61.218339)">
<stop
offset="0"
stop-color="#a8a9a8"
id="stop8166" />
<stop
offset="1"
stop-color="gray"
id="stop8168" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="1.3096574"
inkscape:cy="-1.004129"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata9464">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-255.87506,-58.769882)">
<g
id="g10052"
transform="translate(1.7608642e-7,-1.2242278)"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
inkscape:connector-curvature="0"
style="fill:url(#linear-gradient-2);stroke-width:0.26458332"
d="m 256.39682,61.218339 h 25.44445 a 0.52175833,0.52175833 0 0 1 0.52176,0.521759 v 19.905926 a 0.52175833,0.52175833 0 0 1 -0.52176,0.521759 h -25.44445 a 0.52175833,0.52175833 0 0 1 -0.52176,-0.521759 V 61.740098 a 0.52175833,0.52175833 0 0 1 0.52176,-0.521759 z"
class="cls-3"
data-name="Path 18"
id="Path_18" />
<path
style="fill:#3c3c3c;stroke-width:0.26458332"
inkscape:connector-curvature="0"
d="m 259.28634,63.987468 h 19.70537 a 1.0033,1.0033 0 0 1 1.0033,1.0033 v 11.076781 a 1.0033,1.0033 0 0 1 -1.0033,1.0033 h -19.70537 a 1.0033,1.0033 0 0 1 -1.0033,-1.0033 V 64.990768 a 1.0033,1.0033 0 0 1 1.0033,-1.0033 z"
class="cls-4"
data-name="Path 17"
id="Path_17" />
<path
style="fill:#a0b5a6;stroke-width:0.26458332"
inkscape:connector-curvature="0"
d="m 260.8114,64.509227 h 16.73569 a 0.7223125,0.7223125 0 0 1 0.72231,0.722312 v 10.675408 a 0.7223125,0.7223125 0 0 1 -0.72231,0.722313 H 260.8114 a 0.7223125,0.7223125 0 0 1 -0.72232,-0.722313 V 65.231539 a 0.7223125,0.7223125 0 0 1 0.72232,-0.722312 z"
class="cls-5"
data-name="Path 16"
id="Path_16" />
<rect
style="fill:#3c3c3c;stroke-width:0.26458332"
y="77.030579"
x="268.7579"
height="3.6520438"
width="0.80274582"
class="cls-4"
data-name="Rectangle 26"
id="Rectangle_26" />
<rect
style="fill:#9a9a9a;stroke-width:0.26458332"
y="80.522354"
x="268.7579"
height="1.6052271"
width="0.80274582"
class="cls-10"
data-name="Rectangle 10"
id="Rectangle_10" />
<rect
y="80.522354"
x="268.7579"
style="fill:url(#linear-gradient-5);stroke-width:0.26458332"
height="1.6454437"
width="0.80274582"
class="cls-11"
data-name="Rectangle 12"
id="Rectangle_12" />
<rect
style="fill:#808080;stroke-width:0.26458332"
y="82.167732"
x="268.7579"
height="1.565275"
width="0.80274582"
class="cls-12"
data-name="Rectangle 11"
id="Rectangle_11" />
<path
style="fill:#a8a9a8;stroke-width:0.26458332"
inkscape:connector-curvature="0"
d="m 257.9621,82.167783 h 6.26083 v 1.511829 c -0.69268,0.697971 -1.58115,1.578239 -1.58115,1.578239 h -4.15792 a 0.52175833,0.52175833 0 0 1 -0.52176,-0.521493 z"
class="cls-9"
data-name="Path 15"
id="Path_15-2" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2186 6829.289 63 68.355">
<defs>
<style>
.cls-1 {
fill: #fff;
}
</style>
</defs>
<g id="trash" transform="translate(49 672)">
<path id="Subtraction_2" data-name="Subtraction 2" class="cls-1" d="M-.5-603.645H-34a9.01,9.01,0,0,1-9-9v-42h-4a2,2,0,0,1-2-2v-2a2,2,0,0,1,2-2h12.82l3.919-7.542a5.256,5.256,0,0,1,1.332-1.9,7.7,7.7,0,0,1,5.481-1.9H-10.78s.083-.005.226-.005a8.02,8.02,0,0,1,2.9.565,5.812,5.812,0,0,1,3.3,3.249c1.682,4.051,3.219,7.508,3.235,7.542H12a2,2,0,0,1,2,2v2a2,2,0,0,1-2,2H8.5v42A9.01,9.01,0,0,1-.5-603.645Zm-7-46a1.5,1.5,0,0,0-1.5,1.5v32a1.5,1.5,0,0,0,1.5,1.5h3a1.5,1.5,0,0,0,1.5-1.5v-32a1.5,1.5,0,0,0-1.5-1.5Zm-11.5,0a1.5,1.5,0,0,0-1.5,1.5v32a1.5,1.5,0,0,0,1.5,1.5h3a1.5,1.5,0,0,0,1.5-1.5v-32a1.5,1.5,0,0,0-1.5-1.5Zm-11.5,0a1.5,1.5,0,0,0-1.5,1.5v32a1.5,1.5,0,0,0,1.5,1.5h3a1.5,1.5,0,0,0,1.5-1.5v-32a1.5,1.5,0,0,0-1.5-1.5Zm5.845-16.571-3.245,5.571H-7.517l-2.437-5.571Z" transform="translate(-2186 6829.29)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,535 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="2330.575 6196.231 83.275 83.274999"
version="1.1"
id="svg5190"
sodipodi:docname="ultra sonic.svg"
width="83.275002"
height="83.275002"
inkscape:version="0.92.1 r15371"
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\ultrasonicSensor-icon.png"
inkscape:export-xdpi="138.33684"
inkscape:export-ydpi="138.33684">
<metadata
id="metadata5194">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1137"
id="namedview5192"
showgrid="false"
inkscape:zoom="3.4103872"
inkscape:cx="41.637501"
inkscape:cy="17.443501"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg5190" />
<defs
id="defs5133">
<style
id="style5129">
.cls-1 {
fill: #f2f2f2;
}
.cls-2 {
fill: #292929;
}
.cls-3 {
stroke: rgba(242,242,242,0.5);
stroke-width: 0.25px;
}
.cls-4 {
fill: #931f1f;
}
.cls-5 {
fill: #9d761f;
}
.cls-6 {
clip-path: url(#clip-path);
}
.cls-7 {
stroke: none;
}
.cls-8 {
fill: none;
}
</style>
<clipPath
id="clip-path">
<circle
id="guld"
class="cls-1"
cx="6.9770002"
cy="6.9770002"
r="6.9770002"
style="fill:#f2f2f2" />
</clipPath>
</defs>
<g
id="ultra_sonic"
data-name="ultra sonic"
transform="translate(1222,5578.1935)">
<rect
id="Rectangle_1"
data-name="Rectangle 1"
class="cls-2"
width="43.382"
height="31.247"
transform="translate(1131.024,643.596)"
x="0"
y="0"
style="fill:#292929" />
<rect
id="Rectangle_2"
data-name="Rectangle 2"
width="25.330999"
height="17.594999"
transform="translate(1138.609,650.573)"
x="0"
y="0" />
<g
id="eye1"
transform="translate(1108.575,642.231)">
<g
id="sort"
class="cls-3"
style="stroke-width:0.25px">
<circle
class="cls-7"
cx="17.444"
cy="17.444"
id="ellipse5137"
r="17.444"
style="stroke:none" />
<circle
class="cls-8"
cx="17.444"
cy="17.444"
id="ellipse5139"
r="17.319"
style="fill:none" />
</g>
<circle
id="rød"
class="cls-4"
cx="10.77"
cy="10.77"
transform="translate(6.674,6.674)"
r="10.77"
style="fill:#931f1f" />
<circle
id="guld-3"
data-name="guld"
class="cls-5"
cx="8.0389996"
cy="8.0389996"
transform="translate(9.404,9.404)"
r="8.0389996"
style="fill:#9d761f" />
<circle
id="guld-4"
data-name="guld"
class="cls-1"
cx="6.9770002"
cy="6.9770002"
transform="translate(10.466,10.466)"
r="6.9770002"
style="fill:#f2f2f2" />
<g
id="Group_5"
data-name="Group 5"
transform="translate(10.466,10.466)">
<g
id="Mask_Group_8"
data-name="Mask Group 8"
class="cls-6"
clip-path="url(#clip-path)">
<g
id="Group_17"
data-name="Group 17"
transform="rotate(-30,2.4159415,14.94335)">
<rect
id="Rectangle_84"
data-name="Rectangle 84"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(2.048)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_91"
data-name="Rectangle 91"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,10.049,10.049)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_85"
data-name="Rectangle 85"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(4.93)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_97"
data-name="Rectangle 97"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,8.608,8.608)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_86"
data-name="Rectangle 86"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(7.812)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_96"
data-name="Rectangle 96"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,7.167,7.167)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_87"
data-name="Rectangle 87"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(10.694)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_95"
data-name="Rectangle 95"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,5.726,5.726)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_88"
data-name="Rectangle 88"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(13.576)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_94"
data-name="Rectangle 94"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,4.285,4.285)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_89"
data-name="Rectangle 89"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(16.458)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_93"
data-name="Rectangle 93"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,2.844,2.844)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_90"
data-name="Rectangle 90"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(19.34)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_92"
data-name="Rectangle 92"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,1.403,1.403)"
x="0"
y="0"
style="fill:#9d761f" />
</g>
</g>
</g>
</g>
<g
id="eye2"
transform="translate(1156.962,642.231)">
<g
id="sort-2"
data-name="sort"
class="cls-3"
style="stroke-width:0.25px">
<circle
class="cls-7"
cx="17.444"
cy="17.444"
id="ellipse5163"
r="17.444"
style="stroke:none" />
<circle
class="cls-8"
cx="17.444"
cy="17.444"
id="ellipse5165"
r="17.319"
style="fill:none" />
</g>
<circle
id="rød-2"
data-name="rød"
class="cls-4"
cx="10.77"
cy="10.77"
transform="translate(6.674,6.674)"
r="10.77"
style="fill:#931f1f" />
<circle
id="guld-5"
data-name="guld"
class="cls-5"
cx="8.0389996"
cy="8.0389996"
transform="translate(9.404,9.404)"
r="8.0389996"
style="fill:#9d761f" />
<circle
id="guld-6"
data-name="guld"
class="cls-1"
cx="6.9770002"
cy="6.9770002"
transform="translate(10.466,10.466)"
r="6.9770002"
style="fill:#f2f2f2" />
<g
id="Group_18"
data-name="Group 18"
transform="translate(10.466,10.466)">
<g
id="Mask_Group_8-2"
data-name="Mask Group 8"
class="cls-6"
clip-path="url(#clip-path)">
<g
id="Group_17-2"
data-name="Group 17"
transform="rotate(-30,2.4159415,14.94335)">
<rect
id="Rectangle_84-2"
data-name="Rectangle 84"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(2.048)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_91-2"
data-name="Rectangle 91"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,10.049,10.049)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_85-2"
data-name="Rectangle 85"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(4.93)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_97-2"
data-name="Rectangle 97"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,8.608,8.608)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_86-2"
data-name="Rectangle 86"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(7.812)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_96-2"
data-name="Rectangle 96"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,7.167,7.167)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_87-2"
data-name="Rectangle 87"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(10.694)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_95-2"
data-name="Rectangle 95"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,5.726,5.726)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_88-2"
data-name="Rectangle 88"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(13.576)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_94-2"
data-name="Rectangle 94"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,4.285,4.285)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_89-2"
data-name="Rectangle 89"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(16.458)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_93-2"
data-name="Rectangle 93"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,2.844,2.844)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_90-2"
data-name="Rectangle 90"
class="cls-5"
width="0.60699999"
height="22.791"
transform="translate(19.34)"
x="0"
y="0"
style="fill:#9d761f" />
<rect
id="Rectangle_92-2"
data-name="Rectangle 92"
class="cls-5"
width="0.60699999"
height="22.507"
transform="rotate(-90,1.403,1.403)"
x="0"
y="0"
style="fill:#9d761f" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -144,6 +144,12 @@
"loops.pause|param|ms": "how long to pause for, eg: 100, 200, 500, 1000, 2000",
"loops.timePicker": "Get the time field editor",
"loops.timePicker|param|ms": "time duration in milliseconds, eg: 500, 1000",
"loops.waitUntil": "Busy wait for a condition to be true",
"loops.waitUntil|param|condition": "condition to test for",
"loops.waitUntil|param|timeOut": "if positive, maximum duration to wait for in milliseconds",
"loops.when": "Runs code when the condition becomes true",
"loops.when|param|condition": "condition to test",
"loops.when|param|handler": "code to run",
"parseInt": "Convert a string to an integer.",
"serial": "Reading and writing data over a serial connection.",
"serial.writeBuffer": "Send a buffer across the serial connection.",

View File

@ -17,7 +17,8 @@
"control.cpp",
"control.ts",
"serial.cpp",
"serial.ts"
"serial.ts",
"loops.ts"
],
"testFiles": [
"test.ts"

View File

@ -0,0 +1,3 @@
# Color sensor
The library to interact with the Touch Sensor.

View File

@ -0,0 +1,12 @@
{
"sensors.ColorSensor": "The color sensor is a digital sensor that can detect the color or intensity\nof light that enters the small window on the face of the sensor.",
"sensors.ColorSensor.color": "Get the current color from the color sensor.",
"sensors.ColorSensor.colorMode": "Gets the current color mode",
"sensors.ColorSensor.light": "Measures the ambient or reflected light value from 0 (darkest) to 100 (brightest).",
"sensors.ColorSensor.onColorDetected": "Registers code to run when the given color is detected.",
"sensors.ColorSensor.onColorDetected|param|color": "the color to detect, eg: ColorSensorColor.Blue",
"sensors.ColorSensor.onColorDetected|param|handler": "the code to run when detected",
"sensors.ColorSensor.onLightChanged": "Registers code to run when the ambient light changes.",
"sensors.ColorSensor.onLightChanged|param|condition": "the light condition",
"sensors.ColorSensor.onLightChanged|param|handler": "the code to run when detected"
}

View File

@ -0,0 +1,27 @@
{
"ColorSensorColor.Black|block": "black",
"ColorSensorColor.Blue|block": "blue",
"ColorSensorColor.Brown|block": "brown",
"ColorSensorColor.Green|block": "green",
"ColorSensorColor.None|block": "none",
"ColorSensorColor.Red|block": "red",
"ColorSensorColor.White|block": "white",
"ColorSensorColor.Yellow|block": "yellow",
"ColorSensorMode.AmbientLightIntensity|block": "ambient light intensity",
"ColorSensorMode.Color|block": "color",
"ColorSensorMode.ReflectedLightIntensity|block": "reflected light intensity",
"LightCondition.Dark|block": "dark",
"LightIntensityMode.Ambient|block": "ambient light",
"LightIntensityMode.Reflected|block": "reflected light",
"sensors.ColorSensor.color|block": "`icons.colorSensor` %color| color",
"sensors.ColorSensor.light|block": "`icons.colorSensor` %color|%mode",
"sensors.ColorSensor.onColorDetected|block": "on `icons.colorSensor` %sensor|detected color %color",
"sensors.ColorSensor.onLightChanged|block": "on `icons.colorSensor` %sensor|%mode|%condition",
"sensors.color1|block": "1",
"sensors.color2|block": "2",
"sensors.color3|block": "3",
"sensors.color4|block": "4",
"sensors|block": "sensors",
"{id:category}Sensors": "Sensors",
"{id:group}Color Sensor": "Color Sensor"
}

185
libs/color-sensor/color.ts Normal file
View File

@ -0,0 +1,185 @@
const enum ColorSensorMode {
None = -1,
//% block="reflected light intensity"
ReflectedLightIntensity = 0,
//% block="ambient light intensity"
AmbientLightIntensity = 1,
//% block="color"
Color = 2,
RefRaw = 3,
RgbRaw = 4,
ColorCal = 5,
}
enum LightIntensityMode {
//% block="reflected light"
Reflected = ColorSensorMode.ReflectedLightIntensity,
//% block="ambient light"
Ambient = ColorSensorMode.AmbientLightIntensity
}
const enum ColorSensorColor {
//% block="none"
None,
//% block="black"
Black,
//% block="blue"
Blue,
//% block="green"
Green,
//% block="yellow"
Yellow,
//% block="red"
Red,
//% block="white"
White,
//% block="brown"
Brown,
}
enum LightCondition {
//% block="dark"
Dark = sensors.internal.ThresholdState.Low,
//$ block="bright"
Bright = sensors.internal.ThresholdState.High
}
namespace sensors {
/**
* The color sensor is a digital sensor that can detect the color or intensity
* of light that enters the small window on the face of the sensor.
*/
//% fixedInstances
export class ColorSensor extends internal.UartSensor {
thresholdDetector: sensors.internal.ThresholdDetector;
constructor(port: number) {
super(port)
this.thresholdDetector = new sensors.internal.ThresholdDetector(this.id());
}
_colorEventValue(value: number) {
return 0xff00 | value;
}
_deviceType() {
return DAL.DEVICE_TYPE_COLOR
}
setMode(m: ColorSensorMode) {
this._setMode(m)
}
/**
* Gets the current color mode
*/
colorMode() {
return <ColorSensorMode>this.mode;
}
_query() {
if (this.mode == ColorSensorMode.Color)
return this.getNumber(NumberFormat.UInt8LE, 0)
return 0
}
_update(prev: number, curr: number) {
if (this.mode == ColorSensorMode.Color)
control.raiseEvent(this._id, this._colorEventValue(curr));
else
this.thresholdDetector.setLevel(curr);
}
/**
* Registers code to run when the given color is detected.
* @param color the color to detect, eg: ColorSensorColor.Blue
* @param handler the code to run when detected
*/
//% help=sensors/color-sensor/on-color-detected
//% block="on `icons.colorSensor` %sensor|detected color %color"
//% blockId=colorOnColorDetected
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=100 blockGap=8
//% group="Color Sensor"
onColorDetected(color: ColorSensorColor, handler: () => void) {
const v = this._colorEventValue(<number>color);
control.onEvent(this._id, v, handler);
this.setMode(ColorSensorMode.Color)
if (this.color() == color)
control.raiseEvent(this._id, v);
}
/**
* Get the current color from the color sensor.
* @param color the color sensor to query the request
*/
//% help=sensors/color-sensor/color
//% block="`icons.colorSensor` %color| color"
//% blockId=colorGetColor
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=99
//% group="Color Sensor"
color(): ColorSensorColor {
this.setMode(ColorSensorMode.Color)
return this.getNumber(NumberFormat.UInt8LE, 0)
}
/**
* Registers code to run when the ambient light changes.
* @param condition the light condition
* @param handler the code to run when detected
*/
//% help=sensors/color-sensor/on-light-changed
//% block="on `icons.colorSensor` %sensor|%mode|%condition"
//% blockId=colorOnLightChanged
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=89 blockGap=8
//% group="Color Sensor"
onLightChanged(mode: LightIntensityMode, condition: LightCondition, handler: () => void) {
control.onEvent(this._id, <number>condition, handler);
this.setMode(<ColorSensorMode><number>mode)
}
/**
* Measures the ambient or reflected light value from 0 (darkest) to 100 (brightest).
* @param color the color sensor port
*/
//% help=sensors/color-sensor/light
//% block="`icons.colorSensor` %color|%mode"
//% blockId=colorLight
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=88
//% group="Color Sensor"
light(mode: LightIntensityMode) {
this.setMode(<ColorSensorMode><number>mode)
return this.getNumber(NumberFormat.UInt8LE, 0)
}
//%
ambientLight() {
return this.light(LightIntensityMode.Ambient);
}
//%
reflectedLight() {
return this.light(LightIntensityMode.Reflected);
}
}
//% whenUsed block="1" weight=95 fixedInstance
export const color1: ColorSensor = new ColorSensor(1)
//% whenUsed block="3" weight=90 fixedInstance
export const color3: ColorSensor = new ColorSensor(3)
//% whenUsed block="2" weight=90 fixedInstance
export const color2: ColorSensor = new ColorSensor(2)
//% whenUsed block="4" weight=90 fixedInstance
export const color4: ColorSensor = new ColorSensor(4)
}

View File

@ -0,0 +1,16 @@
# Color Sensor
```cards
sensors.color1.onColorDetected(ColorSensorColor.Blue, function () {
})
sensors.color1.color();
sensors.color1.ambientLight();
sensors.color1.reflectedLight();
```
## See Also
[on color detected](/reference/sensors/color-sensor/on-color-detected),
[color](/reference/sensors/color-sensor/color),
[ambient light](/reference/sensors/color-sensor/ambient-light),
[reflected light](/reference/sensors/color-sensor/reflected-light),

View File

@ -0,0 +1,11 @@
# Ambient Light
```blocks
loops.forever(function () {
if (sensors.color1.ambientLight() > 20) {
brick.setStatusLight(LightsPattern.Green)
} else {
brick.setStatusLight(LightsPattern.Orange)
}
})
```

View File

@ -0,0 +1,11 @@
# color
```blocks
loops.forever(function () {
if (sensors.color1.color() == ColorSensorColor.Green) {
brick.setStatusLight(LightsPattern.Green)
} else {
brick.setStatusLight(LightsPattern.Orange)
}
})
```

View File

@ -0,0 +1,16 @@
# On Color Detected
```sig
sensors.color1.onColorDetected(ColorSensorColor.Blue, function () { })
```
# Parameters
## Examples
```blocks
sensors.color1.onColorDetected(ColorSensorColor.Blue, function () {
brick.showImage(images.expressionsSick)
})
```

View File

@ -0,0 +1,11 @@
# Reflected Light
```blocks
loops.forever(function () {
if (sensors.color1.reflectedLight() > 20) {
brick.setStatusLight(LightsPattern.Green)
} else {
brick.setStatusLight(LightsPattern.Orange)
}
})
```

View File

@ -0,0 +1,15 @@
{
"name": "color-sensor",
"description": "Color Sensor support",
"files": [
"README.md",
"color.ts"
],
"testFiles": [
"test.ts"
],
"public": true,
"dependencies": {
"core": "file:../core"
}
}

View File

View File

@ -14,11 +14,12 @@
"MMap.setNumber": "Write a number in specified format in the buffer.",
"MMap.slice": "Read a range of bytes into a buffer.",
"MMap.write": "Perform write(2) on the underlaying file",
"TouchSensorEvent": "Touch sensor interactions",
"brick.Button": "Generic button class, for device buttons and sensors.",
"brick.Button.isPressed": "Check if button is currently pressed or not.",
"brick.Button.onEvent": "Do something when a button or sensor is clicked, up or down.",
"brick.Button.onEvent|param|body": "code to run when the event is raised",
"brick.Button.waitUntil": "Waits until the event is raised",
"brick.Button.waitUntil|param|ev": "the event to wait for",
"brick.Button.wasPressed": "See if the button was pressed again since the last time you checked.",
"brick._imagePicker": "An image",
"brick._imagePicker|param|image": "the image",
@ -27,8 +28,8 @@
"brick.buttonLeft": "Left button on the EV3 Brick.",
"brick.buttonRight": "Right button on the EV3 Brick.",
"brick.buttonUp": "Up button on the EV3 Brick.",
"brick.pattern": "Pattern block.",
"brick.pattern|param|pattern": "the lights pattern to use. eg: LightsPattern.Green",
"brick.lightPattern": "Pattern block.",
"brick.lightPattern|param|pattern": "the lights pattern to use. eg: LightsPattern.Green",
"brick.print": "Show text on the screen.",
"brick.print|param|text": "the text to print on the screen, eg: \"Hello world\"",
"brick.print|param|x": "the starting position's x coordinate, eg: 0",
@ -69,35 +70,6 @@
"screen.clear": "Clear screen and reset font to normal.",
"screen.imageOf": "Makes an image bound to a buffer.",
"screen.unpackPNG": "Decompresses a 1-bit gray scale PNG image to image format.",
"sensors.ColorSensor.ambientLight": "Get current ambient light value from the color sensor.",
"sensors.ColorSensor.color": "Get the current color from the color sensor.",
"sensors.ColorSensor.onColorDetected": "Registers code to run when the given color is detected",
"sensors.ColorSensor.onColorDetected|param|color": "the color to dtect",
"sensors.ColorSensor.onColorDetected|param|handler": "the code to run when detected",
"sensors.ColorSensor.reflectedLight": "Get current reflected light value from the color sensor.",
"sensors.GyroSensor.angle": "Get the current angle from the gyroscope.",
"sensors.GyroSensor.rate": "Get the current rotation rate from the gyroscope.",
"sensors.InfraredSensor.on": "Registers code to run when an object is getting near.",
"sensors.InfraredSensor.on|param|handler": "the code to run when detected",
"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.wait": "Waits for the event to occur",
"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|param|body": "code to run when the event is raised",
"sensors.RemoteInfraredBeaconButton.wasPressed": "See if the remote button was pressed again since the last time you checked.",
"sensors.TouchSensor.isTouched": "Check if touch sensor is touched.",
"sensors.TouchSensor.onEvent": "Do something when a touch sensor is touched...",
"sensors.TouchSensor.onEvent|param|body": "code to run when the event is raised",
"sensors.UltraSonicSensor.distance": "Gets the distance from the sonar in millimeters",
"sensors.UltraSonicSensor.on": "Registers code to run when the given color is close",
"sensors.UltraSonicSensor.on|param|handler": "the code to run when detected",
"sensors.UltraSonicSensor.wait": "Waits for the event to occur",
"sensors.remoteButtonBottomLeft": "Remote bottom-left button.",
"sensors.remoteButtonBottomRight": "Remote bottom-right button.",
"sensors.remoteButtonCenter": "Remote beacon (center) button.",
"sensors.remoteButtonTopLeft": "Remote top-left button.",
"sensors.remoteButtonTopRight": "Remote top-right button.",
"serial": "Reading and writing data over a serial connection.",
"serial.writeDmesg": "Send DMESG debug buffer over serial."
}

View File

@ -2,16 +2,6 @@
"ButtonEvent.Click|block": "click",
"ButtonEvent.Down|block": "down",
"ButtonEvent.Up|block": "up",
"ColorSensorColor.Black|block": "black",
"ColorSensorColor.Blue|block": "blue",
"ColorSensorColor.Brown|block": "brown",
"ColorSensorColor.Green|block": "green",
"ColorSensorColor.None|block": "none",
"ColorSensorColor.Red|block": "red",
"ColorSensorColor.White|block": "white",
"ColorSensorColor.Yellow|block": "yellow",
"InfraredSensorEvent.ObjectDetected|block": "object detected",
"InfraredSensorEvent.ObjectNear|block": "object near",
"LightsPattern.GreenFlash|block": "Flashing Green",
"LightsPattern.GreenPulse|block": "Pulsing Green",
"LightsPattern.Green|block": "Green",
@ -27,13 +17,9 @@
"Output.B|block": "B",
"Output.C|block": "C",
"Output.D|block": "D",
"TouchSensorEvent.Bumped|block": "bumped",
"TouchSensorEvent.Pressed|block": "pressed",
"TouchSensorEvent.Released|block": "released",
"UltrasonicSensorEvent.ObjectDetected|block": "object detected",
"UltrasonicSensorEvent.ObjectNear|block": "object near",
"brick.Button.isPressed|block": "`icons.brickButtons` %button|is pressed",
"brick.Button.onEvent|block": "on `icons.brickButtons` %button|%event",
"brick.Button.waitUntil|block": "wait until `icons.brickButtons` %button|%event",
"brick.Button.wasPressed|block": "`icons.brickButtons` %button|was pressed",
"brick._imagePicker|block": "%image",
"brick.buttonDown|block": "down",
@ -41,7 +27,7 @@
"brick.buttonLeft|block": "left",
"brick.buttonRight|block": "right",
"brick.buttonUp|block": "up",
"brick.pattern|block": "%pattern",
"brick.lightPattern|block": "%pattern",
"brick.print|block": "`icons.brickDisplay` print %text| at x: %x| y: %y",
"brick.setPixel|block": "`icons.brickDisplay` set pixel %on| at x: %x| y: %y",
"brick.setStatusLight|block": "set `icons.brickButtons` to %pattern=led_pattern",
@ -69,50 +55,6 @@
"motors|block": "motors",
"output|block": "output",
"screen|block": "screen",
"sensors.ColorSensor.ambientLight|block": "`icons.colorSensor` %color| ambient light",
"sensors.ColorSensor.color|block": "`icons.colorSensor` %color| color",
"sensors.ColorSensor.onColorDetected|block": "on `icons.colorSensor` %sensor|detected %color",
"sensors.ColorSensor.reflectedLight|block": "`icons.colorSensor` %color| reflected light",
"sensors.GyroSensor.angle|block": "`icons.gyroSensor` %sensor|angle",
"sensors.GyroSensor.rate|block": "`icons.gyroSensor` %sensor|rotation rate",
"sensors.InfraredSensor.on|block": "on `icons.infraredSensor` %sensor|%event",
"sensors.InfraredSensor.proximity|block": "`icons.infraredSensor` %infrared|proximity",
"sensors.InfraredSensor.remoteCommand|block": "`icons.infraredSensor` %infrared|remote command",
"sensors.InfraredSensor.wait|block": "wait `icons.infraredSensor` %sensor|for %event",
"sensors.RemoteInfraredBeaconButton.isPressed|block": "`icons.infraredSensor` %button|is pressed",
"sensors.RemoteInfraredBeaconButton.onEvent|block": "on `icons.infraredSensor` %button|%event",
"sensors.RemoteInfraredBeaconButton.wasPressed|block": "`icons.infraredSensor` %button|was pressed",
"sensors.TouchSensor.isTouched|block": "`icons.touchSensor` %sensor|is touched",
"sensors.TouchSensor.onEvent|block": "on `icons.touchSensor` %sensor|%event",
"sensors.UltraSonicSensor.distance|block": "`icons.ultrasonicSensor` %sensor|distance",
"sensors.UltraSonicSensor.on|block": "on `icons.ultrasonicSensor` %sensor|%event",
"sensors.UltraSonicSensor.wait|block": "wait `icons.ultrasonicSensor` %sensor|for %event",
"sensors.color1|block": "1",
"sensors.color2|block": "2",
"sensors.color3|block": "3",
"sensors.color4|block": "4",
"sensors.gyro1|block": "1",
"sensors.gyro2|block": "2",
"sensors.gyro3|block": "3",
"sensors.gyro4|block": "4",
"sensors.infraredSensor1|block": "1",
"sensors.infraredSensor2|block": "2",
"sensors.infraredSensor3|block": "3",
"sensors.infraredSensor4|block": "4",
"sensors.remoteButtonBottomLeft|block": "bottom-left",
"sensors.remoteButtonBottomRight|block": "bottom-right",
"sensors.remoteButtonCenter|block": "center",
"sensors.remoteButtonTopLeft|block": "top-left",
"sensors.remoteButtonTopRight|block": "top-right",
"sensors.touchSensor1|block": "1",
"sensors.touchSensor2|block": "2",
"sensors.touchSensor3|block": "3",
"sensors.touchSensor4|block": "4",
"sensors.ultrasonic1|block": "1",
"sensors.ultrasonic2|block": "2",
"sensors.ultrasonic3|block": "3",
"sensors.ultrasonic4|block": "4",
"sensors|block": "sensors",
"serial|block": "serial",
"{id:category}Brick": "Brick",
"{id:category}Control": "Control",
@ -122,16 +64,9 @@
"{id:category}Motors": "Motors",
"{id:category}Output": "Output",
"{id:category}Screen": "Screen",
"{id:category}Sensors": "Sensors",
"{id:category}Serial": "Serial",
"{id:group}Buttons": "Buttons",
"{id:group}Color Sensor": "Color Sensor",
"{id:group}Gyro Sensor": "Gyro Sensor",
"{id:group}Infrared Sensor": "Infrared Sensor",
"{id:group}Light": "Light",
"{id:group}Motors": "Motors",
"{id:group}Remote Infrared Beacon": "Remote Infrared Beacon",
"{id:group}Screen": "Screen",
"{id:group}Touch Sensor": "Touch Sensor",
"{id:group}Ultrasonic Sensor": "Ultrasonic Sensor"
"{id:group}Screen": "Screen"
}

View File

@ -4,34 +4,34 @@
*/
const enum LightsPattern {
//% block=Off enumval=0
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
Off = 0,
//% block=Green enumval=1
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
Green = 1,
//% block=Red enumval=2
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
Red = 2,
//% block=Orange enumval=3
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
Orange = 3,
//% block="Flashing Green" enumval=4
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
GreenFlash = 4,
//% block="Flashing Red" enumval=5
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
RedFlash = 5,
//% block="Flashing Orange" enumval=6
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
OrangeFlash = 6,
//% block="Pulsing Green" enumval=7
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
GreenPulse = 7,
//% block="Pulsing Red" enumval=8
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
RedPulse = 8,
//% block="Pulsing Orange" enumval=9
//% blockIdentity=output.pattern
//% blockIdentity=brick.lightPattern
OrangePulse = 9,
}
@ -69,13 +69,14 @@ namespace brick {
if (this._isPressed == curr) return
this._isPressed = curr
if (curr) {
this._wasPressed = true;
this.downTime = control.millis()
control.raiseEvent(this._id, ButtonEvent.Down)
} else {
control.raiseEvent(this._id, ButtonEvent.Up)
let delta = control.millis() - this.downTime
control.raiseEvent(this._id, ButtonEvent.Click)
//control.raiseEvent(this._id, delta > 500 ? ButtonEvent.LongClick : ButtonEvent.Click)
const delta = control.millis() - this.downTime;
if (delta < 500)
control.raiseEvent(this._id, ButtonEvent.Click)
}
}
@ -126,6 +127,20 @@ namespace brick {
onEvent(ev: ButtonEvent, body: () => void) {
control.onEvent(this._id, ev, body)
}
/**
* Waits until the event is raised
* @param ev the event to wait for
*/
//% help=input/button/wait-until
//% blockId=buttonWaitUntil block="wait until `icons.brickButtons` %button|%event"
//% parts="brick"
//% blockNamespace=brick
//% weight=98 blockGap=8
//% group="Buttons"
waitUntil(ev: ButtonEvent) {
control.waitForEvent(this._id, ev);
}
}
}
@ -252,7 +267,7 @@ namespace brick {
//% blockId=led_pattern block="%pattern"
//% shim=TD_ID colorSecondary="#6e9a36" group="Light"
//% blockHidden=true useEnumVal=1 pattern.fieldOptions.decompileLiterals=1
export function pattern(pattern: LightsPattern): number {
export function lightPattern(pattern: LightsPattern): number {
return pattern;
}
}

View File

@ -1,135 +0,0 @@
const enum ColorSensorMode {
None = -1,
Reflect = 0,
Ambient = 1,
Color = 2,
RefRaw = 3,
RgbRaw = 4,
ColorCal = 5,
}
const enum ColorSensorColor {
//% block="none"
None,
//% block="black"
Black,
//% block="blue"
Blue,
//% block="green"
Green,
//% block="yellow"
Yellow,
//% block="red"
Red,
//% block="white"
White,
//% block="brown"
Brown,
}
namespace sensors {
//% fixedInstances
export class ColorSensor extends internal.UartSensor {
constructor(port: number) {
super(port)
}
_deviceType() {
return DAL.DEVICE_TYPE_COLOR
}
setMode(m: ColorSensorMode) {
this._setMode(m)
}
_query() {
if (this.mode == ColorSensorMode.Color)
return this.getNumber(NumberFormat.UInt8LE, 0)
return 0
}
_update(prev: number, curr: number) {
control.raiseEvent(this._id, curr);
}
/**
* Registers code to run when the given color is detected
* @param color the color to dtect
* @param handler the code to run when detected
*/
//% help=input/color/on-color-detected
//% block="on `icons.colorSensor` %sensor|detected %color"
//% blockId=colorOnColorDetected
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=100 blockGap=8
//% group="Color Sensor"
onColorDetected(color: ColorSensorColor, handler: () => void) {
control.onEvent(this._id, <number>color, handler);
this.setMode(ColorSensorMode.Color)
if (this.color() == color)
control.runInBackground(handler)
}
/**
* Get current ambient light value from the color sensor.
* @param color the color sensor to query the request
*/
//% help=input/color/ambient-light
//% block="`icons.colorSensor` %color| ambient light"
//% blockId=colorGetAmbient
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=65 blockGap=8
//% group="Color Sensor"
ambientLight() {
this.setMode(ColorSensorMode.Ambient)
return this.getNumber(NumberFormat.UInt8LE, 0)
}
/**
* Get current reflected light value from the color sensor.
* @param color the color sensor to query the request
*/
//% help=input/color/refelected-light
//% block="`icons.colorSensor` %color| reflected light"
//% blockId=colorGetReflected
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=64 blockGap=8
//% group="Color Sensor"
reflectedLight(): number {
this.setMode(ColorSensorMode.Reflect)
return this.getNumber(NumberFormat.UInt8LE, 0)
}
/**
* Get the current color from the color sensor.
* @param color the color sensor to query the request
*/
//% help=input/color/color
//% block="`icons.colorSensor` %color| color"
//% blockId=colorGetColor
//% parts="colorsensor"
//% blockNamespace=sensors
//% weight=66 blockGap=8
//% group="Color Sensor"
color(): ColorSensorColor {
this.setMode(ColorSensorMode.Color)
return this.getNumber(NumberFormat.UInt8LE, 0)
}
}
//% whenUsed block="1" weight=95 fixedInstance
export const color1: ColorSensor = new ColorSensor(1)
//% whenUsed block="3" weight=90 fixedInstance
export const color3: ColorSensor = new ColorSensor(3)
//% whenUsed block="2" weight=90 fixedInstance
export const color2: ColorSensor = new ColorSensor(2)
//% whenUsed block="4" weight=90 fixedInstance
export const color4: ColorSensor = new ColorSensor(4)
}

View File

@ -10,7 +10,7 @@ namespace control {
this._id = id
}
getId() {
id() {
return this._id;
}
}

File diff suppressed because one or more lines are too long

View File

@ -132,26 +132,26 @@ namespace sensors.internal {
}
export class Sensor extends control.Component {
protected port: number // this is 0-based
protected _port: number // this is 0-based
constructor(port_: number) {
super()
if (!(1 <= port_ && port_ <= DAL.NUM_INPUTS))
control.panic(120)
this.port = port_ - 1
this._port = port_ - 1
init()
sensorInfos[this.port].sensors.push(this)
sensorInfos[this._port].sensors.push(this)
}
_activated() { }
// 1-based
getPort() {
return this.port + 1
port() {
return this._port + 1
}
isActive() {
return sensorInfos[this.port].sensor == this
return sensorInfos[this._port].sensor == this
}
_query() {
@ -173,11 +173,85 @@ namespace sensors.internal {
_readPin6() {
if (!this.isActive()) return 0
return analogMM.getNumber(NumberFormat.Int16LE, AnalogOff.InPin6 + 2 * this.port)
return analogMM.getNumber(NumberFormat.Int16LE, AnalogOff.InPin6 + 2 * this._port)
}
}
export enum ThresholdState {
Normal = 1,
High = 2,
Low = 3,
}
export class ThresholdDetector {
public id: number;
private min: number;
private max: number;
private lowThreshold: number;
private highThreshold: number;
private level: number;
private state: ThresholdState;
constructor(id: number, min = 0, max = 100, lowThreshold = 20, highThreshold = 80) {
this.id = id;
this.min = min;
this.max = max;
this.lowThreshold = lowThreshold;
this.highThreshold = highThreshold;
this.level = Math.ceil((max - min) / 2);
this.state = ThresholdState.Normal;
}
public setLevel(level: number) {
this.level = this.clampValue(level);
if (this.level >= this.highThreshold) {
this.setState(ThresholdState.High);
}
else if (this.level <= this.lowThreshold) {
this.setState(ThresholdState.Low);
}
else {
this.setState(ThresholdState.Normal);
}
}
public setLowThreshold(value: number) {
this.lowThreshold = this.clampValue(value);
this.highThreshold = Math.max(this.lowThreshold + 1, this.highThreshold);
}
public setHighThreshold(value: number) {
this.highThreshold = this.clampValue(value);
this.lowThreshold = Math.min(this.highThreshold - 1, this.lowThreshold);
}
private clampValue(value: number) {
if (value < this.min) {
return this.min;
}
else if (value > this.max) {
return this.max;
}
return value;
}
private setState(state: ThresholdState) {
if (this.state == state) return;
this.state = state;
switch (state) {
case ThresholdState.High:
control.raiseEvent(this.id, ThresholdState.High);
break;
case ThresholdState.Low:
control.raiseEvent(this.id, ThresholdState.Low);
break;
case ThresholdState.Normal:
break;
}
}
}
export class UartSensor extends Sensor {
protected mode: number // the mode user asked for
@ -202,18 +276,18 @@ namespace sensors.internal {
if (!this.isActive()) return
if (this.realmode != this.mode) {
this.realmode = v
setUartMode(this.port, v)
setUartMode(this._port, v)
}
}
getBytes(): Buffer {
return getUartBytes(this.isActive() ? this.port : -1)
return getUartBytes(this.isActive() ? this._port : -1)
}
getNumber(fmt: NumberFormat, off: number) {
if (!this.isActive())
return 0
return getUartNumber(fmt, off, this.port)
return getUartNumber(fmt, off, this._port)
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -6,7 +6,6 @@
#include <time.h>
#include <cstdarg>
#include <pthread.h>
#include <assert.h>
#include <unistd.h>
#include <dirent.h>
#include <signal.h>
@ -15,6 +14,8 @@
#include <errno.h>
#include <fcntl.h>
#define THREAD_DBG(...)
void *operator new(size_t size) {
return malloc(size);
}
@ -229,6 +230,8 @@ static void runAct(Thread *thr) {
disposeThread(thr);
}
static void mainThread(Thread *) {}
void setupThread(Action a, TValue arg = 0, void (*runner)(Thread *) = NULL, TValue d0 = 0,
TValue d1 = 0) {
if (runner == NULL)
@ -242,8 +245,13 @@ void setupThread(Action a, TValue arg = 0, void (*runner)(Thread *) = NULL, TVal
thr->data0 = incr(d0);
thr->data1 = incr(d1);
pthread_cond_init(&thr->waitCond, NULL);
pthread_create(&thr->pid, NULL, (void *(*)(void *))runner, thr);
pthread_detach(thr->pid);
if (runner == mainThread) {
thr->pid = pthread_self();
} else {
pthread_create(&thr->pid, NULL, (void *(*)(void *))runner, thr);
THREAD_DBG("setup thread: %p (pid %p)", thr, thr->pid);
pthread_detach(thr->pid);
}
}
void runInBackground(Action a) {
@ -263,8 +271,10 @@ void runForever(Action a) {
}
void waitForEvent(int source, int value) {
THREAD_DBG("waitForEv: %d %d", source, value);
auto self = pthread_self();
for (auto t = allThreads; t; t = t->next) {
THREAD_DBG("t: %p", t);
if (t->pid == self) {
pthread_mutex_lock(&eventMutex);
t->waitSource = source;
@ -279,7 +289,8 @@ void waitForEvent(int source, int value) {
return;
}
}
assert(0);
DMESG("current thread not registered!");
target_panic(901);
}
static void dispatchEvent(Event &e) {
@ -342,7 +353,8 @@ void raiseEvent(int id, int event) {
auto e = mkEvent(id, event);
pthread_mutex_lock(&eventMutex);
if (eventTail == NULL) {
assert(eventHead == NULL);
if (eventHead != NULL)
target_panic(902);
eventHead = eventTail = e;
} else {
eventTail->next = e;
@ -467,6 +479,7 @@ void initRuntime() {
pthread_t disp;
pthread_create(&disp, NULL, evtDispatcher, NULL);
pthread_detach(disp);
setupThread(0, 0, mainThread);
target_init();
screen_init();
startUser();
@ -508,4 +521,4 @@ void dmesg(const char *format, ...) {
fflush(dmesgFile);
fdatasync(fileno(dmesgFile));
}
}
} // namespace pxt

View File

@ -97,7 +97,8 @@ namespace motors {
power(power: number) {
power = Math.clamp(-100, 100, power >> 0);
const b = mkCmd(this.port, DAL.opOutputPower, 1)
// per LEGO: call it power, use speed
const b = mkCmd(this.port, DAL.opOutputSpeed, 1)
b.setNumber(NumberFormat.Int8LE, 2, power)
writePWM(b)
if (power) {

View File

@ -18,11 +18,6 @@
"output.ts",
"core.ts",
"input.ts",
"ir.ts",
"color.ts",
"gyro.ts",
"ultrasonic.ts",
"touch.ts",
"shims.d.ts",
"enums.d.ts",
"dal.d.ts",

View File

@ -180,7 +180,7 @@ void init() {
mappedFrameBuffer = (uint8_t *)mmap(NULL, FB_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
DMESG("map %p", mappedFrameBuffer);
if (mappedFrameBuffer == MAP_FAILED) {
target_panic(111);
target_panic(903);
}
clear();

View File

@ -143,7 +143,8 @@ namespace brick {
if (!image) return;
image.draw(0, 0, Draw.Normal);
delay = Math.max(0, delay);
loops.pause(delay);
if (delay > 0)
loops.pause(delay);
}
/**

View File

@ -8,7 +8,11 @@
"dependencies": {
"base": "file:../base",
"core": "file:../core",
"music": "file:../music"
"music": "file:../music",
"color-sensor": "file:../color-sensor",
"touch-sensor": "file:../touch-sensor",
"ultrasonic-sensor": "file:../ultrasonic-sensor",
"gyro-sensor": "file:../gyro-sensor"
},
"public": true
}

View File

@ -0,0 +1,3 @@
# Gyro Sensor
The library to interact with the Gyro Sensor.

View File

@ -0,0 +1,4 @@
{
"sensors.GyroSensor.angle": "Get the current angle from the gyroscope.",
"sensors.GyroSensor.rate": "Get the current rotation rate from the gyroscope."
}

View File

@ -0,0 +1,10 @@
{
"sensors.GyroSensor.angle|block": "`icons.gyroSensor` %sensor|angle",
"sensors.GyroSensor.rate|block": "`icons.gyroSensor` %sensor|rotation rate",
"sensors.gyro1|block": "1",
"sensors.gyro2|block": "2",
"sensors.gyro3|block": "3",
"sensors.gyro4|block": "4",
"{id:category}Sensors": "Sensors",
"{id:group}Gyro Sensor": "Gyro Sensor"
}

View File

@ -30,7 +30,7 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=65 blockGap=8
//% group="Gyro Sensor"
angle() {
angle(): number {
this.setMode(GyroSensorMode.Angle)
return this.getNumber(NumberFormat.Int16LE, 0)
}
@ -46,7 +46,7 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=65 blockGap=8
//% group="Gyro Sensor"
rate() {
rate(): number {
this.setMode(GyroSensorMode.Rate)
return this.getNumber(NumberFormat.Int16LE, 0)
}

15
libs/gyro-sensor/pxt.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "gyro-sensor",
"description": "Gyro Sensor support",
"files": [
"README.md",
"gyro.ts"
],
"testFiles": [
"test.ts"
],
"public": true,
"dependencies": {
"core": "file:../core"
}
}

0
libs/gyro-sensor/test.ts Normal file
View File

View File

@ -0,0 +1,3 @@
# Infrared sensor
The library to interact with the Infrared Sensor.

View File

@ -0,0 +1,16 @@
{
"sensors.InfraredSensor.onEvent": "Registers code to run when an object is getting near.",
"sensors.InfraredSensor.onEvent|param|handler": "the code to run when detected",
"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.waitUntil": "Waits for the event to occur",
"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|param|body": "code to run when the event is raised",
"sensors.RemoteInfraredBeaconButton.wasPressed": "See if the remote button was pressed again since the last time you checked.",
"sensors.remoteButtonBottomLeft": "Remote bottom-left button.",
"sensors.remoteButtonBottomRight": "Remote bottom-right button.",
"sensors.remoteButtonCenter": "Remote beacon (center) button.",
"sensors.remoteButtonTopLeft": "Remote top-left button.",
"sensors.remoteButtonTopRight": "Remote top-right button."
}

View File

@ -0,0 +1,24 @@
{
"InfraredSensorEvent.ObjectDetected|block": "object detected",
"InfraredSensorEvent.ObjectNear|block": "object near",
"sensors.InfraredSensor.onEvent|block": "on `icons.infraredSensor` %sensor|%event",
"sensors.InfraredSensor.proximity|block": "`icons.infraredSensor` %infrared|proximity",
"sensors.InfraredSensor.remoteCommand|block": "`icons.infraredSensor` %infrared|remote command",
"sensors.InfraredSensor.waitUntil|block": "wait until `icons.infraredSensor` %sensor| %event",
"sensors.RemoteInfraredBeaconButton.isPressed|block": "`icons.infraredSensor` %button|is pressed",
"sensors.RemoteInfraredBeaconButton.onEvent|block": "on `icons.infraredSensor` %button|%event",
"sensors.RemoteInfraredBeaconButton.wasPressed|block": "`icons.infraredSensor` %button|was pressed",
"sensors.infraredSensor1|block": "1",
"sensors.infraredSensor2|block": "2",
"sensors.infraredSensor3|block": "3",
"sensors.infraredSensor4|block": "4",
"sensors.remoteButtonBottomLeft|block": "bottom-left",
"sensors.remoteButtonBottomRight|block": "bottom-right",
"sensors.remoteButtonCenter|block": "center",
"sensors.remoteButtonTopLeft|block": "top-left",
"sensors.remoteButtonTopRight|block": "top-right",
"sensors|block": "sensors",
"{id:category}Sensors": "Sensors",
"{id:group}Infrared Sensor": "Infrared Sensor",
"{id:group}Remote Infrared Beacon": "Remote Infrared Beacon"
}

View File

@ -134,16 +134,16 @@ namespace sensors {
this.button.onEvent(ev, body);
}
}
//% fixedInstances
export class InfraredSensor extends internal.UartSensor {
private channel: IrRemoteChannel;
private proximityThreshold: number;
private proximityThreshold: sensors.internal.ThresholdDetector;
constructor(port: number) {
super(port)
this.channel = IrRemoteChannel.Ch0
this.proximityThreshold = 10;
this.proximityThreshold = new sensors.internal.ThresholdDetector(this._id, 0, 100, 10, 90);
irButton(0) // make sure buttons array is initalized
// and set the mode, as otherwise button events won't work
@ -154,10 +154,7 @@ namespace sensors {
if (this.mode == IrSensorMode.RemoteControl)
return mapButton(this.getNumber(NumberFormat.UInt8LE, this.channel));
else if (this.mode == IrSensorMode.Proximity) {
const d = this.getNumber(NumberFormat.UInt16LE, 0) & 0x0fff;
return d < this.proximityThreshold ? UltrasonicSensorEvent.ObjectNear
: d > this.proximityThreshold + 5 ? UltrasonicSensorEvent.ObjectDetected
: 0;
return this.getNumber(NumberFormat.UInt16LE, 0) & 0x0fff;
}
return 0
}
@ -168,9 +165,8 @@ namespace sensors {
let v = !!(curr & (1 << i))
buttons[i]._update(v)
}
} else {
if (curr)
control.raiseEvent(this._id, curr);
} else if (this.mode == IrSensorMode.Proximity) {
this.proximityThreshold.setLevel(curr);
}
}
@ -181,7 +177,7 @@ namespace sensors {
setRemoteChannel(c: IrRemoteChannel) {
c = Math.clamp(0, 3, c | 0)
this.channel = c
this._setMode(IrSensorMode.RemoteControl)
this.setMode(IrSensorMode.RemoteControl)
}
setMode(m: IrSensorMode) {
@ -199,26 +195,24 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=100 blockGap=8
//% group="Infrared Sensor"
on(event: InfraredSensorEvent, handler: () => void) {
control.onEvent(this._id, InfraredSensorEvent.ObjectNear, handler);
if ( this.proximity() == InfraredSensorEvent.ObjectNear)
control.runInBackground(handler);
onEvent(event: InfraredSensorEvent, handler: () => void) {
control.onEvent(this._id, event, handler);
}
/**
* Waits for the event to occur
*/
//% help=input/ultrasonic/wait
//% block="wait `icons.infraredSensor` %sensor|for %event"
//% block="wait until `icons.infraredSensor` %sensor| %event"
//% blockId=infraredwait
//% parts="infraredsensor"
//% blockNamespace=sensors
//% weight=99 blockGap=8
//% group="Infrared Sensor"
wait(event: InfraredSensorEvent) {
// TODO
waitUntil(event: InfraredSensorEvent) {
control.waitForEvent(this._id, event);
}
/**
* Get the promixity measured by the infrared sensor, from ``0`` (close) to ``100`` (far)
* @param ir the infrared sensor
@ -230,7 +224,7 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=65 blockGap=8
//% group="Infrared Sensor"
proximity() {
proximity(): number {
this._setMode(IrSensorMode.Proximity)
return this.getNumber(NumberFormat.UInt8LE, 0)
}
@ -246,7 +240,7 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=65 blockGap=8
//% group="Infrared Sensor"
remoteCommand() {
remoteCommand(): number {
this._setMode(IrSensorMode.RemoteControl)
return this.getNumber(NumberFormat.UInt8LE, this.channel)
}
@ -276,7 +270,7 @@ namespace sensors {
*/
//% whenUsed block="center" weight=95 fixedInstance
export const remoteButtonCenter = irButton(IrRemoteButton.CenterBeacon)
/**
* Remote top-left button.
*/

View File

@ -0,0 +1,15 @@
{
"name": "infrared-sensor",
"description": "Infrared Sensor support",
"files": [
"README.md",
"ir.ts"
],
"testFiles": [
"test.ts"
],
"public": true,
"dependencies": {
"core": "file:../core"
}
}

View File

18
libs/music/piano.ts Normal file
View File

@ -0,0 +1,18 @@
namespace music {
/**
* Get the frequency of a note.
* @param name the note name, eg: Note.C
*/
//% weight=1 help=music/note-frequency
//% blockId=device_note block="%note"
//% shim=TD_ID color="#FFFFFF" colorSecondary="#FFFFFF"
//% note.fieldEditor="note" note.defl="1046"
//% note.fieldOptions.editorColour="#FF1493" note.fieldOptions.decompileLiterals=true
//% note.fieldOptions.minNote=52 note.fieldOptions.maxNote=75
//% useEnumVal=1
//% weight=10 blockGap=8
export function noteFrequency(name: Note): number {
//TODO fill in actual min/max note values
return name;
}
}

View File

@ -8,6 +8,7 @@
"shims.d.ts",
"melodies.ts",
"music.ts",
"piano.ts",
"sounds.jres",
"sounds.ts",
"ns.ts"

View File

@ -0,0 +1,3 @@
# Touch sensor
The library to interact with the Touch Sensor.

View File

@ -0,0 +1,8 @@
{
"TouchSensorEvent": "Touch sensor interactions",
"sensors.TouchSensor.isPressed": "Check if touch sensor is touched.",
"sensors.TouchSensor.onEvent": "Do something when a touch sensor is touched...",
"sensors.TouchSensor.onEvent|param|body": "code to run when the event is raised",
"sensors.TouchSensor.waitUntil": "Wait until the touch sensor is touched",
"sensors.TouchSensor.wasPressed": "Check if touch sensor is touched since it was last checked."
}

View File

@ -0,0 +1,15 @@
{
"TouchSensorEvent.Bumped|block": "bumped",
"TouchSensorEvent.Pressed|block": "pressed",
"TouchSensorEvent.Released|block": "released",
"sensors.TouchSensor.isPressed|block": "`icons.touchSensor` %sensor|is pressed",
"sensors.TouchSensor.onEvent|block": "on `icons.touchSensor` %sensor|%event",
"sensors.TouchSensor.waitUntil|block": "wait until `icons.touchSensor` %sensor|%event",
"sensors.TouchSensor.wasPressed|block": "`icons.touchSensor` %sensor|was pressed",
"sensors.touchSensor1|block": "1",
"sensors.touchSensor2|block": "2",
"sensors.touchSensor3|block": "3",
"sensors.touchSensor4|block": "4",
"{id:category}Sensors": "Sensors",
"{id:group}Touch Sensor": "Touch Sensor"
}

View File

@ -0,0 +1,15 @@
# Touch Sensor
```cards
sensors.touchSensor1.onEvent(TouchSensorEvent.Pressed, function () {
brick.showImage(images.expressionsBigSmile)
})
sensors.touchSensor1.isPressed();
sensors.touchSensor1.wasPressed();
```
## See Also
[on Event](/reference/sensors/touch-sensor/on-event),
[is pressed](reference/sensors/touch-sensor/is-pressed),
[was pressed](reference/sensors/touch-sensor/was-pressed)

View File

@ -0,0 +1,11 @@
# is Pressed
```blocks
loops.forever(function () {
if (sensors.touchSensor1.isPressed()) {
brick.setStatusLight(LightsPattern.Green)
} else {
brick.setStatusLight(LightsPattern.Orange)
}
})
```

View File

@ -0,0 +1,16 @@
# On Event
```sig
sensors.touchSensor1.onEvent(TouchSensorEvent.Released, function () { })
```
# Parameters
## Examples
```blocks
sensors.touchSensor1.onEvent(TouchSensorEvent.Released, function () {
brick.showImage(images.expressionsSick)
})
```

View File

@ -0,0 +1,11 @@
# was Pressed
```blocks
loops.forever(function () {
if (sensors.touchSensor1.wasPressed()) {
brick.setStatusLight(LightsPattern.Green)
} else {
brick.setStatusLight(LightsPattern.Orange)
}
})
```

View File

@ -0,0 +1,15 @@
{
"name": "touch-sensor",
"description": "Touch Sensor support",
"files": [
"README.md",
"touch.ts"
],
"testFiles": [
"test.ts"
],
"public": true,
"dependencies": {
"core": "file:../core"
}
}

View File

@ -0,0 +1,8 @@
sensors.touchSensor1.onEvent(TouchSensorEvent.Pressed, function () {
})
sensors.touchSensor2.onEvent(TouchSensorEvent.Bumped, function () {
})
sensors.touchSensor3.onEvent(TouchSensorEvent.Released, function () {
})
sensors.touchSensor4.isPressed();
sensors.touchSensor4.wasPressed();

View File

@ -41,7 +41,7 @@ namespace sensors {
* @param event the kind of button gesture that needs to be detected
* @param body code to run when the event is raised
*/
//% help=input/touch/on-event
//% help=input/touch-sensor/on-event
//% blockId=touchEvent block="on `icons.touchSensor` %sensor|%event"
//% parts="touch"
//% blockNamespace=sensors
@ -51,20 +51,50 @@ namespace sensors {
this.button.onEvent(<ButtonEvent><number>ev, body)
}
/**
* Wait until the touch sensor is touched
* @param sensor the touch sensor that needs to be clicked or used
* @param event the kind of button gesture that needs to be detected
*/
//% help=input/touch-sensor/wait-until
//% blockId=touchWaitUntil block="wait until `icons.touchSensor` %sensor|%event"
//% parts="touch"
//% blockNamespace=sensors
//% weight=98 blockGap=8
//% group="Touch Sensor"
waitUntil(ev: TouchSensorEvent) {
this.button.waitUntil(<ButtonEvent><number>ev);
}
/**
* Check if touch sensor is touched.
* @param sensor the port to query the request
*/
//% help=input/touch/is-touched
//% block="`icons.touchSensor` %sensor|is touched"
//% blockId=touchIsTouched
//% help=input/touch-sensor/is-pressed
//% block="`icons.touchSensor` %sensor|is pressed"
//% blockId=touchIsPressed
//% parts="touch"
//% blockNamespace=sensors
//% weight=81 blockGap=8
//% group="Touch Sensor"
isTouched() {
isPressed() {
return this.button.isPressed();
}
/**
* Check if touch sensor is touched since it was last checked.
* @param sensor the port to query the request
*/
//% help=input/touch-sensor/was-pressed
//% block="`icons.touchSensor` %sensor|was pressed"
//% blockId=touchWasPressed
//% parts="touch"
//% blockNamespace=sensors
//% weight=81 blockGap=8
//% group="Touch Sensor"
wasPressed() {
return this.button.wasPressed();
}
}
//% whenUsed block="1" weight=95 fixedInstance

View File

@ -0,0 +1,3 @@
# Ultrasonic sensor
The library to interact with the Ultrasonic Sensor.

View File

@ -0,0 +1,6 @@
{
"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|param|handler": "the code to run when detected",
"sensors.UltraSonicSensor.waitUntil": "Waits for the event to occur"
}

View File

@ -0,0 +1,14 @@
{
"UltrasonicSensorEvent.ObjectDetected|block": "object detected",
"UltrasonicSensorEvent.ObjectFar|block": "object far",
"UltrasonicSensorEvent.ObjectNear|block": "object near",
"sensors.UltraSonicSensor.distance|block": "`icons.ultrasonicSensor` %sensor|distance",
"sensors.UltraSonicSensor.onEvent|block": "on `icons.ultrasonicSensor` %sensor|%event",
"sensors.UltraSonicSensor.waitUntil|block": "wait until `icons.ultrasonicSensor` %sensor| %event",
"sensors.ultrasonic1|block": "1",
"sensors.ultrasonic2|block": "2",
"sensors.ultrasonic3|block": "3",
"sensors.ultrasonic4|block": "4",
"{id:category}Sensors": "Sensors",
"{id:group}Ultrasonic Sensor": "Ultrasonic Sensor"
}

View File

@ -0,0 +1,15 @@
{
"name": "ultrasonic-sensor",
"description": "Ultrasonic Sensor support",
"files": [
"README.md",
"ultrasonic.ts"
],
"testFiles": [
"test.ts"
],
"public": true,
"dependencies": {
"core": "file:../core"
}
}

View File

View File

@ -1,20 +1,22 @@
const enum UltrasonicSensorEvent {
//% block="object near"
ObjectNear = 1,
enum UltrasonicSensorEvent {
//% block="object detected"
ObjectDetected = 2
ObjectDetected = 10,
//% block="object near"
ObjectNear = sensors.internal.ThresholdState.Low,
//% block="object far"
ObjectFar = sensors.internal.ThresholdState.High
}
namespace sensors {
//% fixedInstances
export class UltraSonicSensor extends internal.UartSensor {
private promixityThreshold: number;
private promixityThreshold: sensors.internal.ThresholdDetector;
private movementThreshold: number;
constructor(port: number) {
super(port)
this.promixityThreshold = 10;
this.promixityThreshold = new sensors.internal.ThresholdDetector(this.id(), 0, 255, 10, 100); // range is 0..255cm
this.movementThreshold = 1;
}
@ -28,12 +30,11 @@ namespace sensors {
_update(prev: number, curr: number) {
// is there an object near?
if (prev >= this.promixityThreshold && curr < this.promixityThreshold)
control.raiseEvent(this._id, UltrasonicSensorEvent.ObjectNear); // TODO proper HI-LO sensor
this.promixityThreshold.setLevel(curr);
// did something change?
if (Math.abs(prev - curr) > this.movementThreshold)
control.raiseEvent(this._id, UltrasonicSensorEvent.ObjectDetected); // TODO debouncing
control.raiseEvent(this._id, UltrasonicSensorEvent.ObjectDetected);
}
/**
@ -47,29 +48,26 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=100 blockGap=8
//% group="Ultrasonic Sensor"
on(event: UltrasonicSensorEvent, handler: () => void) {
onEvent(event: UltrasonicSensorEvent, handler: () => void) {
control.onEvent(this._id, event, handler);
if (event == UltrasonicSensorEvent.ObjectNear
&& this.distance() < this.promixityThreshold)
control.runInBackground(handler);
}
/**
* Waits for the event to occur
*/
//% help=input/ultrasonic/wait
//% block="wait `icons.ultrasonicSensor` %sensor|for %event"
//% block="wait until `icons.ultrasonicSensor` %sensor| %event"
//% blockId=ultrasonicWait
//% parts="ultrasonicsensor"
//% blockNamespace=sensors
//% weight=99 blockGap=8
//% group="Ultrasonic Sensor"
wait(event: UltrasonicSensorEvent) {
// TODO
waitUntil(event: UltrasonicSensorEvent) {
control.waitForEvent(this._id, event);
}
/**
* Gets the distance from the sonar in millimeters
* Gets the distance from the sonar in centimeters
* @param sensor the ultrasonic sensor port
*/
//% help=input/ultrasonic/distance
@ -79,10 +77,10 @@ namespace sensors {
//% blockNamespace=sensors
//% weight=65 blockGap=8
//% group="Ultrasonic Sensor"
distance() {
distance(): number {
// it supposedly also has an inch mode, but we stick to cm
this._setMode(0)
return this.getNumber(NumberFormat.UInt16LE, 0) & 0x0fff;
return this.getNumber(NumberFormat.UInt16LE, 0) & 0x0fff; // range is 0..255
}
}

View File

@ -1,6 +1,6 @@
{
"name": "pxt-ev3",
"version": "0.0.32",
"version": "0.0.36",
"description": "LEGO Mindstorms EV3 for Microsoft MakeCode",
"private": true,
"keywords": [
@ -39,8 +39,8 @@
"semantic-ui-less": "^2.2.4"
},
"dependencies": {
"pxt-common-packages": "0.14.2",
"pxt-core": "2.3.27"
"pxt-common-packages": "0.14.5",
"pxt-core": "2.3.31"
},
"scripts": {
"test": "node node_modules/pxt-core/built/pxt.js travis"

View File

@ -10,6 +10,11 @@
"libs/base",
"libs/core",
"libs/music",
"libs/color-sensor",
"libs/touch-sensor",
"libs/ultrasonic-sensor",
"libs/infrared-sensor",
"libs/gyro-sensor",
"libs/ev3"
],
"simulator": {
@ -84,6 +89,8 @@
"termsOfUseUrl": "https://go.microsoft.com/fwlink/?LinkID=206977",
"githubUrl": "https://github.com/Microsoft/pxt-ev3",
"boardName": "LEGO Mindstorms EV3 Brick",
"selectLanguage": true,
"highContrast": true,
"docMenu": [
{
"name": "About",