From 3c2be253847e1665424c6664347edb1604f70ea7 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 15 Jan 2018 21:27:19 -0800 Subject: [PATCH] some core set adapted codes --- docs/examples/core-set/gyroboy-labview.md | 215 +++++++++++++ docs/examples/core-set/puppy-labview.md | 349 +++++++++++++++++++++ docs/examples/core-set/robotarm-labview.md | 51 +++ 3 files changed, 615 insertions(+) create mode 100644 docs/examples/core-set/gyroboy-labview.md create mode 100644 docs/examples/core-set/puppy-labview.md create mode 100644 docs/examples/core-set/robotarm-labview.md diff --git a/docs/examples/core-set/gyroboy-labview.md b/docs/examples/core-set/gyroboy-labview.md new file mode 100644 index 00000000..8cef3309 --- /dev/null +++ b/docs/examples/core-set/gyroboy-labview.md @@ -0,0 +1,215 @@ +# Gyroboy LabView + +```typescript +let mSum = 0; +let mPos = 0; +let mSpd = 0; +let mD = 0; +let mDP1 = 0; +let mDP2 = 0; +let mDP3 = 0; +let Crdv = 0; +let cLo = 0; +let gAng = 0; +let ok = false; +let pwr = 0; +let Cstr = 0; +let Cdrv = 0; +let gMn = 0; +let gMx = 0; +let gSum = 0; +let gyro = 0; +let gOS = 0; +let gSpd = 0; +let tInt = 0.014; +let lpwr = 0 +let rpwr = 0 +let tStart = 0 +let st = 0 +let oldDr = 0 + +function RST() { + motors.largeA.reset() + motors.largeD.reset() + motors.largeA.setRegulated(false) + motors.largeD.setRegulated(false) + sensors.gyro2.reset() + sensors.gyro2.rate() + control.timer2.reset() + loops.pause(5000) + mSum = 0; + mPos = 0; + mD = 0; + mDP1 = 0; + mDP2 = 0; + mDP3 = 0; + Crdv = 0; + cLo = 0; + gAng = 0; + ok = false; + pwr = 0; + st = 0; + Cstr = 0; + Cdrv = 0; +} + +function OS() { + // OSL + do { + gMn = 1000; + gMx = -100; + gSum = 0; + // gChk + for (let i = 0; i < 200; i++) { + gyro = sensors.gyro2.rate() + gSum = gyro; + gMx = Math.max(gMx, gyro) + gMn = Math.min(gMn, gyro) + loops.pause(4); + } + } while (gMx - gMn > 2); + gOS = gSum / 200; +} + +function GT() { + if (cLo == 0) { + tInt = 0.014; + control.timer1.reset(); + } else { + tInt = control.timer1.seconds() / cLo; + } + cLo++; +} + +function GG() { + gyro = sensors.gyro2.rate(); + gOS = 0.0005 * gyro + (1 - 0.0005) * gOS + gSpd = gyro - gOS; + gAng = gAng + tInt * gSpd; +} + +function GM() { + let temp = mSum + mSum = motors.largeD.angle() + motors.largeA.angle(); + mD = mSum - temp; + mPos = mPos + mD; + mSpd = ((mDP1 + mDP2 + mDP3 + mD) / 4) / tInt; + mDP3 = mDP2; + mDP2 = mDP1; + mDP1 = mD; +} + +function EQ() { + mPos = mPos - Cdrv * tInt; + pwr = (0.8 * gSpd + 15 * gAng) + (0.08 * mSpd + 0.12 * mPos) - 0.01 * Cdrv + if (pwr > 100) pwr = 100 + else if (pwr < -100) pwr = -100 +} + +function cntrl() { + mPos = mPos - tInt * Cdrv + lpwr = (pwr + Cstr * 0.1) + rpwr = (pwr - Cstr * 0.1) +} + +function CHK() { + if (Math.abs(pwr) < 100) + control.timer2.reset(); + if (control.timer2.seconds() > 2) { + ok = true; + } +} + +// M +loops.forever(function () { + RST(); + brick.showImage(images.eyesSleeping) + OS() + gAng = -0.25; + music.playSoundEffect(sounds.movementsSpeedUp) + brick.showImage(images.eyesAwake) + st = 1; + // BALANCE + while (!ok) { + GT(); + let t1 = control.timer1.millis() + GG(); + GM(); + EQ(); + cntrl(); + motors.largeA.setSpeed(lpwr) + motors.largeD.setSpeed(rpwr) + CHK() + let t2 = control.timer1.millis(); + let p = 5 - (t2 - t1); + loops.pause(Math.max(1, p)) + } + motors.stopAllMotors() + st = 0; + brick.setLight(BrickLight.RedPulse); + brick.showImage(images.eyesKnockedOut) + music.playSoundEffect(sounds.movementsSpeedDown) + sensors.touch3.pauseUntil(TouchSensorEvent.Pressed) + brick.setLight(BrickLight.Off); +}) + +// BHV +loops.forever(function () { + switch (st) { + case 0: + Cdrv = 0; + Cstr = 0; + break; + case 1: + Cdrv = 40; + loops.pause(4000); + Cdrv = 0; + music.playTone(1000, 100); + st = 2; + break; + case 2: + switch (sensors.color1.color()) { + case ColorSensorColor.Red: + music.playTone(2000, 100); + Cdrv = 0; + Cstr = 0; + break; + case ColorSensorColor.Green: + music.playTone(2000, 100); + Cdrv = 150; + Cstr = 0; + break; + case ColorSensorColor.Blue: + music.playTone(2000, 100); + Cstr = 70; + break; + case ColorSensorColor.Yellow: + music.playTone(2000, 100); + Cstr = -70; + break; + case ColorSensorColor.White: + music.playTone(2000, 100); + Cdrv = -75; + break; + } + if (sensors.ultrasonic4.distance() < 25) { + Cstr = 0; + oldDr = Cdrv; + Cdrv = -10; + motors.mediumC.setSpeed(30, 30, MoveUnit.Degrees); + motors.mediumC.setSpeed(-30, 60, MoveUnit.Degrees); + motors.mediumC.setSpeed(30, 30, MoveUnit.Degrees); + if (Math.randomRange(-1, 1) >= 1) + Cstr = 70; + else + Cstr = -70; + loops.pause(4000); + music.playTone(2000, 100) + Cstr = 0; + Cdrv = oldDr; + } + break; + } + loops.pause(80); +}) +``` \ No newline at end of file diff --git a/docs/examples/core-set/puppy-labview.md b/docs/examples/core-set/puppy-labview.md new file mode 100644 index 00000000..27951f6a --- /dev/null +++ b/docs/examples/core-set/puppy-labview.md @@ -0,0 +1,349 @@ +# Puppy + +```typescript +let P_T = 0; +let ISS = 0; +let F_T = 0; +let P_C = 0; +let F_C = 0; +let DB_S = 0; +let NS = false; +let IBP = 0; +let IAP = 0; +let C = false; +let TC = false; +let OTC = false; +let COL = 0; +let OCOL = 0; +let _C = false; +let GTO = 0; + +function DN() { + motors.largeAD.setBrake(true); + motors.largeAD.tank(50, 50, 1, MoveUnit.Seconds); + loops.pause(100); + motors.largeA.clearCounts() + motors.largeD.clearCounts() +} + +function MNRH() { + motors.mediumC.setBrake(true) + brick.showImage(images.legoEv3icon) + brick.setLight(BrickLight.OrangePulse) + while (!brick.buttonEnter.wasPressed()) { + if (brick.buttonUp.wasPressed()) { + motors.mediumC.setSpeed(-100); + } else if (brick.buttonDown.wasPressed()) { + motors.mediumC.setSpeed(100); + } else { + motors.mediumC.stop(); + } + } + motors.mediumC.stop(); + motors.mediumC.clearCounts(); + brick.setLight(BrickLight.Green); +} + +function IS(t: number) { + ISS = t; + switch (t) { + case 0: + brick.showImage(images.eyesNeutral); + break; + case 1: + brick.showImage(images.eyesSleeping); + break; + case 2: + brick.showImage(images.eyesTear); + // draw rect... + break; + case 3: + brick.showImage(images.eyesHurt); + break; + case 4: + brick.showImage(images.eyesAngry); + break; + case 5: + brick.showImage(images.eyesTiredMiddle); + break; + case 6: + brick.showImage(images.eyesTiredRight); + break; + case 7: + brick.showImage(images.eyesTiredLeft); + break; + case 8: + brick.showImage(images.eyesLove); + break; + } + +} + +function UP() { + if (motors.largeA.angle() > -50) { + control.runInBackground(function () { + motors.largeD.clearCounts() + motors.largeD.setSpeed(-35); + pauseUntil(() => motors.largeD.angle() < -25); + motors.largeD.stop(); + motors.largeD.setRegulated(false) + motors.largeD.setSpeed(-15) + pauseUntil(() => motors.largeD.angle() < -65); + motors.largeD.stop(); + }) + motors.largeA.clearCounts() + motors.largeA.setSpeed(-35); + pauseUntil(() => motors.largeA.angle() < -25); + motors.largeA.stop(); + motors.largeA.setRegulated(false) + motors.largeA.setSpeed(-15) + pauseUntil(() => motors.largeA.angle() < -65); + motors.largeA.stop(); + + loops.pause(500); + } +} + +function RST() { + P_T = Math.randomRange(3, 6); + F_T = Math.randomRange(2, 4); + P_C = 1; + F_C = 1; + control.timer1.reset(); + control.timer2.reset(); + control.timer3.reset(); + CS(0); +} + +function CS(db: number) { + if (DB_S != db) { + DB_S = db; + NS = true; + } +} + +function MON() { + if (control.timer2.seconds() > 10) { + control.timer2.reset(); + P_C--; + if (P_C < 0) { + P_C = 0; + } + } + if (control.timer1.seconds() > 20) { + control.timer1.reset() + F_C--; + if (F_C < 0) { + F_C = 0; + } + } + if (control.timer3.seconds() > 30) { + control.timer3.reset(); + CS(1); + } +} + +function UIS() { + if (control.timer5.seconds() > IBP) { + control.timer5.reset(); + if (ISS == 1) { + ISS = 6; + IBP = Math.randomRange(1, 5); + } else { + ISS = 1; + IBP = 0.25; + } + IS(ISS); + } + if (control.timer6.seconds() > IAP) { + if (ISS != 1) { + control.timer6.reset(); + IAP = Math.randomRange(1, 10) + if (ISS != 7) { + ISS = 7 + } else { + ISS = 6; + } + IS(ISS); + } + } +} + +function UPDB() { + if ((P_T == P_C) && (F_T == F_C)) { + CS(6); + } + if ((P_T > P_C) && (F_T < F_C)) { + CS(3); + } + if ((P_T < P_C) && (F_T > F_C)) { + CS(5); + } + if ((P_C == 0) && (F_C > 0)) { + CS(2) + } + if (F_C == 0) { + CS(4) + } +} + +function PTC() { + C = false; + OTC = TC; + TC = sensors.touch1.isPressed() + if (TC != OTC && TC) { + P_C++; + control.timer3.reset(); + if (DB_S != 4) { + IS(2); + music.playSoundEffect(sounds.animalsDogSniff); + C = true; + } + } + return C; +} + +function FDC() { + OCOL = COL; + COL = sensors.color4.color(); + _C = false; + if ((COL != 0) && (OCOL != COL)) { + F_C++; + _C = true; + control.timer3.reset(); + IS(2); + music.playSoundEffect(sounds.expressionsCrunching) + } + return _C; +} + +function IDL() { + if (NS) { + NS = false; + UP(); + } + UIS(); + UPDB(); + PTC(); + FDC(); +} + +function MHT(Pos: number) { + let _R = Pos - motors.mediumC.angle(); + if (_R >= 0) { + motors.mediumC.setSpeed(100, _R, MoveUnit.Degrees); + } else { + motors.mediumC.setSpeed(-100, Math.abs(_R), MoveUnit.Degrees); + } +} + +function SLP() { + if (NS) { + NS = false; + IS(5) + DN() + MHT(3000) + IS(1) + music.playSoundEffect(sounds.expressionsSnoring) + } + if (sensors.touch1.isPressed() || brick.buttonEnter.isPressed()) { + music.stopAllSounds(); + control.timer3.reset(); + CS(7); + } +} + +function PLF() { + if (NS) { + NS = false + IS(0) + UP() + music.playSoundEffect(sounds.animalsDogBark2) + control.timer4.reset() + GTO = Math.randomRange(4, 8); + } + if(PTC()) { + CS(0); + } + if (control.timer4.seconds() > GTO) { + music.playSoundEffect(sounds.animalsDogBark2) + control.timer4.reset(); + GTO = Math.randomRange(4, 8); + } +} + +function NGR() { + NS = false + IS(4) + music.playSoundEffect(sounds.animalsDogGrowl); + UP(); + loops.pause(1500); + music.stopAllSounds() + music.playSoundEffect(sounds.animalsDogBark1) + P_C--; + CS(0); +} + +function HNG() { + if (NS) { + NS = false; + IS(3) + DN(); + music.playSoundEffect(sounds.animalsDogWhine); + } + if(FDC()) { + CS(0) + } + if (PTC()) { + CS(3); + } +} + +function PPP() { + // TODO +} + +function HPY() { + // TODO +} + +function WKU() { + +} + +DN(); +MNRH(); +// compare button state??? +IS(1); +UP(); +RST(); +loops.forever(function () { + MON(); + switch (DB_S) { + case 0: + IDL(); + break; + case 1: + SLP(); + break; + case 2: + PLF(); + break; + case 3: + NGR(); + break; + case 4: + HNG(); + break; + case 5: + PPP(); + break; + case 6: + HPY(); + break; + case 7: + WKU(); + break; + } +}) +``` diff --git a/docs/examples/core-set/robotarm-labview.md b/docs/examples/core-set/robotarm-labview.md new file mode 100644 index 00000000..d94df8ad --- /dev/null +++ b/docs/examples/core-set/robotarm-labview.md @@ -0,0 +1,51 @@ +# Robot Arm + +```typescript +function INI() { + motors.largeB.setBrake(true) + motors.largeC.setBrake(true) + motors.mediumA.setBrake(true) + motors.largeB.setSpeed(-50) + pauseUntil(() => sensors.color3.light(LightIntensityMode.Reflected) > 25); + motors.largeB.stop(); + motors.mediumA.setSpeed(30, 1, MoveUnit.Seconds); + motors.mediumA.setSpeed(-50, 90, MoveUnit.Degrees); + motors.largeC.setSpeed(50) + sensors.touch1.pauseUntil(TouchSensorEvent.Pressed); + motors.largeC.setSpeed(-50, 0.86, MoveUnit.Rotations); +} + +INI() + +let down = false; +loops.forever(function () { + brick.showImage(images.informationQuestionMark) + brick.setLight(BrickLight.OrangePulse); + pauseUntil(() => (down = brick.buttonDown.wasPressed()) || brick.buttonUp.wasPressed()) + brick.setLight(BrickLight.Off) + music.playSoundEffect(sounds.mechanicalAirRelease) + brick.showImage(images.informationAccept) + if (down) { + brick.showImage(images.informationForward) + motors.largeC.setSpeed(65, 0.85, MoveUnit.Rotations); + } else { + brick.showImage(images.informationBackward) + motors.largeC.setSpeed(-65, 0.85, MoveUnit.Rotations); + } + motors.largeB.setSpeed(20, 275, MoveUnit.Degrees) + motors.mediumA.setSpeed(30, 1, MoveUnit.Seconds) + motors.largeB.setSpeed(-55) + pauseUntil(() => sensors.color3.light(LightIntensityMode.Reflected) > 25); + motors.largeB.stop(); + if (down) { + motors.largeC.setSpeed(-65, 0.86, MoveUnit.Rotations); + } else { + motors.largeC.setSpeed(65, 0.85, MoveUnit.Rotations); + } + motors.largeB.setSpeed(20, 275, MoveUnit.Degrees); + motors.mediumA.setSpeed(-30, 90, MoveUnit.Degrees); + motors.largeB.setSpeed(-55) + pauseUntil(() => sensors.color3.light(LightIntensityMode.Reflected) > 25); + motors.largeB.stop() +}) +``` \ No newline at end of file