support for rgb led in simulator
This commit is contained in:
parent
cb280af783
commit
c4787e1028
@ -6,6 +6,26 @@
|
|||||||
*/
|
*/
|
||||||
//% color=#0078D7 weight=100
|
//% color=#0078D7 weight=100
|
||||||
namespace basic {
|
namespace basic {
|
||||||
|
/**
|
||||||
|
* Sets the color on the build-in LED. Set to 0 to turn off.
|
||||||
|
*/
|
||||||
|
//% blockId=device_set_led_color block="set led to %color=color_id" icon="\uf00a"
|
||||||
|
//% weight=50
|
||||||
|
void setLedColor(int color) {
|
||||||
|
if (!color) {
|
||||||
|
uBit.rgb.Off();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w = (color >> 24) & 0xFF;
|
||||||
|
int r = (color >> 16) & 0xFF;
|
||||||
|
int g = (color >> 8) & 0xFF;
|
||||||
|
int b = (color) & 0xFF;
|
||||||
|
|
||||||
|
uBit.rgb.Set_Color(r,g,b,w);
|
||||||
|
uBit.rgb.On();
|
||||||
|
uBit.rgb.Send_to_LED();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.
|
* Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.
|
||||||
|
@ -4,31 +4,31 @@
|
|||||||
enum Colors {
|
enum Colors {
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=red
|
//% block=red
|
||||||
Red = 0xFF0000,
|
Red = 0x00FF0000,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=orange
|
//% block=orange
|
||||||
Orange = 0xFFA500,
|
Orange = 0x00FFA500,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=yellow
|
//% block=yellow
|
||||||
Yellow = 0xFFFF00,
|
Yellow = 0x00FFFF00,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=green
|
//% block=green
|
||||||
Green = 0x00FF00,
|
Green = 0x0000FF00,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=blue
|
//% block=blue
|
||||||
Blue = 0x0000FF,
|
Blue = 0x000000FF,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=indigo
|
//% block=indigo
|
||||||
Indigo = 0x4b0082,
|
Indigo = 0x004b0082,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=violet
|
//% block=violet
|
||||||
Violet = 0x8a2be2,
|
Violet = 0x008a2be2,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=purple
|
//% block=purple
|
||||||
Purple = 0xFF00FF,
|
Purple = 0x00FF00FF,
|
||||||
//% blockIdentity=basic.color
|
//% blockIdentity=basic.color
|
||||||
//% block=white
|
//% block=white
|
||||||
White = 0xFFFFFF
|
White = 0xFF00000
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,16 +36,6 @@ enum Colors {
|
|||||||
*/
|
*/
|
||||||
//% color=#0078D7 weight=100
|
//% color=#0078D7 weight=100
|
||||||
namespace basic {
|
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
|
* Converts the color name to a number
|
||||||
*/
|
*/
|
||||||
@ -53,4 +43,17 @@ namespace basic {
|
|||||||
export function color(c: Colors): number {
|
export function color(c: Colors): number {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts red, green, blue channels into a RGB color
|
||||||
|
* @param red value of the red channel between 0 and 255. eg: 255
|
||||||
|
* @param green value of the green channel between 0 and 255. eg: 255
|
||||||
|
* @param blue value of the blue channel between 0 and 255. eg: 255
|
||||||
|
* @param white value of the white channel between 0 and 255. eg: 0
|
||||||
|
*/
|
||||||
|
//% weight=1
|
||||||
|
//% blockId="core_rgb" block="red %red|green %green|blue %blue|white %white"
|
||||||
|
export function rgbw(red: number, green: number, blue: number, white:number): number {
|
||||||
|
return ((white & 0xFF) << 24) | ((red & 0xFF) << 16) | ((green & 0xFF) << 8) | (blue & 0xFF);
|
||||||
|
}
|
||||||
}
|
}
|
7
libs/core/shims.d.ts
vendored
7
libs/core/shims.d.ts
vendored
@ -128,6 +128,13 @@ declare interface Image {
|
|||||||
//% color=#0078D7 weight=100
|
//% color=#0078D7 weight=100
|
||||||
declare namespace basic {
|
declare namespace basic {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the color on the build-in LED. Set to 0 to turn off.
|
||||||
|
*/
|
||||||
|
//% blockId=device_set_led_color block="set led to %color=color_id" icon="\uf00a"
|
||||||
|
//% weight=50 shim=basic::setLedColor
|
||||||
|
function setLedColor(color: number): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.
|
* Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.
|
||||||
* @param interval speed of scroll; eg: 150, 100, 200, -100
|
* @param interval speed of scroll; eg: 150, 100, 200, -100
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
namespace pxsim.basic {
|
namespace pxsim.basic {
|
||||||
export function setLedColor(c: number) {
|
export function setLedColor(c: number) {
|
||||||
board().rgbLedState = c;
|
board().rgbLedState = c;
|
||||||
|
runtime.queueDisplayUpdate()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -352,8 +352,16 @@ namespace pxsim.visuals {
|
|||||||
let state = this.board;
|
let state = this.board;
|
||||||
if (state.rgbLedState) {
|
if (state.rgbLedState) {
|
||||||
if (!this.rgbLed)
|
if (!this.rgbLed)
|
||||||
this.rgbLed = svg.child(this.g, "circle", { cx: 170, cy: 200 });
|
this.rgbLed = svg.child(this.g, "circle", { cx: 170, cy: 190, r:5 });
|
||||||
svg.fill(this.rgbLed, svg.toHtmlColor(state.rgbLedState));
|
const c = state.rgbLedState;
|
||||||
|
const b = c & 0xFF;
|
||||||
|
const g = (c >> 8) & 0xFF;
|
||||||
|
const r = (c >> 16) & 0xFF;
|
||||||
|
const w = (c >> 24) & 0xFF;
|
||||||
|
const ch = `rgba(${r}, ${g}, ${b}, 1)`;
|
||||||
|
svg.fill(this.rgbLed, ch);
|
||||||
|
} else if (this.rgbLed) {
|
||||||
|
svg.fill(this.rgbLed, 'white');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user