def wrapper():
            # Setup
            b = Button(INPUT_PIN)
            o = Output(OUTPUT_PIN, active_low=output_active_low)

            passed = func(b, o)

            # Teardown
            b.disable()
            o.disable()

            return passed
        def wrapper():
            # Setup
            b = Button(INPUT_PIN)
            o = Output(OUTPUT_PIN, active_low=output_active_low)

            passed = func(b, o)

            # Teardown
            b.disable()
            o.disable()

            return passed
def _test_output_defaults_with_button():
    b = Button(INPUT_PIN)
    o = Output(OUTPUT_PIN) # default is active low!

    o.off() # HIGH
    time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
    released_worked = b.is_released() # Released button is HIGH
    o.on() # LOW
    time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
    pressed_worked = b.is_pressed() # PRESSED button is LOW

    b.disable()
    o.disable()
    return released_worked and pressed_worked
def button_wait(b, o, press, push_time, timeout_time):
    def push():
        o.off()
        time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
        o.on()

    kwargs = {}
    if timeout_time:
        kwargs['timeout'] = timeout_time
    kwargs['press'] = press

    o.on()
    time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
    # clear queue
    if isinstance(b, list):
        for button in b:
            button.presses()
    else:
        b.presses() 

    try:
        t = Timer(push_time, push)
        t.start()
        if isinstance(b, list):
            wait_ret = Button.wait_many(b, **kwargs)
        else:
            wait_ret = b.wait(**kwargs)
    finally:
        t.join()
    print("button wait returned: ", wait_ret)
    return wait_ret
def button_wait(b, o, press, push_time, timeout_time):
    def push():
        o.off()
        time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
        o.on()

    kwargs = {}
    if timeout_time:
        kwargs['timeout'] = timeout_time
    kwargs['press'] = press

    o.on()
    time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
    # clear queue
    if isinstance(b, list):
        for button in b:
            button.presses()
    else:
        b.presses()

    try:
        t = Timer(push_time, push)
        t.start()
        if isinstance(b, list):
            wait_ret = Button.wait_many(b, **kwargs)
        else:
            wait_ret = b.wait(**kwargs)
    finally:
        t.join()
    print("button wait returned: ", wait_ret)
    return wait_ret
def button_invalid_pin():
    passed = False
    try:
        Button(28)
    except ValueError:
        passed = True
    return passed
def button_recreation():
    # Recreate button pin several times and verify
    for i in range(5):
        button_in = Button(INPUT_PIN)
        button_out = Button(OUTPUT_PIN)
        button_in.disable()
        button_out.disable()

    return _test_output_defaults_with_button()
def button_recreation():
    # Recreate button pin several times and verify
    for i in range(5):
        button_in = Button(INPUT_PIN)
        button_out = Button(OUTPUT_PIN)
        button_in.disable()
        button_out.disable()

    return _test_output_defaults_with_button()
def _test_output_defaults_with_button():
    b = Button(INPUT_PIN)
    o = Output(OUTPUT_PIN)  # default is active low!

    o.off()  # HIGH
    time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
    released_worked = b.is_released()  # Released button is HIGH
    o.on()  # LOW
    time.sleep(MINIMUM_BUTTON_PRESS_PERIOD)
    pressed_worked = b.is_pressed()  # PRESSED button is LOW

    b.disable()
    o.disable()
    return released_worked and pressed_worked
예제 #10
0
from rstem.accel import Accel
from rstem.button import Button
from rstem.mcpi import minecraft, control
from rstem.led_matrix import FrameBuffer
import time

control.show()
mc = minecraft.Minecraft.create()

keymap = {
    Button(18): control.left,
    Button(14): control.right,
    Button(15): control.forward,
    Button(23): control.backward,
    Button(7): control.smash,
    Button(24): control.jump,
}

accel = Accel()

