top of page

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.

bottom of page