Program 2 (Fall 2021)
The code below is a set of functions, variables, constants, and algorithms that are the work of RoboCatz for the Fall 2021 season.
/**
* @param {number} inches
* @param {number} pwr
* @param {number} extraSleep
* @returns {void}
*/
function driveForward(inches, pwr, extraSleep) {
var myPower = 100
if (pwr * 1 > 0) myPower = pwr // Same as: if(typeof pwr == 'number') myPower=pwr*1
resetEncoder(B) // Reset the encoder
var totalDistance = inches * 53
syncMotors(B, C, -1 * myPower)
sleep(extraSleep)
// Start driving forward
//stepMotors(B, C, pwr, totalDistance * .2,totalDistance * .6, totalDistance * .2)
while (abs(encoderValue(B)) < totalDistance - 10) { // Convert inches to degrees by multiplying by 58
clearScreen() // Clear the screen
drawText(10, 10, encoderValue(B)) // Show the encoder value
sleep(100) // Move for a period of time
} // Repeat the loop
beep(100, 1600, 1000)
}
var up = true
var down = false
/**@param {boolean} direction */
function rotateArm(direction) {
if (direction == up) {
setMotor(D, -40)
}
if (direction == down) {
setMotor(D, 40)
}
sleep(500)
stopAllMotors()
}
/**
* @param {number} inches
* @param {number} pwr
* @returns {void}
*/
function driveBackward(inches, pwr) {
beep()
//sleep(5000)
beep()
var myPower = 100
if (pwr * 1 > 0) myPower = pwr // Same as: if(typeof pwr == 'number') myPower=pwr*1
syncMotors(B, C, myPower) // Start driving backward
resetEncoder(B) // Reset the encoder
while (abs(encoderValue(B)) < inches * 53) { // Convert inches to degrees by multiplying by 58
clearScreen() // Clear the screen
drawText(10, 10, encoderValue(B), 2) // Show the encoder value
sleep(100) // Move for a period of time
} // Repeat the loop
// setLED(6)
//sleep(5000)
}
/**
* @param {unknown} degrees
* @returns {void}
*/
function attachRight(degrees) {
setMotor(D, 40)
resetEncoder(D)
waitHereUntil(abs(encoderValue(D)) < 165)
stopAllMotors()
}
/**
* @param {number} forewardTime
* @param {number} backwardeTime
* @returns {void}
*/
function PUSHDATRUCK(forewardTime, backwardeTime) {
setLED(6)
alert(forewardTime)
driveForward(16, 60, 2000)
sleep(forewardTime)
driveBackward(30, 60)
sleep(backwardeTime)
stopAllMotors()
}
function followTheLine() {
var whiteColor = 80
var blackColor = 20
var POWER = -60
var turningAngle = 5
var lightSensorOutput
lightSensorOutput = lightSensorPct()
if (lightSensorOutput > whiteColor) {
syncMotors(B, C, POWER, -1 * turningAngle) //change -5 to a number that makes it turn left the right amount
}
if (lightSensorOutput < blackColor) {
syncMotors(B, C, POWER, turningAngle) //change 5 to a number that makes it turn right the right amount
}
if (lightSensorOutput < whiteColor && lightSensorOutput > blackColor) {
syncMotors(B, C, POWER, 0) //go foreward
}
}
function whatTheBridgeDoin() {
var POWER = -60
var cmAway = 5
drawText(10, 10, ultrasonicSensorValue(), 2)
while (ultrasonicSensorValue() > cmAway) {//it doesnt have to be 5(cm), it prob wont, its just a number 4 now.
followTheLine()
drawText(10, 10, ultrasonicSensorValue(), 2)
}
//push down the bridge w/ the arm
while (ultrasonicSensorValue() < cmAway) {
drawText(10, 10, ultrasonicSensorValue(), 2)
driveForward(5, POWER, 0) // the 5 (inches) is temporary, and prob not the right numbers.
// *looking at my label for inches* "I like it!" - Matt McHenry, 2:06PM, november 14. 2021
}
//drive AWAYYYYYYYYYYYYY bye bye :)
driveBackward(41, POWER) //numbers are temporary! the 60(power) is prob right tho
//*nods* - Matt McHenry, 2:10PM, november 14. 2021
}
while (true) {
setLED(0)
clearScreen()
drawText(5, 15, 'Press a key to')
drawText(5, 30, 'select a program')
drawText(5, 45, 'UPPP=get the blue box')
drawText(5, 60, 'CENTER=deliver the blue box')
drawText(5, 75, 'DOWN=Truck to Circle')
drawText(5, 90, 'LEFT=Plane')
drawText(5, 105, 'RIGHT=Bridge')
var keyPressed = waitForPress()
switch (keyPressed) {
case 1:
alert('You selected UP')
alert('getting the blue box...')
driveForward(8, 60, 2000)
sleep(500)
syncMotors(B, C, -50, -75)
sleep(2000)
driveForward(13, 60, 2000)
sleep(500)
stopAllMotors()
break
case 2:
alert('You selected ENTER')
alert('delivering the blue box...')
driveForward(16, 60, 2000)
sleep(1000)
driveBackward(30, 60)
sleep(1300)
stopAllMotors()
break
case 3:
drawText('You selected DOWN') //do we have to put coords in here???????
alert('truck in circle')
PUSHDATRUCK(1500, 1800)
break
case 4:
alert('YOU SELECTED Right')
alert('Bridge Mission')
driveForward(15, 60, 0) //go to line up with the bridge
syncMotors(B, C, -50, 75) //turn to line up
sleep(1000)
driveForward(15, 60, 0) //go to line up more
syncMotors(B, C, -50, 75) // turn to line up more
sleep(900)
//IMPORTANT NOTE!!! MUST READ!!!
//we need to change the timing of teh arm because it WAS NOT WORKING.
driveForward(13, 60, 0) //gor twards the bridge
stopAllMotors()
rotateArm(down)
driveForward(3, 60, 0) //push down bridge part one
rotateArm(up)
driveForward(7, 60, 0) //go forewarde more
stopAllMotors()
rotateArm(down)
driveBackward(3, 60) //push down bridge part two
stopAllMotors()
rotateArm(up)
driveBackward(40, 60) //return to base (PLEASE NOTE: THIS WILL NOT STOP FOR A VERY LONG TIME. JUST KILL THE PROGRAM.
//we may or may not want to reverse the turning manuvers at the begining so that we dont run into the orange plane?
stopAllMotors()
//driveForward(20,60,0)
//sleep(1500)
//driveBackward(25 ,60)
//sleep(1500)
//stopAllMotors()
//whatTheBridgeDoin() //this dowsnt look like much, but it calls a really big function up there^^^
break
//old bridge mission stuff that i dont want to look at
/* driveForward(12, 60, 0)
sleep(1000)
syncMotors(B, C, -50, 75)
sleep(2000)
driveForward(13, 60)
sleep(500)
stopAllMotors()*/
case 5:
alert('You Selected orange plane')
alert('second bold line + one square')
driveForward(4.5, 60, 0) //we had to change this from 5 to 4.5 because of the bumper but it NOT WORRRRRRRRRKKKKKKKKKKKKKKKKKKKKKKKK
beep(50, 800, 1000)
sleep(1800)
syncMotors(B, C, -50, -65)
sleep(1000)
stopAllMotors()
rotateArm(down)
syncMotors(B, C, -50, -75)
sleep(1000)
driveForward(15, 60, 0)
stopAllMotors() // this here marks the end of the orange plane mision
// right here is the start of the green helicopter mission (but it runs continuesly from teh first program, so you dont havr to press any toher buttons.)
setMotor(D, -40) //raise arm (i didnt change this to a function because we call a sleep int eh function, and the sleep for this one was added in addition to the sleep for the drive forward, so im just being safe)
setLED(1)
driveBackward(7, 60) //drive twards the helicopter
syncMotors(B, C, 50, 75) //turn to line up with the helicopter
sleep(1000)
stopAllMotors()
driveBackward(0.5, 60) //line up with the helico0pter more
stopAllMotors()
setLED(7) // this is just for debugging
rotateArm(down)//lower arm to knock down teh helicoptyer lever
driveForward(0.1, 0.1, 0) //this was put here for debugging purposes, it is usless
rotateArm(up) //raise arm to get it out of the way
//might need to turn backwardes here
driveBackward(3, 40)
rotateArm(down) //lower arm to grab box
// maybe add something here to pick up the helicopter package and bring it back to base???
//idk if we should do this with an attachment or a motor.
//i personally would want to do it with a motor, but we might not have time (OR ROOM!?!?!?!) for that
driveForward(20, 60, 0) //return to base (maybe make this more??)
stopAllMotors()
break
//driveForward(34, 60, 0)
//stopAllMotors()
//setMotor(D, 50)
//sleep(300)
//stopAllMotors()
}
}