Compare commits
53 Commits
Author | SHA1 | Date | |
---|---|---|---|
80454f55c7 | |||
30e576345b | |||
dfc4c83718 | |||
e25d273765 | |||
903e98ca22 | |||
8a64085288 | |||
22ab1cba8d | |||
1865ced312 | |||
b940befe85 | |||
c6bae5e17b | |||
83e4898eab | |||
7bdb9683c9 | |||
3c675892aa | |||
3d29c5e323 | |||
15d59269d4 | |||
73b5e7dc3f | |||
a92edcffee | |||
305a650125 | |||
34a5aeb7d2 | |||
32f524ddd8 | |||
b690c1634b | |||
8089841892 | |||
3d8c697586 | |||
e365e3d1be | |||
4ed41adb6a | |||
39b7f99741 | |||
ad17191ae2 | |||
4a8633f506 | |||
3690f409b0 | |||
97663d2b83 | |||
4d2b7ced71 | |||
5676103052 | |||
cb8c14fbb1 | |||
815d438d86 | |||
da8de1e31e | |||
b028916025 | |||
b9be74bad8 | |||
7e502b1749 | |||
f22edac84d | |||
ef2807a84e | |||
580b40876c | |||
b57ae5d588 | |||
71479d0caa | |||
7e39cdde9d | |||
85ca6b3698 | |||
2c89848fda | |||
ed1c187514 | |||
52816e6de7 | |||
60ac3a9d00 | |||
d2c7a5ace0 | |||
79fcd1c01e | |||
2d48725c63 | |||
ead69e3c6e |
@ -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"
|
||||
}]
|
||||
```
|
12
docs/examples/happy-unhappy.md
Normal 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)
|
||||
})
|
||||
```
|
@ -1,3 +1,8 @@
|
||||
# Reference
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
## See Also
|
||||
|
||||
[touch sensor](/reference/sensors/touch-sensor),
|
||||
[color sensor](/reference/sensors/color-sensor)
|
@ -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)
|
||||
})
|
||||
|
@ -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
246
legoresources/SVGassets/Color Sensor.svg
Normal 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 |
146
legoresources/SVGassets/EV3.svg
Normal 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 |
BIN
legoresources/SVGassets/Large Motor.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
647
legoresources/SVGassets/Large Motor.svg
Normal 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 |
220
legoresources/SVGassets/Medium Motor.svg
Normal 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 |
344
legoresources/SVGassets/Touch sensor.svg
Normal 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 |
138
legoresources/SVGassets/brickbuttons.svg
Normal 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 |
BIN
legoresources/SVGassets/color overview/LEGO-MakeCode-Colors.pdf
Normal file
308
legoresources/SVGassets/gyro.svg
Normal 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 |
17
legoresources/SVGassets/icn_port.svg
Normal 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 |
166
legoresources/SVGassets/screen.svg
Normal 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 |
12
legoresources/SVGassets/trash.svg
Normal 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 |
535
legoresources/SVGassets/ultra sonic.svg
Normal 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 |
@ -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.",
|
||||
|
@ -17,7 +17,8 @@
|
||||
"control.cpp",
|
||||
"control.ts",
|
||||
"serial.cpp",
|
||||
"serial.ts"
|
||||
"serial.ts",
|
||||
"loops.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
"test.ts"
|
||||
|
3
libs/color-sensor/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Color sensor
|
||||
|
||||
The library to interact with the Touch Sensor.
|
12
libs/color-sensor/_locales/color-sensor-jsdoc-strings.json
Normal 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"
|
||||
}
|
27
libs/color-sensor/_locales/color-sensor-strings.json
Normal 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
@ -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)
|
||||
}
|
16
libs/color-sensor/docs/reference/sensors/color-sensor.md
Normal 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),
|
@ -0,0 +1,11 @@
|
||||
# Ambient Light
|
||||
|
||||
```blocks
|
||||
loops.forever(function () {
|
||||
if (sensors.color1.ambientLight() > 20) {
|
||||
brick.setStatusLight(LightsPattern.Green)
|
||||
} else {
|
||||
brick.setStatusLight(LightsPattern.Orange)
|
||||
}
|
||||
})
|
||||
```
|
@ -0,0 +1,11 @@
|
||||
# color
|
||||
|
||||
```blocks
|
||||
loops.forever(function () {
|
||||
if (sensors.color1.color() == ColorSensorColor.Green) {
|
||||
brick.setStatusLight(LightsPattern.Green)
|
||||
} else {
|
||||
brick.setStatusLight(LightsPattern.Orange)
|
||||
}
|
||||
})
|
||||
```
|
@ -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)
|
||||
})
|
||||
```
|
@ -0,0 +1,11 @@
|
||||
# Reflected Light
|
||||
|
||||
```blocks
|
||||
loops.forever(function () {
|
||||
if (sensors.color1.reflectedLight() > 20) {
|
||||
brick.setStatusLight(LightsPattern.Green)
|
||||
} else {
|
||||
brick.setStatusLight(LightsPattern.Orange)
|
||||
}
|
||||
})
|
||||
```
|
15
libs/color-sensor/pxt.json
Normal 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"
|
||||
}
|
||||
}
|
0
libs/color-sensor/test.ts
Normal 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."
|
||||
}
|
@ -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"
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
@ -10,7 +10,7 @@ namespace control {
|
||||
this._id = id
|
||||
}
|
||||
|
||||
getId() {
|
||||
id() {
|
||||
return this._id;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.6 KiB |
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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",
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
}
|
||||
|
3
libs/gyro-sensor/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Gyro Sensor
|
||||
|
||||
The library to interact with the Gyro Sensor.
|
4
libs/gyro-sensor/_locales/gyro-sensor-jsdoc-strings.json
Normal 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."
|
||||
}
|
10
libs/gyro-sensor/_locales/gyro-sensor-strings.json
Normal 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"
|
||||
}
|
@ -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
@ -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
3
libs/infrared-sensor/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Infrared sensor
|
||||
|
||||
The library to interact with the Infrared Sensor.
|
@ -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."
|
||||
}
|
24
libs/infrared-sensor/_locales/infrared-sensor-strings.json
Normal 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"
|
||||
}
|
@ -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.
|
||||
*/
|
15
libs/infrared-sensor/pxt.json
Normal 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"
|
||||
}
|
||||
}
|
0
libs/infrared-sensor/test.ts
Normal file
18
libs/music/piano.ts
Normal 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;
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@
|
||||
"shims.d.ts",
|
||||
"melodies.ts",
|
||||
"music.ts",
|
||||
"piano.ts",
|
||||
"sounds.jres",
|
||||
"sounds.ts",
|
||||
"ns.ts"
|
||||
|
3
libs/touch-sensor/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Touch sensor
|
||||
|
||||
The library to interact with the Touch Sensor.
|
@ -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."
|
||||
}
|
15
libs/touch-sensor/_locales/touch-sensor-strings.json
Normal 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"
|
||||
}
|
15
libs/touch-sensor/docs/reference/sensors/touch-sensor.md
Normal 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)
|
@ -0,0 +1,11 @@
|
||||
# is Pressed
|
||||
|
||||
```blocks
|
||||
loops.forever(function () {
|
||||
if (sensors.touchSensor1.isPressed()) {
|
||||
brick.setStatusLight(LightsPattern.Green)
|
||||
} else {
|
||||
brick.setStatusLight(LightsPattern.Orange)
|
||||
}
|
||||
})
|
||||
```
|
@ -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)
|
||||
})
|
||||
```
|
@ -0,0 +1,11 @@
|
||||
# was Pressed
|
||||
|
||||
```blocks
|
||||
loops.forever(function () {
|
||||
if (sensors.touchSensor1.wasPressed()) {
|
||||
brick.setStatusLight(LightsPattern.Green)
|
||||
} else {
|
||||
brick.setStatusLight(LightsPattern.Orange)
|
||||
}
|
||||
})
|
||||
```
|
15
libs/touch-sensor/pxt.json
Normal 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"
|
||||
}
|
||||
}
|
8
libs/touch-sensor/test.ts
Normal 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();
|
@ -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
|
3
libs/ultrasonic-sensor/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Ultrasonic sensor
|
||||
|
||||
The library to interact with the Ultrasonic Sensor.
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
15
libs/ultrasonic-sensor/pxt.json
Normal 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"
|
||||
}
|
||||
}
|
0
libs/ultrasonic-sensor/test.ts
Normal 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
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
|
@ -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",
|
||||
|