def checkmotor(): try: id = c2py.readworddata(ADDRESS, MOTOR_GET0, 1) except c2py.I2CError: return False return True
def getword(address, cmd): while True: try: val = c2py.readworddata(address, cmd, 1) break except c2py.I2CError: pass return val
def __get__(channel): if channel not in [0, 1]: raise ValueError, "Incorrect channel read" cmd = (MOTOR_GET0, MOTOR_GET1)[channel] try: n = c2py.readworddata(ADDRESS, cmd, 1) except: return 0 # Should do something more sensible here! speed = n & 0x1FF dir = n >> 9 if (dir == OFF or dir == BRAKE): return 0 elif dir == FORWARD: return speed / 3.28 elif dir == BACKWARD: return -1 * speed / 3.28
def __set__(channel, speed): speed = float(speed) if speed > 100: speed = 100 elif speed < -100: speed = -100 if channel not in [0, 1]: raise ValueError, "Incorrect channel set" if speed > 0: dir = FORWARD else: dir = BACKWARD speed = abs(int(speed * 3.28)) v = speed | (dir << 9) | (channel << 11) while True: try: c2py.writeworddata(ADDRESS, MOTOR_CMD_CONF, v, 1) except: continue cmd = (MOTOR_GET0, MOTOR_GET1)[channel] try: n = c2py.readworddata(ADDRESS, cmd, 1) except: continue if (n & 0x1FF) == speed and (n >> 9) == dir: break
def __set__( channel, speed ): speed = float(speed) if speed > 100: speed = 100 elif speed < -100: speed = -100 if channel not in [0,1]: raise ValueError, "Incorrect channel set" if speed > 0: dir = FORWARD else: dir = BACKWARD speed = abs(int(speed * 3.28)) v = speed | (dir << 9) | (channel<<11) count = 0 while count < MAXERR: c2py.writeworddata( ADDRESS, MOTOR_CMD_CONF, v, 1 ) cmd = (MOTOR_GET0, MOTOR_GET1)[channel] n = c2py.readworddata( ADDRESS, cmd, 1) if (n & 0x1FF) == speed and (n >> 9) == dir: break count = count + 1 if count == MAXERR: raise c2py.I2CError
def getfirmware(): return c2py.readworddata(ADDRESS, CMD_GET_FIRMWARE, 1)