Asked

Disable While Moving Explanation

In the settings section of the Personality Generator skill in Synthiam ARC, there is a checkbox labeled "Disable While Moving" located just below the timing interval settings. Can someone explain what happens when this box is checked? Specifically, does it pause all other scripts within this skill while a current script is executing, or does it only pause scripts when a motor movement is occurring?

I am asking because I have multiple scripts within the Personality Generator skill, and each script runs different motors, servos, and other animations. My goal is to prevent the other scripts from executing while one is currently running. How does this checkbox affect that process?


Related Hardware EZ-B v4
Related Control Personality Generator

ARC Pro

Upgrade to ARC Pro

Unlock the true power of automation and robotics by becoming a proud subscriber of Synthiam ARC Pro.

Author Avatar
PRO
Canada
#1  

Short answer

  • The "Disable While Moving" checkbox prevents the Personality Generator from starting a new personality action while the robot is moving (the Movement Panel is driving).
  • It does NOT "pause" a personality script that is already running - it prevents new ones from being triggered while movement is detected.
  • It also does not automatically stop or block servo or motor commands inside a running personality script. If your personality scripts themselves move servos/motors, those commands will run unless you add a lock/check.

Explanation + recommended fixes

  • What the checkbox does: when checked the Personality Generator will skip starting a personality action if the robot’s Movement Panel indicates movement (i.e., robot wheel movement). This is a convenience safety check to avoid starting background animations while the robot is driving.
  • What it does not do:
    • It does not suspend/interrupt a personality script already executing.
    • It does not automatically serialize or mutex your custom servo/motor commands inside the Personality Generator. If a personality script issues servo or motor commands those commands still execute.
    • It does not monitor every single servo - it specifically checks the robot movement state (Movement Panel speed/direction), not arbitrary servo motion.

How to guarantee only one personality action runs at a time If you want to ensure no other personality scripts run while one is active, use a global lock (variable) in each personality script. Also check movement if you want to respect the Movement Panel. Example JavaScript you can paste into the Personality Generator commands (or call as a script):

// Personality action wrapper - JavaScript
// Skip if another personality action is running
if (getVar("$PersonalityRunning", "0") == "1") {
  print("Personality: busy - skipping");
  return;
}

// Skip if robot is moving (Movement Panel)
if (Movement.getSpeed() > 0 || Movement.getSpeedLeft() > 0 || Movement.getSpeedRight() > 0) {
  print("Personality: robot moving - skipping");
  return;
}

// mark running
setVar("$PersonalityRunning", "1");

// ---- Put your personality actions below ----
// Example: wiggle servo on d1
Servo.setPosition(d1, 60);
sleep(600);
Servo.setPosition(d1, 120);
sleep(600);

// ---- End of actions ----

// clear lock
setVar("$PersonalityRunning", "0");

Notes about the example

  • Use the servo/digital/adc constants (d0..d23, v0..v99, ADC0..ADC7) without quotes.
  • sleep() uses milliseconds in ARC.
  • Movement.getSpeed()/getSpeedLeft()/getSpeedRight() return 0-255. >0 means moving.
  • Use setVar/getVar to create simple mutual exclusion. This ensures one personality action runs at a time even if the Personality control would try to trigger another.

Alternative strategies

  • Instead of skipping when moving, you may want the personality action to wait until movement stops. Replace the movement check with a loop that waits or use Movement.waitForStop() where appropriate.
  • If you want the personality action to be cancellable by a movement start, you can periodically check Movement.getSpeed() during your action and abort/cleanup if non-zero.
  • If many skills need the same "do-not-overlap" behavior, use a shared global variable lock name that all skills check.

Where to edit this in ARC

Would you like:

  • A variant that waits for movement to stop before starting the action?
  • A sample that aborts mid-action if movement starts?
    Tell me which behavior you prefer and whether you want pure JavaScript or Python and I’ll provide the exact script to drop into your Personality Generator.

I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.