Пример #1
0
from Stepper import Stepper
import time

stepper_time_interval_seconds = 0.1
# Pin order:             [ENB|MS1|MS2|MS3|RST|SLP|STP|DIR]
stepper_A = Stepper([4, 7, 6, 5, 0, 0, 3, 2], "Stepper A",
                    stepper_time_interval_seconds)
stepper_B = Stepper([10, 11, 12, 13, 0, 0, 9, 8], "Stepper B",
                    stepper_time_interval_seconds)
stepper_C = Stepper([16, 17, 18, 19, 0, 0, 15, 14], "Stepper C",
                    stepper_time_interval_seconds)
stepper_D = Stepper([22, 23, 24, 25, 0, 0, 21, 20], "Stepper D",
                    stepper_time_interval_seconds)
print "Created 4 steppers"

stepper_A.go()
# stepper_B.go()
# stepper_C.go()
# stepper_D.go()

time.sleep(2)  # Sleep 5 seconds

stepper_A.move_to_position(32.0)
print("Moved goal to 32")

time.sleep(4)  # Sleep 5 seconds

stepper_B.move_to_position(-26.0)
print("Moved goal to 32")
Пример #2
0
class Osc2Steppers:
    """Class that listens for OSC messages, and forwards them as target positions for stepper motors"""

    stepper_time_interval_seconds = 0.02

    def __init__(self, osc_ip='0.0.0.0', osc_port=12000):
        """Create our stepper object and osc server object"""

        self.debug = True

        # listen for OSC messages on port 12000 (Wekinator default)
        self.stepper_count = 2  #4

        # Pin order:             [ENB|MS1|MS2|MS3|RST|SLP|STP|DIR]
        self.stepper_A = Stepper([4, 5, 6, 7, 0, 0, 3, 2], "Stepper A",
                                 self.stepper_time_interval_seconds)
        self.stepper_B = Stepper([10, 11, 12, 13, 0, 0, 9, 26], "Stepper B",
                                 self.stepper_time_interval_seconds)
        self.stepper_C = Stepper([16, 17, 18, 19, 0, 0, 15, 14], "Stepper C",
                                 self.stepper_time_interval_seconds)
        self.stepper_D = Stepper([22, 23, 24, 25, 0, 0, 21, 20], "Stepper D",
                                 self.stepper_time_interval_seconds)
        print "Created 4 steppers"

        self.OSCServer = OSC.OSCServer((osc_ip, osc_port))
        self.OSCServer.addMsgHandler('/wek/outputs', self.wek_outputs_handler)
        self.OSCServer.addMsgHandler('/tenta_emg', self.tenta_emg_handler)

        print "Tentacle Control is listening for OSC message /wek/outputs, ip %s port %s" % (
            osc_ip, osc_port)

    def go(self):
        """Start steppers self-updating, and start our OSC server listening"""
        #self.stepper_A.go()
        self.stepper_B.go()
        self.stepper_C.go()
        self.stepper_D.go()
        self.OSCServer.serve_forever()

    def tenta_emg_handler(self, addr, tags, data, client_address):
        emg_avg = data[0]
        if emg_avg < 125:
            self.stepper_D.move_to_position(0)  #position of closed
        elif emg_avg < 300:
            pos_interp = 0 - ((emg_avg - 125) / float(300 - 125)) * 200
            self.stepper_D.move_to_position(pos_interp)  #in between
        else:
            self.stepper_D.move_to_position(-200)  #position of closed

    def wek_outputs_handler(self, addr, tags, data, client_address):
        """Callback that is called when we receive an osc message with path '/wek/outputs'"""
        # 0 controls back and front
        # 1 controls side to side
        data[0] *= 200
        data[1] *= 200
        if self.debug:
            print "OSCMessage '%s' from %s: %s" % (addr, client_address, data)

        if (len(data) != self.stepper_count):
            print "Error: Expected %s OSC values, got %s" % (
                self.stepper_count, len(data))
            return

        # HERE'S THE MAGIC!
        # Pass on values to our stepper motors
        #self.stepper_A.move_to_position(data[0])
        self.stepper_B.set_delay()
        self.stepper_B.move_to_position(data[0])
        #self.stepper_C.move_to_position(data[2])
        self.stepper_C.set_delay()
        self.stepper_C.move_to_position(data[1])