parent
a71dee2923
commit
3d73f193a8
@ -17,5 +17,6 @@
|
||||
"sensors.ColorSensor.setThreshold|param|condition": "the dark or bright light condition",
|
||||
"sensors.ColorSensor.setThreshold|param|value": "the value threshold",
|
||||
"sensors.ColorSensor.threshold": "Gets the threshold value",
|
||||
"sensors.ColorSensor.threshold|param|condition": "the light condition"
|
||||
"sensors.ColorSensor.threshold|param|condition": "the light condition",
|
||||
"sensors.color": "Returns a color that the sensor can detect"
|
||||
}
|
@ -26,6 +26,7 @@
|
||||
"sensors.color2|block": "color 2",
|
||||
"sensors.color3|block": "color 3",
|
||||
"sensors.color4|block": "color 4",
|
||||
"sensors.color|block": "color %color",
|
||||
"sensors|block": "sensors",
|
||||
"{id:category}Sensors": "Sensors",
|
||||
"{id:group}Color Sensor": "Color Sensor",
|
||||
|
@ -19,21 +19,21 @@ enum LightIntensityMode {
|
||||
}
|
||||
|
||||
const enum ColorSensorColor {
|
||||
//% block="none"
|
||||
//% block="none" blockIdentity=sensors.color
|
||||
None,
|
||||
//% block="black"
|
||||
//% block="black" blockIdentity=sensors.color
|
||||
Black,
|
||||
//% block="blue"
|
||||
//% block="blue" blockIdentity=sensors.color
|
||||
Blue,
|
||||
//% block="green"
|
||||
//% block="green" blockIdentity=sensors.color
|
||||
Green,
|
||||
//% block="yellow"
|
||||
//% block="yellow" blockIdentity=sensors.color
|
||||
Yellow,
|
||||
//% block="red"
|
||||
//% block="red" blockIdentity=sensors.color
|
||||
Red,
|
||||
//% block="white"
|
||||
//% block="white" blockIdentity=sensors.color
|
||||
White,
|
||||
//% block="brown"
|
||||
//% block="brown" blockIdentity=sensors.color
|
||||
Brown,
|
||||
}
|
||||
|
||||
@ -157,6 +157,7 @@ namespace sensors {
|
||||
//% sensor.fieldEditor="ports"
|
||||
//% weight=98
|
||||
//% group="Color Sensor"
|
||||
//% blockGap=8
|
||||
color(): ColorSensorColor {
|
||||
this.setMode(ColorSensorMode.Color)
|
||||
return this.getNumber(NumberFormat.UInt8LE, 0)
|
||||
@ -263,45 +264,57 @@ namespace sensors {
|
||||
|
||||
this.light(mode); // trigger a read
|
||||
pauseUntil(() => this.isActive()); // ensure sensor is live
|
||||
|
||||
|
||||
|
||||
let vold = 0;
|
||||
let vcount = 0;
|
||||
let min = 200;
|
||||
let max = -200;
|
||||
let k = 0;
|
||||
while(k++ < 1000 && vcount < 50) {
|
||||
let max = -200;
|
||||
let k = 0;
|
||||
while (k++ < 1000 && vcount < 50) {
|
||||
let v = this.light(mode);
|
||||
min = Math.min(min, v);
|
||||
max = Math.max(max, v);
|
||||
// detect if nothing has changed and stop calibration
|
||||
if (Math.abs(v - vold) <= 2)
|
||||
vcount ++;
|
||||
vcount++;
|
||||
else {
|
||||
vold = v;
|
||||
vcount = 1;
|
||||
}
|
||||
|
||||
// wait a bit
|
||||
loops.pause(50);
|
||||
loops.pause(50);
|
||||
}
|
||||
|
||||
// apply tolerance
|
||||
const minDist = 10;
|
||||
min = Math.max(minDist / 2, Math.min(min + deviation / 2, max - deviation / 2 - minDist / 2));
|
||||
max = Math.min(100 - minDist / 2, Math.max(min + minDist, max - deviation / 2));
|
||||
|
||||
|
||||
// apply thresholds
|
||||
this.thresholdDetector.setLowThreshold(min);
|
||||
this.thresholdDetector.setHighThreshold(max);
|
||||
|
||||
this.calibrating = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a color that the sensor can detect
|
||||
*/
|
||||
//% shim=TD_ID
|
||||
//% blockId=colorSensorColor block="color %color"
|
||||
//% group="Color Sensor"
|
||||
//% weight=97
|
||||
export function color(color: ColorSensorColor): ColorSensorColor {
|
||||
return color;
|
||||
}
|
||||
|
||||
//% whenUsed block="color 3" weight=95 fixedInstance jres=icons.port3
|
||||
export const color3: ColorSensor = new ColorSensor(3)
|
||||
|
||||
|
||||
//% whenUsed block="color 1" weight=90 fixedInstance jres=icons.port1
|
||||
export const color1: ColorSensor = new ColorSensor(1)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user