Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
668d814559 | |||
c3f539f396 | |||
991813fff7 | |||
85a8f1c2c5 | |||
ea33b81b2a | |||
c8381d7626 | |||
62b5941143 | |||
1d5d18dc88 | |||
bc4b71e0d6 | |||
5c47ce2f91 | |||
6a577287c1 | |||
8bd884e155 | |||
20be398c2c | |||
ccf6164d87 | |||
58294883d7 | |||
00194d4aa6 | |||
ec900f805e | |||
5f5bdd7294 | |||
953bf27bc5 | |||
d4ee9d2d62 | |||
38b2fc7b95 |
@ -73,6 +73,12 @@ Verify that the program you just created shows eyes on the Brick Display, and th
|
||||
|
||||
**Well done!**
|
||||
|
||||
## Run it Again
|
||||
|
||||

|
||||
|
||||
Use the Brick Buttons and navigate to the File Manager tab. Open the **BrkProg_SAVE** folder, select **Try** and click the center button to run it again.
|
||||
|
||||
## Connect a Large Motor @unplugged
|
||||
|
||||
Now you will learn to control the Large Motor.
|
||||
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
"appref": "v1.2.22"
|
||||
"appref": "v1.2.26"
|
||||
}
|
||||
|
@ -388,12 +388,12 @@
|
||||
}
|
||||
function downloadWin64() {
|
||||
// TODO: Keep this link up-to-date with the desired release version
|
||||
window.open("https://makecode.com/api/release/ev3/v1.2.22/win64");
|
||||
window.open("https://makecode.com/api/release/ev3/v1.2.26/win64");
|
||||
tickEvent("offlineapp.download", { "target": "ev3", "platform": "win64" });
|
||||
}
|
||||
function downloadMac64() {
|
||||
// TODO: Keep this link up-to-date with the desired release version
|
||||
window.open("https://makecode.com/api/release/ev3/v1.2.22/mac64");
|
||||
window.open("https://makecode.com/api/release/ev3/v1.2.26/mac64");
|
||||
tickEvent("offlineapp.download", { "target": "ev3", "platform": "mac64" });
|
||||
}
|
||||
</script>
|
||||
|
3
docs/stable-ref.json
Normal file
3
docs/stable-ref.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"appref": "v1.2"
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
const enum ColorSensorMode {
|
||||
None = 0,
|
||||
//% block="reflected light intensity"
|
||||
ReflectedLightIntensity = 0,
|
||||
//% block="ambient light intensity"
|
||||
@ -59,7 +58,6 @@ namespace sensors {
|
||||
|
||||
constructor(port: number) {
|
||||
super(port)
|
||||
this._setMode(ColorSensorMode.None);
|
||||
this.thresholdDetector = new sensors.ThresholdDetector(this.id());
|
||||
this.calibrating = false;
|
||||
}
|
||||
@ -181,6 +179,22 @@ namespace sensors {
|
||||
return this.getNumber(NumberFormat.UInt8LE, 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the color is being detected
|
||||
* @param color the color to detect
|
||||
*/
|
||||
//% help=sensors/color-sensor/is-color-detected
|
||||
//% block="is **color sensor** %this|detected|%color=colorEnumPicker"
|
||||
//% blockId=colorisColorDetectedDetected
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% this.fieldEditor="ports"
|
||||
//% weight=99 blockGap=8
|
||||
//% group="Color Sensor"
|
||||
isColorDetected(color: number) {
|
||||
return this.color() == color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current raw rgb values as an array from the color sensor.
|
||||
* @param sensor the color sensor to query the request
|
||||
|
@ -0,0 +1,30 @@
|
||||
# Is Color Detected
|
||||
|
||||
Checks the color is detected
|
||||
|
||||
```sig
|
||||
let b = sensors.color1.isColorDetected(ColorSensorColor.Blue)
|
||||
```
|
||||
|
||||
The [color](/reference/sensors/color) you choose to look for is one of the colors that the sensor can detect. If you want to use colors for tracking, it's best to use a color that is the same or very close to the ones the sensor detects.
|
||||
|
||||
## Parameters
|
||||
|
||||
* **color**: the [color](/reference/sensors/color) to watch for.
|
||||
|
||||
## Example
|
||||
|
||||
Wait for the sensor to see ``blue``. Then, show an expression on the screen.
|
||||
|
||||
```blocks
|
||||
brick.showString("Waiting for blue", 1)
|
||||
while(!sensors.color1.isColorDetected(ColorSensorColor.Blue)) {
|
||||
pause(20)
|
||||
}
|
||||
brick.clearScreen()
|
||||
brick.showImage(images.expressionsSick)
|
||||
```
|
||||
|
||||
## See also
|
||||
|
||||
[on color detected](/reference/sensors/color-sensor/on-color-detected), [color](/reference/sensors/color)
|
@ -121,10 +121,9 @@ namespace sensors.internal {
|
||||
|
||||
powerMM = control.mmap("/dev/lms_power", 2, 0)
|
||||
|
||||
devPoller = new Poller(250, () => { return hashDevices(); },
|
||||
(prev, curr) => {
|
||||
detectDevices();
|
||||
});
|
||||
devPoller = new Poller(500,
|
||||
() => { return hashDevices(); },
|
||||
(prev, curr) => { detectDevices(); });
|
||||
}
|
||||
|
||||
export function getActiveSensors(): Sensor[] {
|
||||
@ -277,22 +276,25 @@ void cUiUpdatePower(void)
|
||||
const conns = analogMM.slice(AnalogOff.InConn, DAL.NUM_INPUTS)
|
||||
let r = 0;
|
||||
for (let i = 0; i < conns.length; ++i) {
|
||||
r = (r << 8 | conns[i]);
|
||||
r = conns[i] + (r << 6) + (r << 16) - r;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
let nonActivated = 0;
|
||||
function detectDevices() {
|
||||
//control.dmesg(`detect devices (${nonActivated} na)`)
|
||||
control.dmesg(`detect devices (hash ${hashDevices()})`)
|
||||
const conns = analogMM.slice(AnalogOff.InConn, DAL.NUM_INPUTS)
|
||||
let numChanged = 0;
|
||||
const uartSensors: SensorInfo[] = [];
|
||||
|
||||
for (const sensorInfo of sensorInfos) {
|
||||
const newConn = conns[sensorInfo.port]
|
||||
if (newConn == sensorInfo.connType) {
|
||||
// control.dmesg(`connection unchanged ${newConn} at ${sensorInfo.port}`)
|
||||
if (newConn == sensorInfo.connType
|
||||
&& sensorInfo.sensor
|
||||
&& sensorInfo.sensor.isActive()) {
|
||||
if (newConn == DAL.CONN_INPUT_UART)
|
||||
uartSensors.push(sensorInfo);
|
||||
continue;
|
||||
}
|
||||
numChanged++
|
||||
@ -323,7 +325,8 @@ void cUiUpdatePower(void)
|
||||
for (const sensorInfo of uartSensors) {
|
||||
let uinfo = readUartInfo(sensorInfo.port, 0)
|
||||
sensorInfo.devType = uinfo[TypesOff.Type]
|
||||
control.dmesg(`UART type ${sensorInfo.devType}`)
|
||||
const mode = uinfo[TypesOff.Mode];
|
||||
control.dmesg(`UART type ${sensorInfo.devType} mode ${mode}`)
|
||||
}
|
||||
}
|
||||
|
||||
@ -427,11 +430,11 @@ void cUiUpdatePower(void)
|
||||
constructor(port: number) {
|
||||
super(port)
|
||||
this.mode = 0
|
||||
this.realmode = 0
|
||||
this.realmode = -1
|
||||
}
|
||||
|
||||
_activated() {
|
||||
this.realmode = 0
|
||||
this.realmode = -1
|
||||
this._setMode(this.mode)
|
||||
}
|
||||
|
||||
@ -458,7 +461,7 @@ void cUiUpdatePower(void)
|
||||
|
||||
reset() {
|
||||
if (this.isActive()) uartReset(this._port);
|
||||
this.realmode = 0;
|
||||
this.realmode = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -536,8 +539,6 @@ void cUiUpdatePower(void)
|
||||
|
||||
function uartClearChange(port: number) {
|
||||
control.dmesg(`UART clear change`);
|
||||
const UART_DATA_READY = 8
|
||||
const UART_PORT_CHANGED = 1
|
||||
while (true) {
|
||||
let status = getUartStatus(port)
|
||||
if (port < 0) break
|
||||
@ -558,7 +559,7 @@ void cUiUpdatePower(void)
|
||||
}
|
||||
|
||||
function setUartModes() {
|
||||
control.dmesg(`UART set modes`)
|
||||
control.dmesg(`UART set modes 0x${devcon.toHex()}`)
|
||||
uartMM.ioctl(IO.UART_SET_CONN, devcon)
|
||||
const ports: number[] = [];
|
||||
for (let port = 0; port < DAL.NUM_INPUTS; ++port) {
|
||||
@ -570,22 +571,26 @@ void cUiUpdatePower(void)
|
||||
while (ports.length) {
|
||||
const port = ports.pop();
|
||||
const status = waitNonZeroUartStatus(port)
|
||||
control.dmesg(`UART set mode ${status} at ${port}`);
|
||||
control.dmesg(`UART status ${status} at ${port}`);
|
||||
if (!(status & UART_DATA_READY))
|
||||
setUartMode(port, devcon[DevConOff.Mode + port]);
|
||||
}
|
||||
}
|
||||
|
||||
function updateUartMode(port: number, mode: number) {
|
||||
control.dmesg(`UART set mode to ${mode} at ${port}`)
|
||||
control.dmesg(`UART update mode to ${mode} at ${port}`)
|
||||
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Connection + port, DAL.CONN_INPUT_UART)
|
||||
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Type + port, 33)
|
||||
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Mode + port, mode)
|
||||
}
|
||||
|
||||
const UART_PORT_CHANGED = 1
|
||||
const UART_DATA_READY = 8
|
||||
function setUartMode(port: number, mode: number) {
|
||||
const UART_PORT_CHANGED = 1
|
||||
while (true) {
|
||||
if (port < 0) return
|
||||
updateUartMode(port, mode);
|
||||
control.dmesg(`UART set mode 0x${devcon.toHex()}`)
|
||||
uartMM.ioctl(IO.UART_SET_CONN, devcon)
|
||||
let status = waitNonZeroUartStatus(port)
|
||||
if (status & UART_PORT_CHANGED) {
|
||||
@ -593,7 +598,8 @@ void cUiUpdatePower(void)
|
||||
uartClearChange(port)
|
||||
} else {
|
||||
control.dmesg(`UART status ${status}`);
|
||||
break;
|
||||
if (status & UART_DATA_READY)
|
||||
break;
|
||||
}
|
||||
pause(10)
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pxt-ev3",
|
||||
"version": "1.4.7",
|
||||
"version": "1.4.8",
|
||||
"description": "LEGO MINDSTORMS EV3 for Microsoft MakeCode",
|
||||
"private": false,
|
||||
"keywords": [
|
||||
@ -45,8 +45,8 @@
|
||||
"@types/web-bluetooth": "0.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"pxt-common-packages": "6.16.10",
|
||||
"pxt-core": "5.25.13"
|
||||
"pxt-common-packages": "6.16.18",
|
||||
"pxt-core": "5.28.8"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node node_modules/pxt-core/built/pxt.js travis"
|
||||
|
@ -3,7 +3,6 @@
|
||||
namespace pxsim {
|
||||
|
||||
export enum ColorSensorMode {
|
||||
None = -1,
|
||||
Reflected = 0,
|
||||
Ambient = 1,
|
||||
Colors = 2,
|
||||
|
@ -1,6 +1,5 @@
|
||||
namespace pxsim {
|
||||
export const enum GyroSensorMode {
|
||||
None = -1,
|
||||
Angle = 0,
|
||||
Rate = 1,
|
||||
}
|
||||
|
@ -44,7 +44,6 @@ namespace pxsim {
|
||||
}
|
||||
|
||||
export enum InfraredSensorMode {
|
||||
None = -1,
|
||||
Proximity = 0,
|
||||
Seek = 1,
|
||||
RemoteControl = 2
|
||||
|
@ -27,6 +27,6 @@
|
||||
"Tutorial Videos": "videos"
|
||||
},
|
||||
"electronManifest": {
|
||||
"latest": "v1.2.22"
|
||||
"latest": "v1.2.26"
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user