Skip to content

Commit 6496246

Browse files
committed
reset_hard() function in resetbot.py
1 parent 044114a commit 6496246

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

XRPLib/resetbot.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,48 @@
11
import sys
2-
import time
32
"""
43
A simple file for shutting off all of the motors after a program gets interrupted from the REPL.
54
Run this file after interrupting a program to stop the robot by running "import XRPLib.resetbot" in the REPL.
65
"""
7-
print("Stopping all motors and shutting down the robot...")
6+
print(sys.modules)
87

9-
if "XRPLib.encoded_motor" in sys.modules:
8+
def reset_motors():
109
from XRPLib.encoded_motor import EncodedMotor
1110
# using the EncodedMotor since the default drivetrain uses the IMU and takes 3 seconds to init
1211
for i in range(4):
1312
motor = EncodedMotor.get_default_encoded_motor(i+1)
1413
motor.set_speed(0)
1514
motor.reset_encoder_position()
1615

17-
if "XRPLib.board" in sys.modules:
16+
def reset_led():
1817
from XRPLib.board import Board
1918
# Turn off the on-board LED
2019
Board.get_default_board().led_off()
2120

22-
if "XRPLib.servo" in sys.modules:
21+
def reset_servos():
2322
from XRPLib.servo import Servo
2423
# Turn off both Servos
2524
Servo.get_default_servo(1).free()
2625
Servo.get_default_servo(2).free()
2726

28-
if "XRPLib.webserver" in sys.modules:
27+
def reset_webserver():
2928
from XRPLib.webserver import Webserver
3029
# Shut off the webserver and close network connections
31-
Webserver.get_default_webserver().stop_server()
30+
Webserver.get_default_webserver().stop_server()
31+
32+
def reset_hard():
33+
reset_motors()
34+
reset_led()
35+
reset_servos()
36+
reset_webserver()
37+
38+
if "XRPLib.encoded_motor" in sys.modules:
39+
reset_motors()
40+
41+
if "XRPLib.board" in sys.modules:
42+
reset_led()
43+
44+
if "XRPLib.servo" in sys.modules:
45+
reset_servos()
46+
47+
if "XRPLib.webserver" in sys.modules:
48+
reset_webserver()

XRPLib/servo.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ def __init__(self, signal_pin:int):
3636

3737
self._servo = PWM(Pin(signal_pin, Pin.OUT))
3838
# Initialize base frequency for the PWM
39-
self._servo.freq(50)
39+
self._servo.init(freq=50)
40+
self._is_init = True
4041
self.MICROSEC_PER_DEGREE: int = 10000
4142
self.LOW_ANGLE_OFFSET: int = 500000
4243

@@ -46,10 +47,14 @@ def set_angle(self, degrees: float):
4647
:param degrees: The angle to set the servo to [0,200]
4748
:ptype degrees: float
4849
"""
50+
if not self._is_init:
51+
self._servo.init(freq=50)
52+
self._is_init = True
4953
self._servo.duty_ns(int(degrees * self.MICROSEC_PER_DEGREE + self.LOW_ANGLE_OFFSET))
5054

5155
def free(self):
5256
"""
5357
Allows the servo to spin freely without holding position
5458
"""
55-
self._servo.duty_ns(0)
59+
self._servo.deinit()
60+
self._is_init = False

0 commit comments

Comments
 (0)