element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum GPIO output from keyboard
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 5 replies
  • Subscribers 674 subscribers
  • Views 858 views
  • Users 0 members are here
  • gpio;
  • help
  • robot;
  • raspberry_pi;
  • rpi;
  • raspberry_pi
Related

GPIO output from keyboard

wallarug
wallarug over 13 years ago

Does anyone know how to code a python script that will be able to achieve this WITHOUT pressing enter each time?

 

I am building a car powered by the RPi and I was wondering if this was achieveable.  Here is what I have so far:

 

print "The controls are as follows: "

print "w = forward; a = left; s = backwards; d = right "

a = raw_input("Press a key to move the Robot: ")
while a:
    a = raw_input("Press a key to move the Robot: ")
    if a.lower() == 'w':
        print "working forward"
    if a.lower() == 'a':
        print "working left"
    if a.lower() == 's':
        print "working backwards"
    if a.lower() == 'd':
        print "working right"

 

Any Idea how I would Modify this to do what I want?

 

BTW: I know how to get the GPIOs working but I can't test then in a shell, so I just used print functions/output.

  • Sign in to reply
  • Cancel
  • Former Member
    Former Member over 13 years ago

    Console I/O in Python is OS dependent.

    On Posix compliant systems, such as Linux and Unix,

    you would put the terminal in "cbreak" mode,

    http://en.wikipedia.org/wiki/Cbreak_mode

    which doesn't wait for a whole line to be entered.

     

    Python docs are here:

    http://docs.python.org/library/tty.html

     

    For fancy uses, see the "curses" library, in cbreak mode.

    http://docs.python.org/howto/curses.html

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • wallarug
    wallarug over 13 years ago in reply to Former Member

    Can I just clarify,

     

    I am going to be using the Raspberry Pi (Linux).

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • wallarug
    wallarug over 13 years ago in reply to Former Member

    Should I use getch()?  I have done some research and this seems to be the way to go.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Former Member
    Former Member over 13 years ago in reply to wallarug

    Is getch() available on linux?  I think it's only available

    in the Windows msvcrt library, or in the curses library.

     

    On linux you will want to set the terminal in "cbreak" mode,

    and then read the character using

       ch = sys.stdin.read(1)

     

    when you are done, you will probably want to restore the

    terminal to normal mode.

     

    You can set "cbreak" mode on linux using

       tty.setcbreak(fd[, when])

    as shown here:

       http://docs.python.org/library/tty.html

     

    There is an example here:

       http://www.dzone.com/snippets/cross-platform-getch-python

    although it uses "raw" mode instead of "cbreak" mode,

    and doesn't restore the old settings.

     

    The difference between "raw" mode and "cbreak" mode is that

    control-C works normally in "cbreak" mode, but not in "raw" mode.

     

    There is an example of restoring the normal tty mode here:

       http://docs.python.org/library/termios.html#module-termios

     

    Alternately, you can use the curses library:

     

    import curses

    stdscr = curses.initscr()

    curses.cbreak()

    c = stdscr.getch()

    curses.nocbreak()

    curses.endwin()

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • wallarug
    wallarug over 13 years ago in reply to Former Member

    Thanks for the responce.  I will look into cbreak mode and see if I can get it working on linux. image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube