Exemplo n.º 1
0
 def setup(self,
           bus_id=DEFAULT_I2C_BUS_ID,
           interrupt=DEFAULT_INTERRUPT_ID,
           flash_duration=DEFAULT_FLASH_DURATION):
     self.trackball = TrackBall(i2c_bus=bus_id, interrupt_pin=interrupt)
     self.duration = flash_duration
     self.recording_video = False
Exemplo n.º 2
0
import time
from trackball import TrackBall
from drv2605 import DRV2605

print("""This Pimoroni Breakout Garden example requires a
DRV2605L Haptic Breakout and a Trackball Breakout.

This example demonstrates how to generate haptic feedback
as the trackball is scrolled/pressed.

Press Ctrl+C to exit.
""")

# Set up Trackball Breakout.
trackball = TrackBall(interrupt_pin=4)
drv2605 = DRV2605()

x = 0
y = 0

delta_x = 0
delta_y = 0
last_state = 0

# Set up Haptic Breakout.
drv2605.reset()
drv2605.set_realtime_data_format('Unsigned')
drv2605.set_feedback_mode('LRA')
drv2605.set_mode('Real-time Playback')
drv2605.go()
Exemplo n.º 3
0
import colorsys
from trackball import TrackBall
import atexit

print("""Trackball: Colour Control

Use the trackball and switch to control the hue and
brightness of the trackball's RGBW LEDs.

Scroll up to increase brightness and left/right
to change hue. Click to turn on/off.

Press Ctrl+C to exit!
""")

trackball = TrackBall(interrupt_pin=4)


@atexit.register
def clear_trackball():
    trackball.set_rgbw(0, 0, 0, 0)


x = 0
y = 50.0

toggled = False

while True:
    up, down, left, right, switch, state = trackball.read()
Exemplo n.º 4
0
    sudo cp 10-trackball.rules /etc/udev/rules.d/
    sudo udevadm control --reload-rules

And run this script as root with:

    sudo ./evdev-mouse.py

For this to work.

Press Ctrl+C to exit!

""")

os.system('modprobe uninput')

trackball = TrackBall(interrupt_pin=4)

MAX_X = 255
MAX_Y = 255

cap = {e.EV_KEY: [e.BTN_LEFT, e.BTN_RIGHT], e.EV_REL: [e.REL_X, e.REL_Y]}

ui = UInput(cap, name='Pimoroni Trackball', bustype=e.BUS_USB)

x = 0
y = 0

try:
    while True:
        while not trackball.get_interrupt():
            time.sleep(0.001)
Exemplo n.º 5
0
class TrackballHelper():
    """
    Helper class for Pimoroni's Trackball processing.
    """
    DEFAULT_I2C_BUS_ID = 3
    DEFAULT_INTERRUPT_ID = 4
    DEFAULT_INTERVAL = 0.5
    DEFAULT_THRESHOLD = 15
    DEFAULT_FLASH_DURATION = 5

    NOTIFY_LEFT = 1
    NOTIFY_RIGHT = 2
    NOTIFY_UP = 3
    NOTIFY_DOWN = 4
    NOTIFY_CLICK = 5

    ERR_MSG_NO_SETUP = "No trackball setup"
    ERR_MSG_ALREADY_STARTED = "Already started"
    ERR_MSG_NOT_STARTED = "Not started"
    ERR_MSG_ALREADY_RECORDING = "Already Recording"
    ERR_MSG_NOT_RECORDING = "Not Recording"

    def __init__(self, **kwargs):
        super(TrackballHelper, self).__init__(**kwargs)
        self.trackball = None
        self.trackball_event = None
        self.duration = TrackballHelper.DEFAULT_FLASH_DURATION
        self._video_lock = threading.Lock()

    def setup(self,
              bus_id=DEFAULT_I2C_BUS_ID,
              interrupt=DEFAULT_INTERRUPT_ID,
              flash_duration=DEFAULT_FLASH_DURATION):
        self.trackball = TrackBall(i2c_bus=bus_id, interrupt_pin=interrupt)
        self.duration = flash_duration
        self.recording_video = False

    def start(self, callback):
        if self.trackball_event:
            Logger.error(TrackballHelper.ERR_MSG_ALREADY_STARTED)
            return
        self.trackball_event = Clock.schedule_interval(
            partial(self.on_read_trackball, callback),
            TrackballHelper.DEFAULT_INTERVAL)

    def stop(self):
        if not self.trackball_event:
            Logger.error(TrackballHelper.ERR_MSG_NOT_STARTED)
            return
        self.trackball_event.cancel()
        self.trackball_event = None

    def on_read_trackball(self, callback, delta_time):
        up, down, left, right, switch, state = self.trackball.read()
        if left > TrackballHelper.DEFAULT_THRESHOLD:
            callback(TrackballHelper.NOTIFY_LEFT)
        elif right > TrackballHelper.DEFAULT_THRESHOLD:
            callback(TrackballHelper.NOTIFY_RIGHT)
        if up > TrackballHelper.DEFAULT_THRESHOLD:
            callback(TrackballHelper.NOTIFY_UP)
        elif down > TrackballHelper.DEFAULT_THRESHOLD:
            callback(TrackballHelper.NOTIFY_DOWN)
        if state:
            callback(TrackballHelper.NOTIFY_CLICK)

    def clear_trackball(self):
        if self.trackball:
            self.trackball.set_rgbw(0, 0, 0, 0)
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def click_red_trackball(self):
        if self.trackball:
            self.trackball.set_rgbw(255, 0, 0, 0)
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def click_green_trackball(self):
        if self.trackball:
            self.trackball.set_rgbw(0, 255, 0, 0)
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def click_blue_trackball(self):
        if self.trackball:
            self.trackball.set_rgbw(0, 0, 255, 0)
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def timer_still(self):
        if self.trackball:
            for i in range(int(self.duration)):
                self.click_red_trackball()
                time.sleep(0.5)
                self.clear_trackball()
                time.sleep(0.5)
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def activate_video(self):
        if self.trackball:
            if self.recording_video:
                Logger.warn(TrackballHelper.ERR_MSG_ALREADY_RECORDING)
            else:
                with self._video_lock:
                    self.recording_video = True
                self.video_thread = threading.Thread(
                    target=self.flash_video_recording)
                self.video_thread.start()
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def deactivate_video(self):
        if self.trackball:
            if not self.recording_video:
                Logger.warn(TrackballHelper.ERR_MSG_NOT_RECORDING)
            else:
                with self._video_lock:
                    self.recording_video = False
                self.video_thread.join()
                self.video_thread = None
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)

    def flash_video_recording(self):
        if self.trackball:
            while self.recording_video:
                self.click_red_trackball()
                time.sleep(0.5)
                self.clear_trackball()
                time.sleep(0.5)
        else:
            Logger.error(TrackballHelper.ERR_MSG_NO_SETUP)
Exemplo n.º 6
0
#!/usr/bin/env python

import time
import colorsys
from trackball import TrackBall

print("""Trackball: Rainbow

Fades through all the colours of the rainbow!

Press Ctrl+C to exit!
""")

trackball = TrackBall(interrupt_pin=4)

while True:
    h = int(time.time() * 100) % 360 / 360.0

    # Calculate RGB vals
    r, g, b = [int(c * 255) for c in colorsys.hsv_to_rgb(h, 1.0, 1.0)]
    w = 0

    # Set LEDs
    trackball.set_rgbw(r, g, b, w)

    time.sleep(0.01)