Keyboard ControlΒΆ

In this project, we will learn how to use the keyboard to remotely control the PiCrawler. You can control the PiCrawler to move forward, backward, left, and right.

Run the Code

cd /home/pi/picrawler/examples
sudo python3 keyboard_control.py

Press keys on keyboard to control PiCrawler! * w: Forward * a: Turn left * s: Backward * d: Turn right * esc: Quit

Code

from picrawler import Picrawler
from time import sleep
import readchar

crawler = Picrawler([10,11,12,4,5,6,1,2,3,7,8,9])
speed = 90

manual = '''
Press keys on keyboard to control PiCrawler!
    w: Forward
    a: Turn left
    s: Backward
    d: Turn right
    esc: Quit
'''

def show_info():
    print("\033[H\033[J",end='')  # clear terminal windows
    print(manual)


def main():
    show_info()
    while True:
        key = readchar.readkey()
        key = key.lower()
        if key in('wsad'):
            if 'w' == key:
                crawler.do_action('forward',1,speed)
            elif 's' == key:
                crawler.do_action('backward',1,speed)
            elif 'a' == key:
                crawler.do_action('turn left',1,speed)
            elif 'd' == key:
                crawler.do_action('turn right',1,speed)
            sleep(0.05)
            show_info()
        elif key == readchar.key.CTRL_C or key in readchar.key.ESCAPE_SEQUENCES:
            print("\n Quit")
            break

        sleep(0.02)


if __name__ == "__main__":
    main()

How it works?

PiCrawler should take appropriate action based on the keyboard characters read. The lower() function converts upper case characters into lower case characters, so that the letter remains valid regardless of case.

while True:
    key = readchar.readkey()
    key = key.lower()
    if key in('wsad'):
    if 'w' == key:
        crawler.do_action('forward',1,speed)
    elif 's' == key:
        crawler.do_action('backward',1,speed)
    elif 'a' == key:
        crawler.do_action('turn left',1,speed)
    elif 'd' == key:
        crawler.do_action('turn right',1,speed)
    sleep(0.05)
    show_info()
    elif key == readchar.key.CTRL_C or key in readchar.key.ESCAPE_SEQUENCES:
    print("\n Quit")
        break