Keypad
Bon. You have with the controller three control modes, keyboard, touch and motion. This script introduces an example of code you add to map the keyboard actions to real actions on the robot. You'll find code here too for single actions, prefixed with # normally. The controller issues these as you move from one screen to another.
#!/usr/bin/env python3
from ev3dev2.sensor.lego import GyroSensor,ColorSensor
from ev3dev2.motor import MoveTank, OUTPUT_C, OUTPUT_B, LargeMotor
from ev3dev2.sound import Sound
from time import sleep
from threading import Thread
import socket
import random
import os
import time
import re
hostName = socket.gethostname()
hostIPA = socket.gethostbyname(hostName)
port = random.randint(50000,50999)
os.system('setfont Lat15-TerminusBold32x16')
print("host",hostIPA)
print("port",port)
tank_pair = MoveTank(OUTPUT_B, OUTPUT_C)
lmb = LargeMotor(OUTPUT_B)
lmc = LargeMotor(OUTPUT_C)
gy = GyroSensor()
cl = ColorSensor()
sd = Sound()
online = True
speed = 10
Feed = True
peerMode = False
pongReply = False
def pongDaemon():
while online:
global pongReply
if pongReply is True:
pongReply = False
dataC = bytes("%:pong", 'utf-8')
client.send(dataC)
def button1S():
tank_pair.on(left_speed=speed, right_speed=speed)
def button2S():
tank_pair.on_for_seconds(left_speed=speed, right_speed=speed, seconds=1, brake=False, block=True)
def button3S():
# This is BUG in Python3, you shouldn't need to redefine tank_pair
tank_pair = MoveTank(OUTPUT_B, OUTPUT_C)
tank_pair.off
def button4S():
tank_pair.on_for_seconds(left_speed=speed, right_speed=-speed, seconds=0.5, brake=False, block=True)
tank_pair.on(left_speed=speed, right_speed=speed)
def button5S():
pass
def button6S():
tank_pair.on_for_seconds(left_speed=-speed, right_speed=speed, seconds=0.5, brake=False, block=True)
tank_pair.on(left_speed=speed, right_speed=speed)
def button7S():
global speed
if speed < 100:
speed = speed + 10
def button8S():
tank_pair.on_for_seconds(left_speed=-speed, right_speed=-speed, seconds=1, brake=False, block=True)
def button9S():
global speed
if speed > -100:
speed = speed - 10
#tank_pair.on(left_speed=speed, right_speed=speed)
def button1L():
sd.speak('1L')
def button2L():
sd.speak('2L')
def button3L():
sd.speak('3L')
def button4L():
sd.speak('4L')
def button5L():
sd.speak('exit')
client.close()
s.close()
tank_pair = MoveTank(OUTPUT_B, OUTPUT_C)
tank_pair.off
exit()
def button6L():
sd.speak('6L')
def button7L():
sd.speak('7L')
def button8L():
sd.speak('Stop Feed')
global Feed
Feed = False
def button9L():
sd.speak('9L')
def stopMotors():
print("STOP STOP STOP ")
tank_pair = MoveTank(OUTPUT_B, OUTPUT_C)
tank_pair.off()
def port1P():
pass
def port2P():
pass
def port3P():
pass
def port4P():
pass
def port5P():
pass
def port6P():
pass
def port7P():
pass
def port8P():
pass
def port1Q():
pass
def port2Q():
pass
def port3Q():
pass
def port4Q():
pass
def port5Q():
pass
def port6Q():
pass
def port7Q():
pass
def port8Q():
pass
def superTap(command):
print("superTap",command)
switcher = {
"1S": button1S, # short press buttons
"2S": button2S,
"3S": button3S,
"4S": button4S,
"5S": button5S,
"6S": button6S,
"7S": button7S,
"8S": button8S,
"9S": button9S,
"1L": button1L, # long press buttons
"2L": button2L,
"3L": button3L,
"4L": button4L,
"5L": button5L,
"6L": button6L,
"7L": button7L,
"8L": button7L,
"9L": button9L,
"1P": port1P, # short press ports
"2P": port2P,
"3P": port3P,
"4P": port4P,
"5P": port5P,
"6P": port6P,
"7P": port7P,
"8P": port8P,
"1Q": port1Q, # long press ports
"2Q": port2Q,
"3Q": port3Q,
"4Q": port4Q,
"5Q": port5Q,
"6Q": port6Q,
"7Q": port7Q,
"8Q": port8Q,
}
func2Execute = switcher.get(command, lambda: "corrupted input")
return func2Execute()
def actionTrigger(command):
if command[:5] == "#:end":
stopMotors()
sd.beep()
peerMode = False
if command[:6] == "#:peer":
peerMode = True
if command[:7] == "#:begin":
pass
if command[:8] == "#:keypad":
pass
if command[:10] == "#:touchpad":
pass
if command[:8] == "#:motion":
pass
if command[:5] == "#:con": # connected
sd.beep()
if command[:5] == "#:dis": # disconnect
sd.beep()
sleep(1)
sd.beep()
exit()
if command[:8] == "#:short":
stopMotors()
sd.speak("stop")
if command[:6] == "#:long":
stopMotors()
sd.speak("you're pressing too hard")
if command[:6] == "#:long":
stopMotors()
sd.speak("ok, ok give me a break")
t8 = Thread(target=pongDaemon, daemon=True)
# start pong daemon
t8.start()
backlog = 1
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((hostIPA,port))
s.listen(backlog)
try:
client, address = s.accept()
while online:
data = client.recv(size)
if data:
command = data.decode('utf-8')
print('>',command,'<')
if command[:6] == "%:ping":
pongReply = True # this kicks off the ping/pong protocol
if command[:2] == "#:": # command begin, end, digital, analog, motion, connection, disconnection, short, long & double
actionTrigger(command)
if command[:2] == "=:":
superTap(command[-2:])
except AssertionError as error:
print("Closing app socket",error)
client.close()
s.close()
m a paragraph. Click here to add your own text and edit me. It's easy.