java - OpMode 卡在 stop() Android 工作室
问题描述
我们正在为 FTC Skystone 制作停车代码,其中颜色传感器正在寻找色调值的变化以停止机器人。它在大多数情况下都能正常工作,但如果我们按下停止按钮,代码会继续运行,并且带有 OpMode 的错误会卡在 stop() 中。
除此之外,传感器只会读取五次中的四次,我们不知道还需要做什么才能使其正常工作。这是我们的代码:
@Override
public void runOpMode(){
// Drive train initialization
motorFrontRight = hardwareMap.dcMotor.get("FR");
motorFrontLeft = hardwareMap.dcMotor.get("FL");
motorBackLeft = hardwareMap.dcMotor.get("BL");
motorBackRight = hardwareMap.dcMotor.get("BR");
motorFrontLeft.setDirection(DcMotor.Direction.FORWARD);
motorFrontRight.setDirection(DcMotor.Direction.REVERSE);
motorBackLeft.setDirection(DcMotor.Direction.FORWARD);
motorBackRight.setDirection(DcMotor.Direction.REVERSE);
// Color sensor initialization
sensorColor = hardwareMap.get(ColorSensor.class, "color_sensor");
color2 = hardwareMap.get(ColorSensor.class, "color2");
sensorDistance = hardwareMap.get(DistanceSensor.class, "color_sensor");
// Color Sensor Values
float hsvValues[] = {0F, 0F, 0F};
final float values[] = hsvValues;.
final double SCALE_FACTOR = 255;
telemetry.addData("Status: ", "Initialized");
telemetry.addData(">", "Press Play to start op mode");
telemetry.update();
waitForStart();
while (opModeIsActive()){
// Color Sensor Code
Color.RGBToHSV((int) (color2.red() * SCALE_FACTOR),
(int) (color2.green() * SCALE_FACTOR),
(int) (color2.blue() * SCALE_FACTOR),
hsvValues);
Color.RGBToHSV((int) (sensorColor.red() * SCALE_FACTOR),
(int) (sensorColor.green() * SCALE_FACTOR),
(int) (sensorColor.blue() * SCALE_FACTOR),
hsvValues);
// Send the info back to driver station using telemetry function.
telemetry.addData("Step: ", step);
telemetry.addData("Hue", hsvValues[0]);
telemetry.update();
// Move forward
if (step == 0){
motorFrontRight.setPower(.2);
motorFrontLeft.setPower(.2);
motorBackLeft.setPower(.2);
motorBackRight.setPower(.2);
}
// Does it see the line?
while (step == 0){
if (opModeIsActive()){
Color.RGBToHSV((int) (sensorColor.red() * SCALE_FACTOR),
(int) (sensorColor.green() * SCALE_FACTOR),
(int) (sensorColor.blue() * SCALE_FACTOR),
hsvValues);
Color.RGBToHSV((int) (color2.red() * SCALE_FACTOR),
(int) (color2.green() * SCALE_FACTOR),
(int) (color2.blue() * SCALE_FACTOR),
hsvValues);
// Send the info back to driver station using telemetry function.
telemetry.addData("Step: ", step);
telemetry.addData("Hue", hsvValues[0]);
telemetry.update();
}
if (hsvValues[0] > 150 ){ // Checks if it is red or blue
step++;
}
}
if (step == 1){
motorFrontRight.setPower(0);
motorFrontLeft.setPower(0);
motorBackLeft.setPower(0);
motorBackRight.setPower(0);
step++;
}
if (step == 2){
motorFrontRight.setPower(-.5);
motorFrontLeft.setPower(-.5);
motorBackLeft.setPower(-.5);
motorBackRight.setPower(-.5);
sleep(200);
step++;
}
if (step == 3){
motorFrontRight.setPower(0);
motorFrontLeft.setPower(0);
motorBackLeft.setPower(0);
motorBackRight.setPower(0);
}
}
}
解决方案
我们通过 FTC 论坛发现
while (step == 0){
if (opModeIsActive()){
到
while (step == 0 && opModeIsActive()){
推荐阅读
- visual-studio-code - 带有自定义可执行文件的 launch.json 中的 vscode 调试设置 pipenv
- javascript - 使用 Jest 进行 AngularJS 测试
- python - 修改python脚本减去三个小时
- ansible - 在 run_once=true 的任务中委派给 localhost 时,是否可以更改显示的主机名?
- sql - 如何在标志为0时获取最后一行值并在pyspark数据帧中的标志1时将当前行值获取到新列
- sql-server - 如果用户具有“拒绝视图定义”,则 SQL Server 从链接服务器中选择会引发错误
- java - 如何根据映射替换映射中的键
- multithreading - 为什么多线程写入 Vec
> 使用原始指针段错误? - javascript - 使用 Moment js 对充满 ISO 日期的数组进行排序
- react-native - 谷歌云存储反应原生