private void CheckMovementRequestedAndAllowed() { if (doorState == DoorStateType.Closed && IsToggleRequest) { doorState = DoorStateType.Opening; displacedPosition = transform.position; } else if (doorState == DoorStateType.Open && IsToggleRequest) { doorState = DoorStateType.Closing; displacedPosition = transform.position; } }
private void CheckMovementCompleted() { if (doorState == DoorStateType.Opening && currentDisplacement >= maxDisplacement) { IsToggleRequest = false; doorState = DoorStateType.Open; currentDisplacement = 0; } else if (doorState == DoorStateType.Closing && currentDisplacement >= maxDisplacement) { IsToggleRequest = false; doorState = DoorStateType.Closed; currentDisplacement = 0; } }
public void ToggleDoor() { // if we're already in process if (_operatingDoor) { return; } // update from physical so we don't break things _doorState = PhysicalState; Debug.Print("DoorController.ToggleDoor, current state: " + _doorState.ToString()); if (_doorState == DoorStateType.Closed || _doorState == DoorStateType.Unknown) { OperateDoor(true); } else { OperateDoor(false); } }
public DoorController(IContinuousRotationServo doorServo, PushButton openEndStopSwitch, PushButton closeEndStopSwitch) { // instantiate all of our peripherals _doorServo = doorServo; _openEndStopSwitch = openEndStopSwitch; _closeEndStopSwitch = closeEndStopSwitch; // set our end stop trigger events _openEndStopSwitch.PressStarted += (s, e) => { _openEndStopTriggered = true; _doorState = DoorStateType.Open; Debug.Print("open end stop triggered"); }; _openEndStopSwitch.PressEnded += (s, e) => { _openEndStopTriggered = false; }; _closeEndStopSwitch.PressStarted += (s, e) => { _closeEndStopTriggered = true; _doorState = DoorStateType.Closed; Debug.Print("close end stop triggered"); }; _closeEndStopSwitch.PressEnded += (s, e) => { _closeEndStopTriggered = false; }; // load our initial state from the physical state this._doorState = PhysicalState; }
internal void CopyFrom(AtsSimulationStates source) { _vehicleState = source._vehicleState; _doorState = source._doorState; }
internal void SetDoorState(DoorStateType doorState) { _doorState = doorState; }
public void OperateDoor(bool open) { // if we're already in process // TODO: maybe we make this cancellable if (_operatingDoor) { return; } _operatingDoor = true; // spin up a new thread so we don't block anything. // this is especially important with the end stops. // without a new thread, we don't get those events. :D Thread th = new Thread(() => { Debug.Print("OperateDoor: " + (open ? "open" : "close")); // open the door if (open) { // rotate the winch servo until the end stop is triggered while (!_openEndStopTriggered) { // rotate the winch servo in the open direction _doorServo.Rotate(_openDirection, 0.9f); } // stop the winch _doorServo.Stop(); Debug.Print("Open end stop hit."); // update our door state _doorState = DoorStateType.Open; // raise our event this.DoorOpened(this, new EventArgs()); } else { // close the door // rotate the winch servo until the end stop is triggered while (!_closeEndStopTriggered) { // close _doorServo.Rotate(_closeDirection, 0.75f); } // stop the winch _doorServo.Stop(); Debug.Print("Open end stop hit."); // update our door state _doorState = DoorStateType.Closed; // raise our event this.DoorClosed(this, new EventArgs()); } // _operatingDoor = false; }); th.Start(); }