optimize blocks

1. Fix bug of display clear;
2. Add set display brightness level effective immediately;
3. Add limit display vlaue when use display bit show;
4. Add ultrasonic measured interval.
This commit is contained in:
jinyuan.weng 2017-10-23 10:23:08 +08:00
parent 759cc8c0a8
commit b0b23af91d

145
main.ts
View File

@ -69,7 +69,7 @@ namespace grove {
const gestureEventId = 3100; const gestureEventId = 3100;
let lastGesture = GroveGesture.None; let lastGesture = GroveGesture.None;
let paj7620: PAJ7620 = undefined; let paj7620: PAJ7620 = undefined;
let data: number = 0; let distanceBackup: number = 0;
/** /**
* Do something when a gesture is detected by Grove - Gesture * Do something when a gesture is detected by Grove - Gesture
* @param gesture type of gesture to detect * @param gesture type of gesture to detect
@ -102,31 +102,20 @@ namespace grove {
{ {
let duration = 0; let duration = 0;
let RangeInCentimeters = 0; let RangeInCentimeters = 0;
let buf: number [] = [0, 0, 0, 0, 0];
let num = 0;
for(let i = 0; i < 5; i ++) pins.digitalWritePin(pin, 0);
{ control.waitMicros(2);
pins.digitalWritePin(pin, 0); pins.digitalWritePin(pin, 1);
control.waitMicros(2); control.waitMicros(20);
pins.digitalWritePin(pin, 1); pins.digitalWritePin(pin, 0);
control.waitMicros(5); duration = pins.pulseIn(pin, PulseValue.High, 50000); // Max duration 50 ms
pins.digitalWritePin(pin, 0);
buf[i] = pins.pulseIn(pin, PulseValue.High, 100000); // Max duration 100 ms
}
for(let i = 0; i < 5; i ++)
{
if(buf[i] != 0)
{
duration = duration + buf[i];
num ++;
}
}
duration = duration / num;
RangeInCentimeters = duration * 153 / 29 / 2 / 100; RangeInCentimeters = duration * 153 / 29 / 2 / 100;
if(RangeInCentimeters > 0) distanceBackup = RangeInCentimeters;
else RangeInCentimeters = distanceBackup;
basic.pause(50);
return RangeInCentimeters; return RangeInCentimeters;
} }
@ -139,34 +128,23 @@ namespace grove {
export function measureInInches(pin: DigitalPin): number export function measureInInches(pin: DigitalPin): number
{ {
let duration = 0; let duration = 0;
let RangeInCentimeters = 0; let RangeInInches = 0;
let buf: number [] = [0, 0, 0, 0, 0];
let num = 0;
for(let i = 0; i < 5; i ++) pins.digitalWritePin(pin, 0);
{ control.waitMicros(2);
pins.digitalWritePin(pin, 0); pins.digitalWritePin(pin, 1);
control.waitMicros(2); control.waitMicros(20);
pins.digitalWritePin(pin, 1); pins.digitalWritePin(pin, 0);
control.waitMicros(5); duration = pins.pulseIn(pin, PulseValue.High, 100000); // Max duration 100 ms
pins.digitalWritePin(pin, 0);
buf[i] = pins.pulseIn(pin, PulseValue.High, 100000); // Max duration 100 ms
}
for(let i = 0; i < 5; i ++) RangeInInches = duration * 153 / 74 / 2 / 100;
{
if(buf[i] != 0)
{
duration = duration + buf[i];
num ++;
}
}
duration = duration / num; if(RangeInInches > 0) distanceBackup = RangeInInches;
RangeInCentimeters = duration * 153 / 74 / 2 / 100; else RangeInInches = distanceBackup;
return RangeInCentimeters; basic.pause(50);
return RangeInInches;
} }
/** /**
@ -179,10 +157,12 @@ namespace grove {
{ {
let display = new TM1637(); let display = new TM1637();
display.buf = pins.createBuffer(4);
display.clkPin = clkPin; display.clkPin = clkPin;
display.dataPin = dataPin; display.dataPin = dataPin;
display.brightnessLevel = 0; display.brightnessLevel = 0;
display.pointFlag = false; display.pointFlag = false;
display.clear();
return display; return display;
} }
@ -304,6 +284,7 @@ namespace grove {
dataPin: DigitalPin; dataPin: DigitalPin;
brightnessLevel: number; brightnessLevel: number;
pointFlag: boolean; pointFlag: boolean;
buf: Buffer;
private writeByte(wrData: number) private writeByte(wrData: number)
{ {
@ -363,6 +344,11 @@ namespace grove {
this.bit(0x7f, 2); this.bit(0x7f, 2);
this.bit(0x7f, 1); this.bit(0x7f, 1);
this.bit(0x7f, 0); this.bit(0x7f, 0);
this.buf[3] = dispData;
this.buf[2] = 0x7f;
this.buf[1] = 0x7f;
this.buf[0] = 0x7f;
} }
else if(dispData < 100) else if(dispData < 100)
{ {
@ -370,6 +356,11 @@ namespace grove {
this.bit((dispData / 10) % 10, 2); this.bit((dispData / 10) % 10, 2);
this.bit(0x7f, 1); this.bit(0x7f, 1);
this.bit(0x7f, 0); this.bit(0x7f, 0);
this.buf[3] = dispData % 10;
this.buf[2] = (dispData / 10) % 10;
this.buf[1] = 0x7f;
this.buf[0] = 0x7f;
} }
else if(dispData < 1000) else if(dispData < 1000)
{ {
@ -377,6 +368,11 @@ namespace grove {
this.bit((dispData / 10) % 10, 2); this.bit((dispData / 10) % 10, 2);
this.bit((dispData / 100) % 10, 1); this.bit((dispData / 100) % 10, 1);
this.bit(0x7f, 0); this.bit(0x7f, 0);
this.buf[3] = dispData % 10;
this.buf[2] = (dispData / 10) % 10;
this.buf[1] = (dispData / 100) % 10;
this.buf[0] = 0x7f;
} }
else else
{ {
@ -384,6 +380,11 @@ namespace grove {
this.bit((dispData / 10) % 10, 2); this.bit((dispData / 10) % 10, 2);
this.bit((dispData / 100) % 10, 1); this.bit((dispData / 100) % 10, 1);
this.bit((dispData / 1000) % 10, 0); this.bit((dispData / 1000) % 10, 0);
this.buf[3] = dispData % 10;
this.buf[2] = (dispData / 10) % 10;
this.buf[1] = (dispData / 100) % 10;
this.buf[0] = (dispData / 1000) % 10;
} }
} }
@ -396,6 +397,11 @@ namespace grove {
set(level: number) set(level: number)
{ {
this.brightnessLevel = level; this.brightnessLevel = level;
this.bit(this.buf[0], 0x00);
this.bit(this.buf[1], 0x01);
this.bit(this.buf[2], 0x02);
this.bit(this.buf[3], 0x03);
} }
/** /**
@ -409,18 +415,24 @@ namespace grove {
//% advanced=true //% advanced=true
bit(dispData: number, bitAddr: number) bit(dispData: number, bitAddr: number)
{ {
let segData = 0; if((dispData == 0x7f) || ((dispData <= 9) && (bitAddr <= 3)))
segData = this.coding(dispData); {
this.start(); let segData = 0;
this.writeByte(0x44);
this.stop(); segData = this.coding(dispData);
this.start(); this.start();
this.writeByte(bitAddr | 0xc0); this.writeByte(0x44);
this.writeByte(segData); this.stop();
this.stop(); this.start();
this.start(); this.writeByte(bitAddr | 0xc0);
this.writeByte(0x88 + this.brightnessLevel); this.writeByte(segData);
this.stop(); this.stop();
this.start();
this.writeByte(0x88 + this.brightnessLevel);
this.stop();
this.buf[bitAddr] = dispData;
}
} }
/** /**
@ -432,6 +444,11 @@ namespace grove {
point(point: boolean) point(point: boolean)
{ {
this.pointFlag = point; this.pointFlag = point;
this.bit(this.buf[0], 0x00);
this.bit(this.buf[1], 0x01);
this.bit(this.buf[2], 0x02);
this.bit(this.buf[3], 0x03);
} }
/** /**
@ -441,10 +458,10 @@ namespace grove {
//% advanced=true //% advanced=true
clear() clear()
{ {
this.bit(0x00, 0x7f); this.bit(0x7f, 0x00);
this.bit(0x01, 0x7f); this.bit(0x7f, 0x01);
this.bit(0x02, 0x7f); this.bit(0x7f, 0x02);
this.bit(0x03, 0x7f); this.bit(0x7f, 0x03);
} }
} }
} }