limited support for RGB led
This commit is contained in:
parent
c88645d0cd
commit
4b583e221b
56
libs/microbit/basic.ts
Normal file
56
libs/microbit/basic.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
Well known colors
|
||||||
|
*/
|
||||||
|
enum Colors {
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=red
|
||||||
|
Red = 0xFF0000,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=orange
|
||||||
|
Orange = 0xFFA500,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=yellow
|
||||||
|
Yellow = 0xFFFF00,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=green
|
||||||
|
Green = 0x00FF00,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=blue
|
||||||
|
Blue = 0x0000FF,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=indigo
|
||||||
|
Indigo = 0x4b0082,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=violet
|
||||||
|
Violet = 0x8a2be2,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=purple
|
||||||
|
Purple = 0xFF00FF,
|
||||||
|
//% blockIdentity=basic.color
|
||||||
|
//% block=white
|
||||||
|
White = 0xFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides access to basic micro:bit functionality.
|
||||||
|
*/
|
||||||
|
//% color=#0078D7 weight=100
|
||||||
|
namespace basic {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the color on the build-in LED
|
||||||
|
*/
|
||||||
|
//% blockId=device_set_led_color block="set led to %color=color_id" icon="\uf00a"
|
||||||
|
//% weight=50
|
||||||
|
export function setLedColor(color: number) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the color name to a number
|
||||||
|
*/
|
||||||
|
//% blockId=color_id block="%c" shim=TD_ID
|
||||||
|
export function color(c: Colors): number {
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,7 @@
|
|||||||
"helpers.ts",
|
"helpers.ts",
|
||||||
"images.cpp",
|
"images.cpp",
|
||||||
"basic.cpp",
|
"basic.cpp",
|
||||||
|
"basic.ts",
|
||||||
"input.cpp",
|
"input.cpp",
|
||||||
"input.ts",
|
"input.ts",
|
||||||
"control.ts",
|
"control.ts",
|
||||||
|
@ -13,6 +13,7 @@ namespace pxsim {
|
|||||||
buttonPairState: ButtonPairState;
|
buttonPairState: ButtonPairState;
|
||||||
radioState: RadioState;
|
radioState: RadioState;
|
||||||
neopixelState: NeoPixelState;
|
neopixelState: NeoPixelState;
|
||||||
|
rgbLedState: number;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super()
|
||||||
@ -48,7 +49,7 @@ namespace pxsim {
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
DAL.MICROBIT_ID_IO_P19,
|
DAL.MICROBIT_ID_IO_P19,
|
||||||
DAL.MICROBIT_ID_IO_P20
|
DAL.MICROBIT_ID_IO_P20
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
this.builtinParts["radio"] = this.radioState = new RadioState(runtime);
|
this.builtinParts["radio"] = this.radioState = new RadioState(runtime);
|
||||||
@ -61,11 +62,11 @@ namespace pxsim {
|
|||||||
|
|
||||||
this.builtinVisuals["buttonpair"] = () => new visuals.ButtonPairView();
|
this.builtinVisuals["buttonpair"] = () => new visuals.ButtonPairView();
|
||||||
this.builtinVisuals["ledmatrix"] = () => new visuals.LedMatrixView();
|
this.builtinVisuals["ledmatrix"] = () => new visuals.LedMatrixView();
|
||||||
this.builtinVisuals["neopixel"] = () => new visuals.NeoPixelView();
|
this.builtinVisuals["neopixel"] = () => new visuals.NeoPixelView();
|
||||||
|
|
||||||
this.builtinPartVisuals["buttonpair"] = (xy: visuals.Coord) => visuals.mkBtnSvg(xy);
|
this.builtinPartVisuals["buttonpair"] = (xy: visuals.Coord) => visuals.mkBtnSvg(xy);
|
||||||
this.builtinPartVisuals["ledmatrix"] = (xy: visuals.Coord) => visuals.mkLedMatrixSvg(xy, 8, 8);
|
this.builtinPartVisuals["ledmatrix"] = (xy: visuals.Coord) => visuals.mkLedMatrixSvg(xy, 8, 8);
|
||||||
this.builtinPartVisuals["neopixel"] = (xy: visuals.Coord) => visuals.mkNeoPixelPart(xy);
|
this.builtinPartVisuals["neopixel"] = (xy: visuals.Coord) => visuals.mkNeoPixelPart(xy);
|
||||||
}
|
}
|
||||||
|
|
||||||
receiveMessage(msg: SimulatorMessage) {
|
receiveMessage(msg: SimulatorMessage) {
|
||||||
@ -97,7 +98,7 @@ namespace pxsim {
|
|||||||
const cmpDefs = msg.partDefinitions || {};
|
const cmpDefs = msg.partDefinitions || {};
|
||||||
const fnArgs = msg.fnArgs;
|
const fnArgs = msg.fnArgs;
|
||||||
|
|
||||||
const opts : visuals.BoardHostOpts = {
|
const opts: visuals.BoardHostOpts = {
|
||||||
state: this,
|
state: this,
|
||||||
boardDef: boardDef,
|
boardDef: boardDef,
|
||||||
partsList: cmpsList,
|
partsList: cmpsList,
|
||||||
|
5
sim/state/rgbled.ts
Normal file
5
sim/state/rgbled.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
namespace pxsim.basic {
|
||||||
|
export function setLedColor(c: number) {
|
||||||
|
board().rgbLedState = c;
|
||||||
|
}
|
||||||
|
}
|
@ -253,6 +253,7 @@ namespace pxsim.visuals {
|
|||||||
private shakeButton: SVGElement;
|
private shakeButton: SVGElement;
|
||||||
public board: pxsim.DalBoard;
|
public board: pxsim.DalBoard;
|
||||||
private pinNmToCoord: Map<Coord> = {};
|
private pinNmToCoord: Map<Coord> = {};
|
||||||
|
private rgbLed: SVGElement;
|
||||||
|
|
||||||
constructor(public props: IBoardProps) {
|
constructor(public props: IBoardProps) {
|
||||||
this.recordPinCoords();
|
this.recordPinCoords();
|
||||||
@ -341,11 +342,21 @@ namespace pxsim.visuals {
|
|||||||
this.updateTemperature();
|
this.updateTemperature();
|
||||||
this.updateButtonAB();
|
this.updateButtonAB();
|
||||||
this.updateGestures();
|
this.updateGestures();
|
||||||
|
this.updateRgbLed();
|
||||||
|
|
||||||
if (!runtime || runtime.dead) svg.addClass(this.element, "grayscale");
|
if (!runtime || runtime.dead) svg.addClass(this.element, "grayscale");
|
||||||
else svg.removeClass(this.element, "grayscale");
|
else svg.removeClass(this.element, "grayscale");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private updateRgbLed() {
|
||||||
|
let state = this.board;
|
||||||
|
if (state.rgbLedState) {
|
||||||
|
if (!this.rgbLed)
|
||||||
|
this.rgbLed = svg.child(this.g, "circle", { cx: 170, cy: 200 });
|
||||||
|
svg.fill(this.rgbLed, svg.toHtmlColor(state.rgbLedState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private updateGestures() {
|
private updateGestures() {
|
||||||
let state = this.board;
|
let state = this.board;
|
||||||
if (state.accelerometerState.useShake && !this.shakeButton) {
|
if (state.accelerometerState.useShake && !this.shakeButton) {
|
||||||
@ -353,7 +364,7 @@ namespace pxsim.visuals {
|
|||||||
this.shakeButton = shake.inner;
|
this.shakeButton = shake.inner;
|
||||||
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp)
|
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp)
|
||||||
svg.buttonEvents(shake.outer,
|
svg.buttonEvents(shake.outer,
|
||||||
ev => {},
|
ev => { },
|
||||||
(ev) => {
|
(ev) => {
|
||||||
svg.fill(this.shakeButton, this.props.theme.virtualButtonDown)
|
svg.fill(this.shakeButton, this.props.theme.virtualButtonDown)
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user