import RPi.GPIO as gpio
import sys
import time
####
import Tkinter as tk
def init():
gpio.setmode(gpio.BOARD)
gpio.setup(7, gpio.OUT)
gpio.setup(11, gpio.OUT)
gpio.setup(13, gpio.OUT)
gpio.setup(15, gpio.OUT)
#gpio.output(7, True)
#gpio.output(11, True)
def forward(tf):
#init()
gpio.output(13, True)
gpio.output(15, False)
gpio.output(7, False)
gpio.output(11, True)
time.sleep(tf)
gpio.cleanup()
def reverse(tf):
#init()
gpio.output(13, False)
gpio.output(15, True)
gpio.output(7, True)
gpio.output(11, False)
time.sleep(tf)
gpio.cleanup()
def pivot_left(tf):
#init()
gpio.output(13, True)
gpio.output(15, False)
gpio.output(7, True)
gpio.output(11, False)
time.sleep(tf)
gpio.cleanup()
def pivot_right(tf):
#init()
gpio.output(13, False)
gpio.output(15, True)
gpio.output(7, False)
gpio.output(11, True)
time.sleep(tf)
gpio.cleanup()
def turn_left(tf):
#init()
gpio.output(7, True)
gpio.output(11, True)
gpio.output(13, True)
gpio.output(15, False)
time.sleep(tf)
gpio.cleanup()
def turn_right(tf):
#init()
gpio.output(7, False)
gpio.output(13, False)
gpio.output(15, False)
gpio.output(11, True)
time.sleep(tf)
gpio.cleanup()
def key_input(event):
init()
print 'Key:', event.char
key_press = event.char
sleep_time = 0.030
if key_press.lower() == 'w':
forward(sleep_time)
elif key_press.lower() == 's':
reverse(sleep_time)
elif key_press.lower() == 'a':
turn_left(sleep_time)
elif key_press.lower() == 'd':
turn_right(sleep_time)
elif key_press.lower() =='q':
pivot_left(sleep_time)
elif key_press.lower() == 'e':
pivot_right(sleep_time)
root = tk.Tk()
root.bind('<KeyPress>', key_input)
root.mainloop()
Alright, there is a bit more to this script. I will explain what is happening here, though you can also watch the video for a more in-depth explanation.
First, we needed some way to create a key-logger. The only way I know how is a non-headless way, which is okay, but not ideal. To do it, we're using event-handling built into Tkinter.
Note: import syntax for tkinter is different in Python 2 and Python 3. This is the Python 2 syntax here.
Our Tkinter application is just a simple window that records key presses. It's basically a key-logger.
Since our keylogger application is looping, we no longer need to call the init() function at the beginning of each of the functions.
Our major addition is the key_input() function, which is mainly our tkinter rules. The idea here is to print out what key is being pressed, after running an init(). Then, we define key_press as the key that is pressed.
Next, we have a sleep_time. I chose 0.030 because that allowed me to press and hold the keys for a while, release, and things would stop. Depending on a lot of small variables, your ideal time may vary. Try a few, and make sure you eliminate the lag.
Now we just define rules for each of the possible, acceptable, key-presses.