fb = FrameBuffer()
flash_count = 0
FLASH_COUNT = 3
table = 0
TABLE_THRESH = 10
EPSILON = 0.03
flash_lit = True
while True:
    pos = mc.player.getTilePos()
    flashing = False
    x = round(pos.x / 10 + 3.5)
예제 #11
0
#!/usr/bin/env python3
import rstem
from rstem.button import Button
from rstem.gpio import Output
from rstem.sound import Note
from random import randrange
import time

buttons = [Button(27), Button(23), Button(24), Button(22)]
lights = [Output(4), Output(18), Output(14), Output(15)]
notes = [Note('A'), Note('B'), Note('C'), Note('D')]
you_failed_note = Note('E2')
you_failed_note.volume = 1000

for note in notes:
    note.volume = 400

for light in lights:
    light.off()

play_order = []
failed = False
while not failed:
    play_order += [randrange(4)]

    # Play sequence
    for i in play_order:
        lights[i].on()
        notes[i].play(0.4).wait()
        lights[i].off()
        time.sleep(0.2)
예제 #12
0
from random import randint
from math import atan2, degrees

control.show(hide_at_exit=True)
mc = minecraft.Minecraft.create()

ARENA_WIDTH = 10
GOLD_DEPTH = 2
gold_pos = mc.player.getTilePos()
gold_pos.x += randint(-ARENA_WIDTH, ARENA_WIDTH)
gold_pos.z += randint(-ARENA_WIDTH, ARENA_WIDTH)
gold_pos.y = mc.getHeight(gold_pos.x, gold_pos.z) - GOLD_DEPTH
mc.setBlock(gold_pos, block.GOLD_BLOCK)

keymap = {
    Button(23): control.left,
    Button(14): control.right,
    Button(18): control.forward,
    Button(15): control.backward,
    Button(7): control.smash,
}

accel = Accel()

