Screentweak (#214)

* adding pid

* hiding functions

* precision of value
This commit is contained in:
Peli de Halleux 2018-01-08 15:00:00 -08:00 committed by GitHub
parent 456df3c442
commit b5ad898c9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 7 deletions

View File

@ -1,3 +1,4 @@
# Gradien follower PID + calibration
```blocks ```blocks
let lasterror = 0 let lasterror = 0
@ -5,12 +6,45 @@ let D = 0
let I = 0 let I = 0
let P = 0 let P = 0
let error = 0 let error = 0
let setpoint = 0
let max = 0
let min = 0
let v = 0
v = sensors.color3.light(LightIntensityMode.Reflected)
min = v
max = v
setpoint = v
while (!(brick.buttonEnter.wasPressed())) {
brick.clearScreen()
brick.showString("Move robot on terrain", 1)
brick.showString("Press ENTER when done", 2)
v = sensors.color3.light(LightIntensityMode.Reflected)
min = Math.min(min, v)
max = Math.max(max, v)
setpoint = (max + min) / 2
brick.showValue("v", v, 3)
brick.showValue("min", min, 4)
brick.showValue("max", v, 5)
brick.showValue("setpoint", setpoint, 6)
loops.pause(100)
}
loops.forever(function () { loops.forever(function () {
error = sensors.color3.light(LightIntensityMode.Reflected) - 35 brick.clearScreen()
v = sensors.color3.light(LightIntensityMode.Reflected)
brick.showValue("light", v, 1)
error = v - setpoint
brick.showValue("error", error, 2)
P = error * 5 P = error * 5
brick.showValue("P", P, 3)
I = I + error * 0.01 I = I + error * 0.01
brick.showValue("I", I, 4)
D = (error - lasterror) * 0.2 D = (error - lasterror) * 0.2
brick.showValue("D", D, 5)
motors.largeBC.steer(P + (I + D), 100) motors.largeBC.steer(P + (I + D), 100)
lasterror = error lasterror = error
if (brick.buttonEnter.wasPressed()) {
motors.largeBC.setSpeed(0)
brick.buttonDown.pauseUntil(ButtonEvent.Click)
}
}) })
``` ```

View File

@ -58,7 +58,7 @@ namespace brick {
} }
} }
export function setPixel(on: boolean, x: number, y: number) { function setPixel(on: boolean, x: number, y: number) {
x |= 0 x |= 0
y |= 0 y |= 0
if (0 <= x && x < DAL.LCD_WIDTH && 0 <= y && y < DAL.LCD_HEIGHT) if (0 <= x && x < DAL.LCD_WIDTH && 0 <= y && y < DAL.LCD_HEIGHT)
@ -101,6 +101,7 @@ namespace brick {
//% weight=96 group="Screen" inlineInputMode="inline" blockGap=8 //% weight=96 group="Screen" inlineInputMode="inline" blockGap=8
//% line.min=1 line.max=10 //% line.min=1 line.max=10
export function showValue(name: string, value: number, line: number) { export function showValue(name: string, value: number, line: number) {
value = Math.round(value * 1000) / 1000;
showString((name ? name + ": " : "") + value, line); showString((name ? name + ": " : "") + value, line);
} }
@ -140,12 +141,9 @@ namespace brick {
*/ */
//% blockId=screen_show_image block="show image %image=screen_image_picker" //% blockId=screen_show_image block="show image %image=screen_image_picker"
//% weight=100 group="Screen" blockGap=8 //% weight=100 group="Screen" blockGap=8
export function showImage(image: Image, delay: number = 400) { export function showImage(image: Image) {
if (!image) return; if (!image) return;
image.draw(0, 0, Draw.Normal); image.draw(0, 0, Draw.Normal);
delay = Math.max(0, delay);
if (delay > 0)
loops.pause(delay);
} }
/** /**
@ -170,7 +168,7 @@ namespace brick {
screen.clear(); screen.clear();
} }
export function drawRect(x: number, y: number, w: number, h: number, mode = Draw.Normal) { function drawRect(x: number, y: number, w: number, h: number, mode = Draw.Normal) {
x |= 0; x |= 0;
y |= 0; y |= 0;
w |= 0; w |= 0;