Merge remote-tracking branch 'origin/master' into V3

This commit is contained in:
Juri
2020-09-17 09:19:11 +02:00
51 changed files with 565 additions and 2242 deletions

View File

@ -257,6 +257,8 @@
"basic.showArrow": "Draws an arrow on the LED screen",
"basic.showArrow|param|direction": "the direction of the arrow",
"basic.showArrow|param|interval": "the amount of time (milliseconds) to show the icon. Default is 600.",
"basic.showCompass": "Draws needle on the screen which always points to north",
"basic.showCompass|param|interval": "the amount of time (milliseconds) to show the needle. Default is 600.",
"basic.showIcon": "Draws the selected icon on the LED screen",
"basic.showIcon|param|icon": "the predefined icon id",
"basic.showIcon|param|interval": "the amount of time (milliseconds) to show the icon. Default is 600.",
@ -537,7 +539,6 @@
"pins.C16": "Pin C16",
"pins.C17": "Pin C17",
"pins.C18": "Pin C18",
"pins.C19": "Pin C19",
"pins.C4": "Pin C4",
"pins.C5": "Pin C5",
"pins.C6": "Pin C6",
@ -553,16 +554,16 @@
"pins.analogPitch|param|frequency": "frequency to modulate in Hz.",
"pins.analogPitch|param|ms": "duration of the pitch in milli seconds.",
"pins.analogReadPin": "Read the connector value as analog, that is, as a value comprised between 0 and 1023.",
"pins.analogReadPin|param|name": "pin to write to, eg: AnalogPin.P0",
"pins.analogReadPin|param|name": "pin to write to, eg: AnalogPin.P1",
"pins.analogSetPeriod": "Configure the pulse-width modulation (PWM) period of the analog output in microseconds.\nIf this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.",
"pins.analogSetPeriod|param|micros": "period in micro seconds. eg:20000",
"pins.analogSetPeriod|param|name": "analog pin to set period to, eg: AnalogPin.P0",
"pins.analogSetPeriod|param|name": "analog pin to set period to, eg: AnalogPin.P1",
"pins.analogSetPitchPin": "Set the pin used when using analog pitch or music.",
"pins.analogSetPitchPin|param|name": "pin to modulate pitch from",
"pins.analogSetPitchVolume": "Sets the volume on the pitch pin",
"pins.analogSetPitchVolume|param|volume": "the intensity of the sound from 0..255",
"pins.analogWritePin": "Set the connector value as analog. Value must be comprised between 0 and 1023.",
"pins.analogWritePin|param|name": "pin name to write to, eg: AnalogPin.P0",
"pins.analogWritePin|param|name": "pin name to write to, eg: AnalogPin.P1",
"pins.analogWritePin|param|value": "value to write to the pin between ``0`` and ``1023``. eg:1023,0",
"pins.createBuffer": "Create a new zero-initialized buffer.",
"pins.createBuffer|param|size": "number of bytes in the buffer",
@ -594,7 +595,7 @@
"pins.servoSetPulse|param|micros": "pulse duration in micro seconds, eg:1500",
"pins.servoSetPulse|param|name": "pin name",
"pins.servoWritePin": "Write a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).",
"pins.servoWritePin|param|name": "pin to write to, eg: AnalogPin.P0",
"pins.servoWritePin|param|name": "pin to write to, eg: AnalogPin.P1",
"pins.servoWritePin|param|value": "angle or rotation speed, eg:180,90,0",
"pins.setEvents": "Configure the events emitted by this pin. Events can be subscribed to\nusing ``control.onEvent()``.",
"pins.setEvents|param|name": "pin to set the event mode on, eg: DigitalPin.P0",

View File

