User Tools

Site Tools


arduino-py

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

arduino-py [2015/04/28 13:30] (current)
zoza created
Line 1: Line 1:
 +====== arduino.py library, for serial communication ======
  
 +<code python>
 +#​!/​usr/​bin/​env python
 +
 +import serial, time
 +DEBUG=True
 +READ=0 #read
 +WRITE=1 #write
 +class Servo:
 +    def __init__(self,​ pin, board, number=0):
 +        self.pin = pin
 +        self.board=board
 +        self.number=number
 +    def attach(self):​
 +        if self.board.sendCmd('​S',​ 5, self.number,​ self.pin, 0)=='​0':​
 +            return True
 +        print "​Servo:​ Error attach %s" % self.pin
 +        return False
 +    def detach(self):​
 +        if self.board.sendCmd('​S',​ 9, self.number,​ self.pin, 0)=='​0':​
 +            return True
 +        print "​Servo:​ Error detach %s" % self.pin
 +        return False
 +    def attached(self):​
 +        if self.board.sendCmd('​S',​ 8, self.number,​ self.pin, 0)=='​1':​
 +            return True
 +        return False
 +    def write(self,​value):​
 +        if self.board.sendCmd('​S',​ 6, self.number,​ self.pin, value)=='​0':​
 +            return True
 +        print "​Servo:​ Error write %s = %s" % (self.pin,​value)
 +        return False
 +    def read(self):
 +        return self.board.sendCmd('​S',​ 7, self.number,​ self.pin, 0)
 +
 +class Arduino(object):​
 +
 +    __OUTPUT_PINS = -1
 +
 +    def __init__(self,​ port, baudrate=9600):​
 +        self.serial = serial.Serial(port,​ baudrate)
 +        self.servo_index=0
 +        ​
 +    def init(self):
 +        self.sendCmd('​I',​)
 +
 +    def __str__(self):​
 +        return "​Arduino is on port %s at %d baudrate"​ %(self.serial.port,​ self.serial.baudrate)
 +
 +    def attachServo(self,​pin):​
 +        s = Servo(pin,​self,​self.servo_index)
 +        s.attach()
 +        self.servo_index+=1
 +        return s
 +        ​
 +    def getServo(self,​pin,​number):​
 +        '''​ number - index of serv[] array '''​
 +        return Servo(pin,​self,​number)
 +
 +    def output(self,​ pinArray):
 +        if(isinstance(pinArray,​ list) or isinstance(pinArray,​ tuple)):
 +            self.__OUTPUT_PINS = pinArray
 +            for each_pin in pinArray:
 +                self.sendCmd('​C',​each_pin,​1)
 +        return True
 +
 +    def setLow(self,​ pin):
 +        self.sendCmd('​D',​WRITE,​pin,​0)
 +        return True
 +
 +    def setHigh(self,​ pin):
 +        self.sendCmd('​D',​WRITE,​pin,​1)
 +        return True
 +
 +    def getState(self,​ pin):
 +        return self.__formatPinState(self.sendCmd('​D',​READ,​pin))
 +
 +    def analogWrite(self,​ pin, value):
 +        self.sendCmd('​A',​WRITE,​pin,​value)
 +        return True
 +
 +    def analogRead(self,​ pin):
 +        return int(self.sendCmd('​A',​READ,​pin))
 +
 +    def turnOff(self):​
 +        for each_pin in self.__OUTPUT_PINS:​
 +            self.setLow(each_pin)
 +        return True
 +
 +    def sendCmd(self,​ *args):
 +        line=""​
 +        for arg in args:
 +            line = line + "%s " % arg
 +        #print "​dbg:​sendCmd('​%s!'​)"​ % line
 +        self.serial.write("​%s!"​ % line)
 +        self.serial.flush()
 +        res = self.serial.readline().replace("​\r\n",""​)
 +        if DEBUG:
 +            print "​dbg:​sendCmd('​%s!'​)=%s"​ % (line, res)
 +        return res
 +
 +    def __formatPinState(self,​ pinValue):
 +        if pinValue=='​1':​
 +            return True
 +        else:
 +            return False
 +
 +    def close(self):​
 +        self.serial.close()
 +        return True
 +
 +    def __del__(self):​
 +        #close serial connection once program ends
 +        #this fixes the problem of port getting locked or unrecoverable in some linux systems
 +        self.serial.close()
 +</​code>​
arduino-py.txt ยท Last modified: 2015/04/28 13:30 by zoza