Exemplo n.º 1
0
class Board(SerializableModel):
    pk = None
    port = None
    pins = None
    name = None
    written_pins = set()

    json_export = ("pk", "port", "pins", "url")

    def __init__(self, pk, port, layout=DEFAULT_LAYOUT, *args, **kwargs):
        self.pk = pk
        self.port = port
        self._board = FirmataBoard(self.port, layout)
        self.pins = {
            "analog": dict(((pin.pin_number, Pin(pk, pin.pin_number, type="analog")) for pin in self._board.analog)),
            "digital": dict(((pin.pin_number, Pin(pk, pin.pin_number, type="digital")) for pin in self._board.digital)),
        }

        [setattr(self, k, v) for k, v in kwargs.items()]
        super(Board, self).__init__(*args, **kwargs)

    def __del__(self):
        try:
            self.disconnect()
        except:
            print(traceback.format_exc())

    @property
    def url(self):
        return "/%s/boards/%s/" % (API_VERSION, self.pk)

    def disconnect(self):
        for pin in self.written_pins:
            pin.write(0)
        return self._board.exit()

    def get_pin(self, identifier):
        a_d = identifier[0] == "a" and "analog" or "digital"
        pin_nr = int(identifier[1:])
        return self.pins[a_d][pin_nr]

    def firmata_pin(self, firmata_identifier):
        return self._board.get_pin(firmata_identifier)

    def release_pin(self, firmata_identifier):
        bits = firmata_identifier.split(":")
        a_d = bits[0] == "a" and "analog" or "digital"
        pin_nr = int(bits[1])
        self._board.taken[a_d][pin_nr] = False
Exemplo n.º 2
0
class servoFirmataTest:

    def __init__(self, comPort, pinNumbers):
        assert len(pinNumbers) > 0, "Parameter pinNumbers has to contain at least one number"
        assert type(pinNumbers[0]) is int and type(pinNumbers[1]) is int, "pinNumbers must contain integers"

        self.arduino = Board(comPort, boards.BOARDS["arduino_due"])

        if(len(pinNumbers)>1):
            self.pins = pinNumbers[:2]
        else:
            self.pins = pinNumbers

        self.servos = servoFirmata.servoFirmata(self.arduino, self.pins, [90,90])
        time.sleep(2)


    def execute(self):
        print("Servo zero to pos 0")
        self.servos.setPosition(0, 0)
        time.sleep(3)

        print("Servo one to pos 0")
        self.servos.setPosition(1, 0)
        time.sleep(3)

        print("Servo zero and one to pos 90")
        self.servos.setPosition(0, 90)
        self.servos.setPosition(1, 90)
        time.sleep(3)

        print("Test complete")

        self.arduino.exit()

        return True
Exemplo n.º 3
0
            # draw the servo exes line for every servo
            cv.line(frame, servoPos1, (int(p1[0]), int(p1[1])), (255, 0, 0), 1)
            cv.line(frame, servoPos2, (int(p2[0]), int(p2[1])), (255, 0, 0), 1)
            cv.line(frame, servoPos3, (int(p3[0]), int(p3[1])), (255, 0, 0), 1)
        else:
            #-----------------------------run program withoud debug info and lines----------------------------------------------------
            if position is not False:
                # update the servo positions
                servo1.update(position[2])
                servo2.update(position[2])
                servo3.update(position[2])
            else:
                # tracking error, set servo's to initial positions, and print message
                servoFirmata1.setPosition(0, 90)
                servoFirmata2.setPosition(0, 90)
                servoFirmata3.setPosition(0, 90)
                print("tracking error")

        # update the GUI
        GUI.update(position, frame, targetPosition)

        # Exit if ESC pressed
        k = cv.waitKey(1) & 0xff
        if k == 27:
            # set the servo's to the down position
            servoFirmata1.setPosition(0, 90)
            servoFirmata2.setPosition(0, 90)
            servoFirmata3.setPosition(0, 90)
            arduino.exit()
            break