arrow0deg = Sprite("""
    --------
    --------
    -----F--
    ------F-
    FFFFFFFF
    ------F-
예제 #13
0
# ##################################
# Import Modules and Initialize Game
# ##################################

from rstem.button import Button
from rstem.gpio import Output
from rstem.sound import Note
from random import randrange
import time
from itertools import cycle

buttons = [Button(14), Button(15), Button(23), Button(17)]
lights = [Output(4), Output(18), Output(24), Output(27)]
notes = [Note('C5'), Note('D5'), Note('E5'), Note('F5')]

you_failed_note = Note('E4')

light_cycle = cycle(lights)
while True:
    for b in buttons:
        b.presses()
    pressed = False
    prev_light = next(light_cycle)
    cur_light = next(light_cycle)
    while not pressed:
        prev_light.off()
        cur_light.on()
        prev_light = cur_light
        cur_light = next(light_cycle)

        for b in buttons:
예제 #14
0
from rstem.accel import Accel
from rstem.button import Button
from rstem.mcpi import control
import time

control.show(hide_at_exit=True)

left = Button(23)
right = Button(14)
up = Button(18)
down = Button(15)

accel = Accel()

while True:
    if left.is_pressed():
        control.left()
    else:
        control.left(release=True)
    if right.is_pressed():
        control.right()
    else:
        control.right(release=True)
    if up.is_pressed():
        control.forward()
    else:
        control.forward(release=True)
    if down.is_pressed():
        control.backward()
    else:
        control.backward(release=True)
    Sprite(arrow30deg).rotate(90),
    Sprite(arrow45deg).rotate(90),
    Sprite(arrow60deg).rotate(90),
    Sprite(arrow75deg).rotate(90),
    Sprite(arrow0deg).rotate(180),
    Sprite(arrow15deg).rotate(180),
    Sprite(arrow30deg).rotate(180),
    Sprite(arrow45deg).rotate(180),
    Sprite(arrow60deg).rotate(180),
    Sprite(arrow75deg).rotate(180),
    Sprite(arrow0deg).rotate(270),
    Sprite(arrow15deg).rotate(270),
    Sprite(arrow30deg).rotate(270),
    Sprite(arrow45deg).rotate(270),
    Sprite(arrow60deg).rotate(270),
    Sprite(arrow75deg).rotate(270),
    ]

compass = Button(24)
fb = FrameBuffer()
while True:
    if compass.presses():
        heading = control.get_heading(mc)
        fb.erase()
        arrow_index = round(heading/15) % 24
        fb.draw(arrows[arrow_index])
        fb.show()

    time.sleep(0.01)

예제 #16
0
from rstem.button import Button

button = Button(14)
print(button.is_pressed())
예제 #17
0
from rstem.button import Button

buttons = [Button(14), Button(15), Button(24), Button(23)]

button = button[2]
if button.is_pressed():
    print("Button was pressed: ", button.pin)
else:
    print("Button was released: ", button.pin)
예제 #18
0
#!/usr/bin/env python3
from rstem.button import Button
from rstem.sound import Note

buttons = [Button(22), Button(23), Button(24), Button(27)]
notes = [Note('A'), Note('B'), Note('C'), Note('D')]

while True:
    for button, note in zip(buttons, notes):
        if button.is_pressed():
            if not note.is_playing():
                note.play(duration=None)
        else:
            note.stop()
예제 #19
0
from rstem.button import Button
from rstem.mcpi import minecraft, control, block
from rstem.mcpi.vec3 import Vec3
import time
from math import sin, cos, radians

control.show(hide_at_exit=True)
mc = minecraft.Minecraft.create()
button = Button(7)

while True:
    if button.presses():
        heading = control.get_heading(mc)
        x_delta = sin(radians(heading))
        z_delta = cos(radians(heading))
        pos = mc.player.getPos() - Vec3(0, 1, 0)
        for i in range(100):
            pos += Vec3(x_delta, 0, z_delta)
            mc.setBlock(pos, block.STONE)

    time.sleep(0.01)

예제 #20
0
from rstem.button import Button
from rstem.mcpi import minecraft, control, block
from rstem.mcpi.vec3 import Vec3
from rstem.led_matrix import FrameBuffer, Text
from rstem.sound import Sound
import time

fb = FrameBuffer()

bomb_sound = Sound("fire.wav")

control.show(hide_at_exit=True)
mc = minecraft.Minecraft.create()
bomb = Button(7)
up = Button(18)
down = Button(15)


def detonate(mc, pos, radius=1):
    r_vector = Vec3(radius, radius, radius)
    mc.setBlocks(pos - r_vector, pos + r_vector, block.AIR)
    bomb_sound.play()


place_mode = True
radius = 1
while True:
    if place_mode:
        if bomb.presses():
            control.hit()
        hits = mc.events.pollBlockHits()
예제 #21
0
from rstem.accel import Accel
from rstem.button import Button
from rstem.led_matrix import FrameBuffer
import time

fire_button = Button(25)

fb = FrameBuffer()
accel = Accel()

spaceship_position = fb.width / 2

alien_columns = [0, 1, 2, 3]
alien_row = fb.height - 1
alien_start_time = time.time()

ALIENS_STEP_TIME = 0.8

missile_x, missile_y = -1, -1

MISSILE_COLOR = 10
MISSILE_STEP_TIME = 0.1

TILT_FORCE = 0.1
SPACESHIP_STEP = 0.1

while True:
    # ########################################
    # Get inputs
    # ########################################
    presses = fire_button.presses()
예제 #22
0
from rstem.button import Button
from rstem.mcpi import minecraft, control, block
from rstem.mcpi.vec3 import Vec3
import time

control.show(hide_at_exit=True)
mc = minecraft.Minecraft.create()

left = Button(23)
right = Button(14)
up = Button(18)
down = Button(15)

cursor = mc.player.getTilePos()
cursor.y = mc.getHeight(cursor.x, cursor.z)

while True:
    old_cursor = cursor.clone()
    cursor += Vec3(0, 0, right.presses())
    cursor += Vec3(0, 0, -left.presses())
    cursor += Vec3(up.presses(), 0, 0)
    cursor += Vec3(-down.presses(), 0, 0)
    if old_cursor != cursor:
        mc.setBlock(old_cursor, block.AIR)
        cursor.y = mc.getHeight(cursor.x, cursor.z)

    mc.setBlock(cursor, block.STONE)

    time.sleep(0.01)
from rstem.accel import Accel
from rstem.button import Button
from rstem.mcpi import minecraft, control
import time

control.show(hide_at_exit=True)

keymap = {
    Button(23): control.left,
    Button(14): control.right,
    Button(18): control.forward,
    Button(15): control.backward,
}

accel = Accel()

while True:
    for button, action in keymap.items():
        if button.is_pressed():
            action()
        else:
            action(release=True)

    x, y, z = accel.forces()
    control.look(up=20 * y, left=20 * x)

    time.sleep(0.01)
예제 #24
0
# Initialize accelerometer
accel = Accel()

# Initialize spaceship
spaceship = Sprite('''
    -F-
    FAF
    ''')
TILT_FORCE = 0.1
SPACESHIP_STEP = 0.1

# Initialize aliens
ALIENS_STEP_TIME = .8

# Initialize missiles
fire_button = Button(7)
MISSILE_COLOR = 10
MISSILE_STEP_TIME = 0.1

# Initialize sounds
fire_sound = Sound("fire.wav")
hit_sound = Sound("hit.wav")
notes = [Note('B5'), Note('G5'), Note('E5'), Note('C5')]
notes_cycle = cycle(notes)
while True:
    fire_button.presses()
    while True:
        if scroll(start_text, cancel=fire_button.presses):
            break

    spaceship_middle = 1
예제 #25
0
def d:
    play = Thread(target = subprocess.call, args = ([["aplay", "D.wav"]]))
    play.start()
    
def e:
    play = Thread(target = subprocess.call, args = ([["aplay", "E.wav"]]))
    play.start()
    
def f
    play = Thread(target = subprocess.call, args = ([["aplay", "F.wav"]]))
    play.start()
    
def g:
    play = Thread(target = subprocess.call, args = ([["aplay", "G.wav"]]))
    play.start()

def a:
    play = Thread(target = subprocess.call, args = ([["aplay", "A.wav"]]))
    play.start()

def b:
    play = Thread(target = subprocess.call, args = ([["aplay", "B.wav"]]))
    play.start()

buttons = {c: Button(8), d: Button(0) e: Button(3), f: Button(13) g: Button(30), a: Button(23), b: Button(25)}

while True:
    for key, val in buttons.items():
        if val.presses():
            key()
예제 #26
0
from rstem.button import Button
from rstem.sound import Note
import time

buttons_and_notes = [
    [Button(10), Note('G3')],
    [Button(3), Note('A3')],
    [Button(2), Note('B3')],
    [Button(15), Note('C')],
    [Button(17), Note('D')],
    [Button(23), Note('E')],
    [Button(11), Note('F')],
    [Button(7), Note('G')],
    [Button(19), Note('A')],
    [Button(20), Note('B')],
    [Button(26), Note('C5')],
    [Button(21), Note('D5')],
]

while True:
    for button, note in buttons_and_notes:
        if button.is_pressed():
            if not note.is_playing():
                note.play(duration=None)
        else:
            note.stop()
    time.sleep(0.01)
예제 #27
0
from rstem.accel import Accel
from rstem.button import Button
from rstem.mcpi import control
import time

control.show(hide_at_exit=True)

left = Button(23)
right = Button(14)
up = Button(18)
down = Button(15)

accel = Accel()

while True:
    if left.is_pressed():
        control.left()
    else:
        control.left(release=True)
    if right.is_pressed():
        control.right()
    else:
        control.right(release=True)
    if up.is_pressed():
        control.forward()
    else:
        control.forward(release=True)
    if down.is_pressed():
        control.backward()
    else:
        control.backward(release=True)
예제 #28
0
    flash = flasher(led, 0.1, 0.2)
    test = tester(xgood, ygood, zgood)
    results = []
    for result in test:
        if result != None:
            results.append(result)
        next(flash)
        time.sleep(0.01)
    on(led)
    for i, passed in enumerate(results):
        if not passed:
            on("FAIL" + str(i))
    return results


start_button = Button(pins["START"])

#
# Hack!  Pin 8 is used by the LED Driver SPI bus, which we don't care about
# here.  So we forcibly disable it.
#
os.system("echo 8 > /sys/class/gpio/unexport")

all_off()

while True:
    for led in ["XTEST", "YTEST", "ZTEST"]:
        off(led)
    flash_until_button("READY")
    all_off()
    xresults = test_all_in_one_direction("XTEST", 1, 0, 0)
예제 #29
0
import mido
from rstem.button import Button
from rstem.gpio import Output

output = mido.open_output('X18/XR18 MIDI 1')
button = Button(4)
clean_led = Output(2)
distorted_led = Output(22)

output.send(mido.Message('control_change', channel=1))
output.send(mido.Message('control_change', channel=1, control=1, value=127))
distorted = False
clean_led.on()
distorted_led.off()
while True:
    if button.presses():
        if distorted == True:
            output.send(mido.Message('control_change', channel=1))
            output.send(
                mido.Message('control_change', channel=1, control=1,
                             value=127))
            distorted = False
            clean_led.on()
            distorted_led.off()
        elif distorted == False:
            output.send(mido.Message('control_change', channel=1, value=127))
            output.send(mido.Message('control_change', channel=1, control=1))
            distorted = True
            clean_led.off()
            distorted_led.on()
예제 #30
0
from rstem.button import Button
from rstem.mcpi import minecraft, control, block
from rstem.mcpi.vec3 import Vec3
from itertools import cycle
import time

control.show(hide_at_exit=True)
mc = minecraft.Minecraft.create()

left = Button(23)
right = Button(14)
up = Button(18)
down = Button(15)
place = Button(24)
select = Button(7)

block_types = [
    block.STONE,
    block.BRICK_BLOCK,
    block.OBSIDIAN,
    block.DIAMOND_BLOCK,
    ]
block_types = cycle(block_types)
blk = next(block_types)

cursor = mc.player.getTilePos()
cursor.y = mc.getHeight(cursor.x, cursor.z)

BLINK_TIME = 0.3
start = time.time()
cursor_on = True
예제 #31
0
    Sprite(arrow15deg).rotate(90),
    Sprite(arrow30deg).rotate(90),
    Sprite(arrow45deg).rotate(90),
    Sprite(arrow60deg).rotate(90),
    Sprite(arrow75deg).rotate(90),
    Sprite(arrow0deg).rotate(180),
    Sprite(arrow15deg).rotate(180),
    Sprite(arrow30deg).rotate(180),
    Sprite(arrow45deg).rotate(180),
    Sprite(arrow60deg).rotate(180),
    Sprite(arrow75deg).rotate(180),
    Sprite(arrow0deg).rotate(270),
    Sprite(arrow15deg).rotate(270),
    Sprite(arrow30deg).rotate(270),
    Sprite(arrow45deg).rotate(270),
    Sprite(arrow60deg).rotate(270),
    Sprite(arrow75deg).rotate(270),
]

compass = Button(24)
fb = FrameBuffer()
while True:
    if compass.presses():
        heading = control.get_heading(mc)
        fb.erase()
        arrow_index = round(heading / 15) % 24
        fb.draw(arrows[arrow_index])
        fb.show()

    time.sleep(0.01)