@ -103,6 +103,14 @@
"Gesture.TiltRight": "Raised when the screen is pointing right",
"Gesture.TiltRight|block": "tilt right",
"IconNames.Angry|block": "angry",
"IconNames.ArrowEast|block": "arrow East",
"IconNames.ArrowNorthEast|block": "arrow north east",
"IconNames.ArrowNorthWest|block": "arrow north west",
"IconNames.ArrowNorth|block": "arrow north",
"IconNames.ArrowSouthEast|block": "arrow south east",
"IconNames.ArrowSouthWest|block": "arrow south west",
"IconNames.ArrowSouth|block": "arrow south",
"IconNames.ArrowWest|block": "arrow west",
"IconNames.Asleep|block": "asleep",
"IconNames.Butterfly|block": "butterfly",
"IconNames.Chessboard|block": "chess board",
@ -258,6 +266,7 @@
"basic.rgbw|block": "red %red|green %green|blue %blue|white %white",
"basic.setLedColor|block": "set led to %color=colorNumberPicker",
"basic.showArrow|block": "show arrow %i=device_arrow",
"basic.showCompass|block": "show compass needle for $interval|ms",
"basic.showIcon|block": "show icon %i",
"basic.showLeds|block": "show leds",
"basic.showNumber|block": "show|number %number",

273
libs/core/compass.ts Normal file
View File

