RoboCatz.com

Program 2 (Fall 2025) - If all else fails.js


The code below is a set of functions, variables, constants, and algorithms that are the work of RoboCatz for the Fall 2025 season.

// Program name: If all else fails
const pi = 3.141592653589793238462643382
wheelDiameter = 8.8
wheelCircumference = wheelDiameter * pi       
distanceBetweenWheels = 13.5  
degreesPerCentirmeter=360/wheelCircumference
swingTurnDiameter = distanceBetweenWheels * 2
pointTurnCircumference=distanceBetweenWheels*pi
gearRatio=20/28
// alert(`${pointTurnCircumference}`)

// alert("hlo wrld")
 
function moveBackward (distance) {
    acceleration =gearRatio* degreesPerCentirmeter * distance*.1
    atTopSpeed =gearRatio* degreesPerCentirmeter * distance*.8
    deceleration = gearRatio* degreesPerCentirmeter * distance*.1
   stepMotors( B , C , 80 ,acceleration, atTopSpeed, deceleration)
   waitHereWhile getMotorSpeed(B) == 0
   waitHereUntil getMotorSpeed(B) == 0
   stopAllMotors(true)
}
function pointTurnRight(degreesRobotShouldTurn = 90) {
  motorDegreesPerRobotDegree = (pointTurnCircumference / wheelCircumference )
  acceleration = 0.15 * gearRatio * degreesRobotShouldTurn * motorDegreesPerRobotDegree
  atTopSpeed   = 0.70 * gearRatio * degreesRobotShouldTurn * motorDegreesPerRobotDegree
  deceleration = 0.15 * gearRatio * degreesRobotShouldTurn * motorDegreesPerRobotDegree
  stepMotor(B, 25, acceleration, atTopSpeed, deceleration)  // Pass the parameters to the stepMotor() function.
  stepMotor(C, -25, acceleration, atTopSpeed, deceleration) // Notice that one of the motors has positive speed and the other negative speed.
  // Now check the speed of the motors to see if the robot has started or completed the maneuver.
  // Because two motors are being used to make the turn, you will need to check the speed of both motors.
  // The stepMotor() function always starts with the speed at zero.
  waitHereWhile getMotorSpeed(B)==0 || getMotorSpeed(C)==0  // Wait here while the robot has not yet started to move.
  waitHereUntil getMotorSpeed(B)==0 && getMotorSpeed(C)==0  // Wait here as the motor is turning and only exit from this line when the speed returns to back to zero.
  stopAllMotors(true) // Apply the brake to the motor(s)
}

function swingTurnLeft(degreesRobotShouldTurn = 90) {
  motorDegreesPerRobotDegree = (swingTurnDiameter*pi / wheelCircumference )
  
  acceleration = 0.25 *gearRatio* degreesRobotShouldTurn * motorDegreesPerRobotDegree
  atTopSpeed   = 0.70 *gearRatio* degreesRobotShouldTurn * motorDegreesPerRobotDegree
  deceleration = 0.15 *gearRatio* degreesRobotShouldTurn * motorDegreesPerRobotDegree
  stepMotor(C, 25, acceleration, atTopSpeed, deceleration) //reduced pwr from 50
  waitHereWhile getMotorSpeed(C)==0 
  waitHereUntil getMotorSpeed(C)==0  
  stopAllMotors(true) 
}
function swingTurnRight(degreesRobotShouldTurn = 90) {
  motorDegreesPerRobotDegree = (swingTurnDiameter*pi / wheelCircumference )
  
  acceleration = 0.25 *gearRatio* degreesRobotShouldTurn * motorDegreesPerRobotDegree
  atTopSpeed   = 0.70 *gearRatio* degreesRobotShouldTurn * motorDegreesPerRobotDegree
  deceleration = 0.15 *gearRatio* degreesRobotShouldTurn * motorDegreesPerRobotDegree
  stepMotor(C, -25, acceleration, atTopSpeed, deceleration) //reduced pwr from 50
  waitHereWhile getMotorSpeed(C)==0 
  waitHereUntil getMotorSpeed(C)==0  
  stopAllMotors(true) 
}  
 
function pointTurnLeft(degreesRobotShouldTurn = 90) {

  motorDegreesPerRobotDegree = (pointTurnCircumference / wheelCircumference )
  acceleration = 0.15 * gearRatio * degreesRobotShouldTurn * motorDegreesPerRobotDegree
  atTopSpeed   = 0.70 * gearRatio * degreesRobotShouldTurn * motorDegreesPerRobotDegree
  deceleration = 0.15 * gearRatio * degreesRobotShouldTurn * motorDegreesPerRobotDegree
  // alert(`${motorDegreesPerRobotDegree} ${acceleration} ${atTopSpeed} ${deceleration } `)

  stepMotor(C, 25, acceleration, atTopSpeed, deceleration)  // Pass the parameters to the stepMotor() function.
  stepMotor(B, -25, acceleration, atTopSpeed, deceleration) // Notice that one of the motors has positive speed and the other negative speed.
  // Now check the speed of the motors to see if the robot has started or completed the maneuver.
  // Because two motors are being used to make the turn, you will need to check the speed of both motors.
  // The stepMotor() function always starts with the speed at zero.
  waitHereWhile getMotorSpeed(B)==0 || getMotorSpeed(C)==0  // Wait here while the robot has not yet started to move.
  waitHereUntil getMotorSpeed(B)==0 && getMotorSpeed(C)==0  // Wait here as the motor is turning and only exit from this line when the speed returns to back to zero.
  stopAllMotors(true) // Apply the brake to the motor(s)
 
 
}
 
function moveForward(distance) { 
	if (distance > 0) {
		acceleration = gearRatio* degreesPerCentirmeter * distance*.1
		atTopSpeed = gearRatio* degreesPerCentirmeter * distance*.8
		deceleration = gearRatio* degreesPerCentirmeter * distance*.1
		stepMotors( B , C , -80 ,acceleration, atTopSpeed, deceleration)
		waitHereWhile getMotorSpeed(B) == 0
		waitHereUntil getMotorSpeed(B) == 0
		stopAllMotors(true)
	} else {
		syncMotors( B, C, -25)
   
	}
}

//program start

await moveForward(130)

await moveBackward(130)