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

56
libs/microbit/basic.ts Normal file
View 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;
}
}

View File

@ -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",

View File

@ -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
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; 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)
}, },