Hi, I tried to define SEQUENCE with: The script is working now, exept that I do'nt get a menu in terminal for "s" to stop. ---------------------------------------------------------------------------------
def SEQUENCE(): while notDone: if mindist > us_dist(15): for (dir, tm) in SEQUENCE: move(dir, tm) --------------------------------------------------------------------------------- In reply to "input/ldompel...@casema.nl" who wrote the following: > He, > Thank you for making some time for it. > Is this your code ? > I am also using python 3 > > I got an error with execute the scipt: > ----------------------------------------------------------------------- > > Enter command> Traceback (most recent call last): > File "test06.py", line 44, in <module> > for (dir, tm) in SEQUENCE: > NameError: name 'SEQUENCE' is not defined > ----------------------------------------------------------------------- > > import time > import threading > > set_right_speed(150) > set_left_speed(105) > > def cmdHandler(): > global notDone > while True: > cmd = raw_input("Enter command> ").lower() > if cmd.startswith("s"): > notDone = False > break > else: > print ("Unimplemented command: %s") % cmd > > cmdThread = threading.Thread(target=cmdHandler) > cmdThread.start() > def move(drct, dly): > if drct == FORWARD: > fwd() > print ("Forward") > elif drct == BACKWARD: > bwd() > print ("Backward") > elif drct == LEFT: > left() > print ("Left") > elif drct == RIGHT: > right() > print ("Right") > else: > print ("Invalid command: %s") % drct > time.sleep(dly) > stop() > > notDone = True > > servo(90) > mindist = 80 > > while notDone: > if mindist > us_dist(15): > for (dir, tm) in SEQUENCE: > move(dir, tm) > > ------------------------------------------------------------------------------ > --------------- > In reply to "Dennis Lee Bieber" who wrote the following: > > > On Thu, 05 Nov 2015 17:28:36 GMT, input/ldompel...@casema.nl declaimed the > > following: > > > > > Oke, lets try your code.Can you help me with that. > > > This is my code: > > > ------------------------------------------------- > > > from gopigo import * > > > import time > > > > > > set_right_speed(150) > > > set_left_speed(105) > > > > Is there a typo there? If those are setting rotation speeds for > > independent drive wheels, you will have a slow left turn enabled. > > > > > enable_servo() > > > fwd() > > > print("forward 1x") > > > time.sleep(4) > > > stop() > > > > > > while True: > > > servo(90) > > > mindist = 80 > > > > > > if mindist > us_dist(15): > > > > "mindist" will always be 80 -- there is no code shown below that ever > > changes it (so the above assignment can be put before the "while" > > statement). That means your us_dist() function must somewhere return a > > value greater than 80. > > > > > bwd() > > > print ("backward 1x") > > > time.sleep(2) > > > stop() > > > right() > > > time.sleep(1) > > > stop() > > > print("right 1x") > > > time.sleep(2) > > > > You stopped the right() call before ever doing any output > > > > > stop() > > > fwd() > > > print("forward 2x") > > > time.sleep(3) > > > stop() > > > left() > > > time.sleep(1) > > > print("left 1x") > > > stop() > > > fwd() > > > print("forward 3x") > > > time.sleep(2) > > > stop() > > > ------------------------------------------------------ > > > > Off-hand, I'd try to get rid of a lot of that redundancy by defining > > functions to encapsulate your sequence... (Python 2.x syntax -- not tested) > > > > > > (FORWARD, BACKWARD, LEFT, RIGHT) = (1, 2, 3, 4) > > SEQUENCE = [ (BACKWARD, 2), > > (RIGHT, 1), > > (FORWARD, 3), > > (LEFT, 1), > > (FORWARD, 2) ] > > > > def move(drct, dly): > > if drct == FORWARD: > > fwd() > > print "Forward" > > elif drct == BACKWARD: > > bwd() > > print "Backward" > > elif drct == LEFT: > > left() > > print "Left" > > elif drct == RIGHT: > > right() > > print "Right" > > else: > > print "Invalid command: %s" % drct > > time.sleep(dly) > > stop() > > > > notDone = True > > servo(90) > > mindist = 80 > > > > while notDone: > > if mindist > us_dist(15): > > for (dir, tm) in SEQUENCE: > > move(dir, tm) > > > > -=-=-=-=- > > > > Now, if you don't mind having to also press the <enter> key, you could > > use the threading module to handle the keyboard shutdown command instead of > > using system specific modules to do raw keystroke input. You'd add > > something before the while loop (and this is really pseudo-code, barely any > > attempt at Python): > > > > import threading > > > > def cmdHandler(): > > global notDone > > while True: > > cmd = raw_input("Enter command> ").lower() > > if cmd.startswith("s"): > > notDone = False > > break > > else: > > print "Unimplemented command: %s" % cmd > > > > cmdThread = threading.Thread(target=cmdHandler) > > cmdThread.start() > > > > This concept doesn't require changes if the underlying OS changes, and > > does open things up to having more complex commands (one could have > > commands with arguments since the input is line oriented). > > > > -- > > Wulfraed Dennis Lee Bieber AF6VN > > wlfr...@ix.netcom.com HTTP://wlfraed.home.netcom.com/ > > > > > -- > --------------------------------- --- -- - > Posted with NewsLeecher v7.0 Beta 2 > Web @ http://www.newsleecher.com/?usenet > ------------------- ----- ---- -- - -- --------------------------------- --- -- - Posted with NewsLeecher v7.0 Beta 2 Web @ http://www.newsleecher.com/?usenet ------------------- ----- ---- -- - -- https://mail.python.org/mailman/listinfo/python-list