@ -0,0 +1,273 @@
let compassImages = [
images.createImage(`
. . # . .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. # . . .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
# . . . .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
# . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
# . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
# . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
# . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. # . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . # . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . # .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . . #
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . #
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . #
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . #
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . #
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . # .
. . . . .
. . # . .
. . . . .
. . . . .
`)];
let compassImagesDownside = [
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . # . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . # .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . . #
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . #
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . #
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . #
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . #
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . # .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . # . .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. # . . .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
# . . . .
. . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
# . . . .
. . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
# . # . .
. . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
# . . . .
. . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
# . . . .
`),
images.createImage(`
. . . . .
. . . . .
. . # . .
. . . . .
. # . . .
`)];
namespace basic {
/**
* Draws needle on the screen which always points to north
* @param interval the amount of time (milliseconds) to show the needle. Default is 600.
*/
//% weight=50 blockGap=8
//% blockId=basic_show_compass
//% block="show compass needle for $interval|ms"
//% interval.shadow=timePicker
//% interval.min=1
//% interval.defl=600
//% parts="ledmatrix"
//% advanced=true
export function showCompass(interval = 600) {
let i = 0
let startTime = input.runningTime()
let endTime = startTime + interval
let refreshRate = 100
let rest = 0
while ((endTime) > (input.runningTime() + refreshRate)) {
i = Math.round((input.compassHeading() - 11.25) / 22.5)
if (input.isGesture(Gesture.ScreenDown)) {
compassImagesDownside[i].showImage(0, refreshRate)
} else {
compassImages[i].showImage(0, refreshRate)
}
}
rest = (endTime - input.runningTime())
if(rest > 0) {
i = Math.round((input.compassHeading() - 11.25) / 22.5)
if (input.isGesture(Gesture.ScreenDown)) {
compassImagesDownside[i].showImage(0, rest)
} else {
compassImages[i].showImage(0, rest)
}
}
}
}

View File

@ -465,7 +465,6 @@ declare namespace motors {
C16 = 102, // MICROBIT_ID_IO_P2
C17 = 108, // MICROBIT_ID_IO_P8
C18 = 120, // MICROBIT_ID_IO_P20
C19 = 119, // MICROBIT_ID_IO_P19
}

View File

@ -122,5 +122,29 @@
},
"scissors": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFUUlEQVR4nO3dMW6cRRgG4G+RaCL6AAfgAjkA4k5Jg9JCE+6EoM8FOEBC+ihNiqVYU0TZeT3rnd/6/vXztB57Ps3odWTFnrcKAAAAaOGQPng8Hn+uqldV9aKqvl+8979V9baq3hwOh78e8gW6z1dV31XV86p6VlXfrhrszueq+lRVH6rq4wO/Ruv5OtzvMCDH4/HXqvpt8VBnt6qq14fD4feLPqn5fHW60B83mOecd3W68Eu0nq/L/Z4NyF1y/xx9fAPHqvpl9jt19/nq9J35pw3nOeefmv9O3Xq+Tvf7zeATXtXjDVd3e728YH33+Z5vNciiPbvP1+Z+RwF5sd0sQ5fs2X2+Z5tNsWbP7vO1ud9RQFb/QDTjhwvWdp9v9Q+8q/fsPl+b+x0FBCgBgUhAIBAQCAQEAgGBQEAgEBAIBAQCAYFAQCAQEAgEBAIBgUBAIBAQCAQEAgGBQEAgGAXk0jeWVnh/wdru833ebIo1e3afr839jgLydsNBRi7Zs/t8nzabYs2e3edrc7+jgLyp02Naj+V4t+es7vN92GqQRXt2n6/N/Z4NyN0Lc6/rcYb8/+nHv2c/oft8dXpB8N1G85zzri57/7b1fJ3ud+bx6pd1elTrknehZryv0z9rf1z5eHXb+ar549DVfL4d3C8AAAAAAAAAPDF60sduvifd+d1/fnrSJ7aqG+xJd35fGJ6fnvQ5N9WT7vzOOnt+etLn3FpPuvOb3FNP+jZ76iG/bs8256cnfd4t9aQ7v8k9vWoCgYBAICAQCAgEAgKBgEAgIBAICAQCAoGAQCAgEAgIBAICgYBAICAQCAgEAgKBgEAgIBDoSZ93Sz3pzm9yTz3p2+yph/y6Pducn570ObfWk+78JvfUk36/m+tJd35fGZ6fnvSxm+9Jd35X98wDAAAAAAAAwBNzX5Fj9//qbz2fHvL9328KSIue6qD1fHrIv7Db+x0FpE1P9UDr+fSQn7XL+x39PUibnuoFa1fRQ36dXd7vKCBteqoXrF1FD/l1dnm/o4C06alesHYVPeTX2eX9etUEAgGBQEAgEBAIBAQCAYFAQCAQEAgEBAIBgUBAIBAQCAQEAgGBQEAgEBAIBAQCAYFAQCAYBaRNT/WCtavoIb/OLu93FJA2PdUL1q6ih/w6u7zfUUDa9FQvWLuKHvLr7PJ+RwFp01M90Ho+PeRf2e39erx6TA/5dW7+fgEAAAAAAADg6Ym/atK957v7fNX8VyWc3xU96d17vrvPV016vkec3xcu60nv3vPdfb5q1PN9jvM766Ke9O49393na9PzPeD8JvccBaR7z3f3+dr0fA84v8k9RwHp3vPdfb42Pd8Dzm9yT6+aQCAgEAgIBAICgYBAICAQCAgEAgKBgEAgIBAICAQCAoGAQCAgEAgIBAICgYBAICAQCAgEo4B07/nuPl+bnu8B5ze55ygg3Xu+u8/Xpud7wPlN7jkKSPee7+7zten5HnB+k3ueDUj3nu/u81Wjnu9znN9XHtaT3r3nu/t81eDx5cT56UkHAAAAAAAAgMvoSR+7iZ7ve7Ser8P96kmf2Kp23PMdtJ6vy/3qSZ+z257vgdbzdbpfPelzdtvzvWDtKrvscdeTvs2ebXq+F6xdZZc97nrS5+2y53vB2lV22ePuVRMIBAQCAYFAQCAQEAgEBAIBgUBAIBAQCAQEAgGBQEAgEBAIBAQCAYFAQCAQEAgEBAIBgUBP+rxd9nwvWLvKLnvc9aRvs2ebnu8Fa1fZZY+7nvQ5u+35XrB2lV32uOtJv9+ue74HWs/X6X71pI89hZ7v1vPt4H4BAACAx/IfV5v6DSxvZ+4AAAAASUVORK5CYII="
},
"arrownorth": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTg1QjQxRjlFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTg1QjQxRkFFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODVCNDFGN0VDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODVCNDFGOEVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrDq62kAAAdCSURBVHja7N2x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"
},
"arrownortheast": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTE3Njk4REZFQzNDMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTE3Njk4RTBFQzNDMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDM5M0RCMEVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMTc2OThERUVDM0MxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pts1YdYAAAXoSURBVHja7N3B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"
},
"arroweast": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTg1QjQxRkRFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTg1QjQxRkVFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODVCNDFGQkVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODVCNDFGQ0VDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkRp+VEAAAbPSURBVHja7N09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"
},
"arrowsoutheast": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTE3Njk4RTNFQzNDMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTE3Njk4RTRFQzNDMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMTc2OThFMUVDM0MxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMTc2OThFMkVDM0MxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pu4vAMQAAAXfSURBVHja7N3B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"
},
"arrowsouth": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzOTNEQTZFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzOTNEQTdFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODVCNDFGRkVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODVCNDIwMEVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrnT/wkAAAdjSURBVHja7N0/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"
},
"arrowsouthwest": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTE3Njk4RTdFQzNDMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTE3Njk4RThFQzNDMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMTc2OThFNUVDM0MxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMTc2OThFNkVDM0MxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgEb5sEAAAXPSURBVHja7N3N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"
},
"arrowwest": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzOTNEQUFFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzOTNEQUJFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDM5M0RBOEVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDM5M0RBOUVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvkudBoAAAcJSURBVHja7N3B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"
},
"arrownorthwest": {
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzOTNEQUVFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzOTNEQUZFQzNCMTFFQTkwMDREMjM3Rjg3MzY4NzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDM5M0RBQ0VDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDM5M0RBREVDM0IxMUVBOTAwNEQyMzdGODczNjg3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pncgm/sAAAXOSURBVHja7N3NThtXGAbgceQuQOxoRGEFm+xyH1HvJ/25gqrt/VTtdXTXDaxMo5ZdBIsguTPgShYaDzNz7PF3jp9HsiIlkPPpjF//gc47Wy6XFdDujS0AAQEBAQGBCc3b/nI2mz39eX19/eH09PS7o6Oj9/P5/OttLvz4+Pjvw8PDn3d3d79cXV39Pub/MF/afLWT+nZW347r21dbvm99qW/39e1Tffucw3xtH1jNWv+yDshisfjp/Pz8hwlCury9vf354uLixyHfZL60+Wrf1LeLiR6IF/Xt7+jz9Q7Izc3Nh8vLy9+af59owGW95rd9HwmbR2bzjZ9v9cj8buJXK38NeCbZy3x1Fj73eg/SvCyY8OI+BbVe82PfLzZf2nyrly1TO8txvtaANK+Zp55uyJrmS17zeA93wOMc52sNyLbfUPb6tGA+fzvga82XMN8O3vBue80w8/mYFzoICAgICAgICAgICAgICAgICAgICCAgICAgICAgICAgICAgICBwsAFpDiWbepB6zX8GfK35Euarng9Nm9qXHOdrDUhzYt/U0w1Z03zJa97v4Q54n+N8rQFpjrOs/5iyOGS5WrMX86XNVz0ftzm1TznO1xqQ5oS+5jjLiS7y09GZ9Zp/9P0G86XNVz2fcLiY8M63qIadzxtmvo1n8zZWhy9/XB2+/HabEzWvmVeHL/+aeDi0+RxevZX5Bh1eDYemLQs+5oUOAgICAgICAgICAgICAgJZm9uCcdp+qMQ4kX8w3RkQPeTj5lu74Hv/VYkc51uz91+F0ZM+cr6ui726A4bo+c5hvg3PIHrS1+9vufWQvxKQMD3fOczXEhA96S/3SA95sjPzbX8+Pem7WVMPeSHz6UnfwXyVHvJi5vNzEOggICAgICAgICAgICAgICAgICAgIICAgICAgICAgICAgICAgIDAwQZED3nafJUe8mLm05O+mzX1kBcyn570HcxX6SEvZj496TuYr9JDXsx8etJHztfjbN6Gw6t7zNdxurue9FypP9ieKPc3PekwkIBABw1Tmb8swDMIeAbJ+Y2xZxMBIXMeXLzEAgEBAYEc3oPoIU/r+bZ/w/bv/3/f13yte5VTT/qLDQzd8x1t/9Znj7R/63sX8fq+2fTIV1/c76f6IKNZq1lzwPecTLh51WqtkyHPHPZv/P5Fmi/LnvQqeM+3/UteU0964pqhe77tX/KaetJb1iymh9z+Ja+pJx1yICAgICAgICAgICAgICAgICAgICCAgICAgICAgICAgICAgICAwMEGRA952pr2L3lNPemJa4bu+bZ/yWvqSX+hqB5y+5e8pp709YtbWg+5/Uvbv0pP+rie9H0fbjy05zvS/rWczRti/zrO5o0xX0496VqSyt67iDP6mBcEBMZR4omXqh0v8TyDQCnPIPrIERA8uAhIOXz0XDbvQUBAYDcvsfbeU53jfHrc03rcI13frl81mbyneuD3hJgv0v5t+H2r9m8I1uMe4foO+TmIHu2C59Pj3n//NgVEj3bB8+lx77/mpoDo0S54Pj3u/dfcFBA92gXPp8e9/5o+5oUOAgICAgICAgICAgICAgICAgICAgIICAgICAgICAgICAgICAgIHHJA9GgXPJ8e9/5rbgqIHu2C59Pj3n/NTQHRo13wfHrc+6+5KSB6tAueT497//17rQba4dWvzBdp/4aczduI1OMe4fpm35MekQKdsq+lj3mhg4CAgICAgICAgICAgICAgECp9KTvYL5cetKjX98IPe560hPny7UnPfr13UePu55082UxX6Qedz3p5gs3X6Qedz3p5gs3X6Qedz3p5gs3X6Qedx/zQgcBAQEBAQEBAQEBAQEBAQEBAQEBAQQEBAQEBAQEBAQEBAQEBAQOOSB6yM23t/ki9bjrSTdfuPki9bjrSTdfuPki9bjrSTdfuPki9bjrSU+cL+ee9CqPw6sn63Hv3ZMOdL/EAgQEBAQEBHbhPwEGAINqOacrDo3YAAAAAElFTkSuQmCC"
}
}

View File

@ -145,7 +145,31 @@ enum IconNames {
SmallSquare,
//% block="scissors"
//% jres=icons.scissors
Scissors
Scissors,
//% block="arrow north"
//% jres=icons.arrownorth
ArrowNorth,
//% block="arrow north east"
//% jres=icons.arrownortheast
ArrowNorthEast,
//% block="arrow East"
//% jres=icons.arroweast
ArrowEast,
//% block="arrow south east"
//% jres=icons.arrowsoutheast
ArrowSouthEast,
//% block="arrow south"
//% jres=icons.arrowsouth
ArrowSouth,
//% block="arrow south west"
//% jres=icons.arrowsouthwest
ArrowSouthWest,
//% block="arrow west"
//% jres=icons.arrowwest
ArrowWest,
//% block="arrow north west"
//% jres=icons.arrownorthwest
ArrowNorthWest
}
enum ArrowNames {
@ -164,7 +188,7 @@ enum ArrowNames {
//% blockIdentity=images.arrowNumber block="West"
West,
//% blockIdentity=images.arrowNumber block="North West"
NorthWest,
NorthWest
}
namespace basic {
@ -199,6 +223,7 @@ namespace basic {
//% parts="ledmatrix"
//% advanced=true
//% help=basic/show-arrow
//% deprecated=true
export function showArrow(direction: number, interval = 600) {
let res = images.arrowImage(direction)
res.showImage(0, interval)
@ -211,6 +236,7 @@ namespace images {
//% weight=50 blockGap=8
//% help=images/arrow-image
//% blockId=builtin_arrow_image block="arrow image %i"
//% deprecated=true
export function arrowImage(i: ArrowNames): Image {
switch (i) {
// compass directions
@ -528,6 +554,55 @@ namespace images {
# # . # #
. # # # .
. . # . .`);
// arrows
case IconNames.ArrowNorth: return images.createImage(`
. . # . .
. # # # .
# . # . #
. . # . .
. . # . .`);
case IconNames.ArrowNorthEast: return images.createImage(`
. . # # #
. . . # #
. . # . #
. # . . .
# . . . .`);
case IconNames.ArrowEast: return images.createImage(`
. . # . .
. . . # .
# # # # #
. . . # .
. . # . .`);
case IconNames.ArrowSouthEast: return images.createImage(`
# . . . .
. # . . .
. . # . #
. . . # #
. . # # #`);
case IconNames.ArrowSouth: return images.createImage(`
. . # . .
. . # . .
# . # . #
. # # # .
. . # . .`);
case IconNames.ArrowSouthWest: return images.createImage(`
. . . . #
. . . # .
# . # . .
# # . . .
# # # . .`);
case IconNames.ArrowWest: return images.createImage(`
. . # . .
. # . . .
# # # # #
. # . . .
. . # . .`);
case IconNames.ArrowNorthWest: return images.createImage(`
# # # . .
# # . . .
# . # . .
. . . # .
. . . . #`);
default: return images.createImage(`
. . . . .
. . . . .
@ -542,6 +617,7 @@ namespace images {
//% help=images/arrow-number
//% blockId=device_arrow block="%arrow"
//% shim=TD_ID
//% deprecated=true
export function arrowNumber(arrow: ArrowNames): number {
return arrow;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 808 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -482,6 +482,7 @@ namespace music {
//% help=music/set-volume
//% weight=70
//% group="Volume"
//% deprecated=true
export function setVolume(volume: number): void {
pins.analogSetPitchVolume(volume);
}
@ -494,6 +495,7 @@ namespace music {
//% help=music/volume
//% weight=69
//% group="Volume"
//% deprecated=true
export function volume(): number {
return pins.analogPitchVolume();
}

View File

@ -16,8 +16,7 @@ enum class DigitalPin {
C12 = MICROBIT_ID_IO_P6, // LED matrix C9
C16 = MICROBIT_ID_IO_P2, // RX
C17 = MICROBIT_ID_IO_P8, // TX
C18 = MICROBIT_ID_IO_P20, // SDA
C19 = MICROBIT_ID_IO_P19 // SCL
C18 = MICROBIT_ID_IO_P20 // SDA
};
enum class AnalogPin {

View File

@ -212,16 +212,11 @@ namespace pins {
*/
//% fixedInstance whenUsed
export const C17: AnalogInPin = new MicrobitPin(DigitalPin.C17);
/**
* Pin C18
*/
//% fixedInstance whenUsed
export const C18: DigitalInOutPin = new MicrobitPin(DigitalPin.C18);
/**
* Pin C19
*/
//% fixedInstance whenUsed
export const C19: DigitalInOutPin = new MicrobitPin(DigitalPin.C19);
}

View File

@ -56,6 +56,7 @@
"templates.ts",
"sendbuffer.s",
"light.cpp",
"compass.ts",
"parts/speaker.svg",
"parts/headphone.svg",
"parts/dcmotor.svg",

View File

@ -662,7 +662,7 @@ declare namespace pins {
/**
* Read the connector value as analog, that is, as a value comprised between 0 and 1023.
* @param name pin to write to, eg: AnalogPin.P0
* @param name pin to write to, eg: AnalogPin.P1
*/
//% help=pins/analog-read-pin weight=25
//% blockId=device_get_analog_pin block="analog read|pin %name" blockGap="8"
@ -672,7 +672,7 @@ declare namespace pins {
/**
* Set the connector value as analog. Value must be comprised between 0 and 1023.
* @param name pin name to write to, eg: AnalogPin.P0
* @param name pin name to write to, eg: AnalogPin.P1
* @param value value to write to the pin between ``0`` and ``1023``. eg:1023,0
*/
//% help=pins/analog-write-pin weight=24
@ -685,7 +685,7 @@ declare namespace pins {
/**
* Configure the pulse-width modulation (PWM) period of the analog output in microseconds.
* If this pin is not configured as an analog output (using `analog write pin`), the operation has no effect.
* @param name analog pin to set period to, eg: AnalogPin.P0
* @param name analog pin to set period to, eg: AnalogPin.P1
* @param micros period in micro seconds. eg:20000
*/
//% help=pins/analog-set-period weight=23 blockGap=8
@ -728,7 +728,7 @@ declare namespace pins {
/**
* Write a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).
* @param name pin to write to, eg: AnalogPin.P0
* @param name pin to write to, eg: AnalogPin.P1
* @param value angle or rotation speed, eg:180,90,0
*/
//% help=pins/servo-write-pin weight=20

View File

@ -1,3 +1,4 @@
{
"additionalFilePath": "../../node_modules/pxt-common-packages/libs/radio-broadcast"
"additionalFilePath": "../../node_modules/pxt-common-packages/libs/radio-broadcast",
"icon": "./static/packages/radio-broadcast/icon.png"
}

View File

@ -1,5 +1,6 @@
{
"additionalFilePath": "../../node_modules/pxt-common-packages/libs/radio",
"icon": "./static/packages/radio/icon.png",
"yotta": {
"config": {
"microbit-dal": {

View File

@ -6,6 +6,7 @@
"ns.ts",
"targetoverrides.ts"
],
"icon": "./static/packages/servo/icon.png",
"public": true,
"dependencies": {
"core": "file:../core"