controllables.Piston

class controllables.Piston(port: Optional[int] = None)

Reference to a piston part

The follow code block assumes that a piston is assigned to port 0 and a TextScreen is assigned to port 1.

from controllables import Piston, TextScreen
from time import sleep

piston = Piston(0)
screen = TextScreen(1)

#the notes to mary had a little lamb
notes = [5,4,3,4,
        5,5,5,
        4,4,4,
        5,7,7,
        5,4,3,4,
        5,5,5,5,
        4,4,5,4,
        3,]

#the lengths of each note
lengths = [1,1,1,1,
        1,1,2,
        1,1,2,
        1,1,2,
        1,1,1,1,
        1,1,1,1,
        1,1,1,1,
        4]

#the words for each note
lyrics = ["mary",   "mary",   "had",   "a",
        "little", "little", "lamb",
        "little", "little", "lamb",
        "little", "little", "lamb",
        "mary",  "mary",   "had",   "a",
        "little", "little", "lamb",  "its",
        "fleece", "was",    "white", "as",
        "snow"]

while True:
    #play each note
    for i in range(0,len(notes)):
        screen.text = lyrics[i]
        #move the piston the the height of the note
        piston.move_to(notes[i] / 8.)
        #hold it for it's length
        sleep(lengths[i])
        #lift the note
        piston.move_to(0)
        sleep(.05)

    #rest for a measure before repeating
    sleep(4)
move(power: float = 1)

Sends a signal to move the piston shaft. power should be set to a float from -1 to 1 representing the proportion of max velocity at which the shaft will extend. Negative values retract the shaft instead of extending it.

from controllables import Piston
import time

piston = Piston(0)

piston.move()

time.sleep(1)

piston.stop()
stop()

Stops moving the piston.

Note

This doesn’t prevent transmitters or properties from moving the piston.

from controllables import Piston
import time

piston = Piston(0)

piston.move()

time.sleep(1)

piston.stop()
move_to(position: float)

Sends a signal to move the piston shaft to the position position between 0 and 1 with 0 being fully retracted and 1 being fully extended.

from controllables import Piston
import time

piston = Piston(0)

#set the target position to 50%
piston.move_to(.5)

time.sleep(2)

#release the target position
piston.stop()
position() float

A float from 0 to 1 representing how far extended the shaft is with 0 being fully retracted and 1 being fully extended.

property oscillate: bool

The oscillate property of the piston avaliable in the properties tab.

property return_to_origin: bool

The return to origin property of the piston avaliable in the properties tab.

property max_velocity: float

The maximum velocity (in meters per second) property of the piston avaliable in the properties tab.

property acceleration_time: float

The acceleration time (in seconds) property of the piston avaliable in the properties tab.

property max_force: float

The maximum force (in newtons) property of the piston avaliable in the properties tab.

name() str

Returns the user editable name of the controllable as found in the properties tab of the game.

from ports import PortReference

print(PortReference(0).name())