legoEv3/save/home/robot/button1.py

from ev3dev2.motor import *
from ev3dev2.led import Leds
from ev3dev2.button import *

from datetime import datetime, timedelta
import time
import threading
from ev3dev2._platform.ev3 import *
from queue import Queue, Empty

import sys
# print('EVDEV_DEVICE_NAME', EVDEV_DEVICE_NAME)
# for name, mod in sys.modules.items():
#    print(name, '-->', mod)
print("start t1.py ... ")
print("sys.version", sys.version, "time=" + str(datetime.now()))

class ButtonThr(threading.Thread):
    """ thread ev3 brick buttons """
    running = True;
    def __init__(self):
        threading.Thread.__init__(self)
        self.but = Button()
        self.button_pressed = []
        Button.evdev_device_name = 'EV3 Brick Buttons' # Constant in Button has wrong case, still aber updgrade ... !!!!


    def run(self):
        self.buttons_pressed = self.but.buttons_pressed
        print(str(datetime.now()) + " button start " + repr(self.buttons_pressed))
        Button.on_change = (lambda a, b: print(str(datetime.now()) + " button" + repr(self.but.buttons_pressed), 'a', repr(a), 'b', repr(b)))
        for event in self.but.evdev_device.read_loop():
            self.buttons_pressed = self.but.buttons_pressed 
            print(str(datetime.now()) + " button" + repr(self.buttons_pressed), 'event', repr(event))

            if 'left' in self.buttons_pressed:
                leds.set_color("LEFT", "RED")
            else:     
                leds.set_color("LEFT", "BLACK")
            if 'right' in self.buttons_pressed:
                leds.set_color("RIGHT", "GREEN")
            else:
                leds.set_color("RIGHT", "BLACK")
            if 'up' in self.buttons_pressed:
                mA.on_for_rotations(SpeedPercent(25), 5, block=False)
            elif 'down' in self.buttons_pressed:
                mA.on_for_rotations(SpeedPercent(-25), 5, block=False)
            else:
                mA.stop()
            if 'backspace' in self.buttons_pressed:
                break;
        print(str(datetime.now()) + " button stop " + repr(self.but.buttons_pressed))
print("platform", get_current_platform())
# print("devices", repr(evdev.list_devices()))
# print("dev 2", repr([evdev.InputDevice(fn).name for fn in evdev.list_devices()]))

but = ButtonThr()
leds = Leds()
mA = MediumMotor(OUTPUT_A)

but.start()