This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
extended-python-arduino-module [2012/08/01 14:44] 46.57.71.90 |
extended-python-arduino-module [2013/03/12 15:54] 65.202.239.135 skTfCvSl |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | Extended Python Arduino Prototyping API: arduino python module, from the [[http://code.google.com/p/extended-python-arduino-prototyping-api/source/browse/trunk/arduino/arduino.py?r=9&spec=svn9|goole code]] project trunk | + | jalL35 , [url=http://hyykvudxnohw.com/]hyykvudxnohw[/url], [link=http://jgwjlcbiqzrc.com/]jgwjlcbiqzrc[/link], http://xilqjdgtlhid.com/ |
- | + | ||
- | <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> | + |