limited support for RGB led

This commit is contained in:
Peli de Halleux
2016-09-27 13:35:48 -07:00
parent c88645d0cd
commit 4b583e221b
5 changed files with 79 additions and 5 deletions

View File

@ -13,6 +13,7 @@ namespace pxsim {
buttonPairState: ButtonPairState;
radioState: RadioState;
neopixelState: NeoPixelState;
rgbLedState: number;
constructor() {
super()
@ -48,7 +49,7 @@ namespace pxsim {
0,
0,
DAL.MICROBIT_ID_IO_P19,
DAL.MICROBIT_ID_IO_P20
DAL.MICROBIT_ID_IO_P20
]
});
this.builtinParts["radio"] = this.radioState = new RadioState(runtime);
@ -61,11 +62,11 @@ namespace pxsim {
this.builtinVisuals["buttonpair"] = () => new visuals.ButtonPairView();
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["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) {
@ -97,7 +98,7 @@ namespace pxsim {
const cmpDefs = msg.partDefinitions || {};
const fnArgs = msg.fnArgs;
const opts : visuals.BoardHostOpts = {
const opts: visuals.BoardHostOpts = {
state: this,
boardDef: boardDef,
partsList: cmpsList,

5
sim/state/rgbled.ts Normal file
View File

@ -0,0 +1,5 @@
namespace pxsim.basic {
export function setLedColor(c: number) {
board().rgbLedState = c;
}
}

View File

@ -253,6 +253,7 @@ namespace pxsim.visuals {
private shakeButton: SVGElement;
public board: pxsim.DalBoard;
private pinNmToCoord: Map<Coord> = {};
private rgbLed: SVGElement;
constructor(public props: IBoardProps) {
this.recordPinCoords();
@ -341,11 +342,21 @@ namespace pxsim.visuals {
this.updateTemperature();
this.updateButtonAB();
this.updateGestures();
this.updateRgbLed();
if (!runtime || runtime.dead) svg.addClass(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() {
let state = this.board;
if (state.accelerometerState.useShake && !this.shakeButton) {
@ -353,7 +364,7 @@ namespace pxsim.visuals {
this.shakeButton = shake.inner;
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp)
svg.buttonEvents(shake.outer,
ev => {},
ev => { },
(ev) => {
svg.fill(this.shakeButton, this.props.theme.virtualButtonDown)
},