raw_input and break
input/ldompeling at casema.nl
input/ldompeling at casema.nl
Fri Nov 6 06:50:50 EST 2015
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/ldompeling at 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/ldompeling at 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
> > wlfraed at 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
------------------- ----- ---- -- -
More information about the Python-list
mailing list