def analogWrite(self, pin, value): """Establece el estado de un pin análogo""" if not (type(pin) == type(1)): raise PynguinoError(2) if not (type(value) == type(1)): raise PynguinoError(6) if value < 0 or value > 1023: raise PynguinoError(7) self.Send("analogWrite(" + str(pin) + "," + str(value) + ")")
def LCD_begin(self,par1,par2): if type(par1)!=type(1): raise PynguinoError(13) if type(par2)!=type(1): raise PynguinoError(13) self.pinguino.write('begin') self.pinguino.write(str(par1).rjust(2,'0')) self.pinguino.write(str(par2).rjust(2,'0'))
def LCD_setCursor(self,par1,par2): if type(par1)!=type(1): raise PynguinoError(13) if type(par2)!=type(1): raise PynguinoError(13) self.pinguino.write('setCursor') self.pinguino.write(str(par1).rjust(2,'0')) self.pinguino.write(str(par2).rjust(2,'0'))
def LCD_saveChar(self,position,char): if type(position)!=type(1): raise PynguinoError(16) self.LCD_command(position); for fila in char: if type(fila)!=type(1): raise PynguinoError(16) self.LCD_write(fila)
def pinMode(self, pin, mode): """Define como se comportará el pin, como entrada o como salida""" if type(pin) != type(1): raise PynguinoError(2) if not (mode == 'input' or mode == 'output'): raise PynguinoError(4) self.pinguino.write('setup') self.pinguino.write(str(pin).rjust(2, '0')) self.pinguino.write(mode) self.pin_modes[pin] = mode
def analogWrite(self, pin, value): """Establece el estado de un pin análogo""" if not (type(pin) == type(1)): raise PynguinoError(2) if not (type(value) == type(1)): raise PynguinoError(6) if value < 0 or value > 1023: raise PynguinoError(7) self.pinguino.write('write') self.pinguino.write(str(pin).rjust(2, '0')) self.pinguino.write('analog') self.pinguino.write(str(value).rjust(4, '0'))
def digitalWrite(self, pin, value): """Establece el estado de un pin, alto o bajo""" if not (type(pin) == type(1)): raise PynguinoError(2) if not (value == 'high' or value == 'low'): raise PynguinoError(5) self.pinguino.write('write') self.pinguino.write(str(pin).rjust(2, '0')) self.pinguino.write('digital') if value == 'high': self.pinguino.write('1') elif value == 'low': self.pinguino.write('0') self.pin_states[pin] = value
def analogRead(self, pin): """Lee el estado de un pin análogo""" if not (type(pin) == type(1)): raise PynguinoError(2) self.pinguino.write('read') self.pinguino.write(str(pin).rjust(2, '0')) self.pinguino.write('analog') #Para evitar ValueError: null byte in argument for int() #simplemente se eliminan todos los'\x00' #más una función de recursividad cont = 0 while cont <= 10: try: read_analog = self.pinguino.read(5) value = int(read_analog.replace('\x00', '')) return value except: cont += 1 raise PynguinoError(11)
def Conect(self,puerto): """Inicializa la comunicación""" try: self.pinguino=serial.Serial(puerto,timeout=1) self.pinguino.write('PinnoProcessing') if self.pinguino.read(9)=='Conectado': self.pin_modes=range(29) self.pin_states=range(29) return True except: raise PynguinoError(1)
def digitalRead(self, pin): """Lee el estado de un pin""" if not (type(pin) == type(1)): raise PynguinoError(2) self.pinguino.write('read') self.pinguino.write(str(pin).rjust(2, '0')) self.pinguino.write('digital') read = self.pinguino.read(1) if read == '1': return 'high' elif read == '0': return 'low'
def detectar_metodo(cadena): comandos_processing = ("Conect", "RecursiveConect", "pinMode", "digitalWrite", "digitalRead", "analogRead", "analogWrite", "GetPinMode", "GetPinState", "allInput", "allOutput", "allHigh", "allLow", "reset", "setProcessingTimeout", "setProcessingWriteTimeout", "ProcessingClose", "GetPinguinoCode") if comandos_processing.count(cadena[:cadena.find("(")]) != 0: ret = [] ret.append(cadena[:cadena.find("(")]) ret.append(cadena[cadena.find("(") + 1:cadena.find(",")]) if cadena.count(",") == 1: ret.append(cadena[cadena.find(",") + 1:cadena.find(")")]) return ret else: raise PynguinoError(8)
#! /usr/bin/python #-*- coding: utf-8 -*- #Copyright (c) <2011> Yeison Nolberto Cardona Álvarez <*****@*****.**> #https://sites.google.com/site/yeisoneng/ #All rights reserved. #Este módulo es distribuido bajo licencia libre, ver archivo licence. from raiseError import PynguinoError import os,serial if not(os.name=='nt' or os.name=='posix'): raise PynguinoError(9) from PinguinoProcessing import PinguinoProcessing from PinguinoSockets import PinguinoSockets from PinguinoLCD import PinguinoLCD
def digitalRead(self, pin): """Lee el estado de un pin""" if not (type(pin) == type(1)): raise PynguinoError(2) self.Send("digitalRead(" + str(pin) + ")")
def GetPinState(self, pin): """Retorna el estado de un pin basado en la informacion enviada""" if not (type(pin) == type(1)): raise PynguinoError(2) if type(self.pin_states[pin]) == type(1): return 'low' else: return self.pin_states[pin]
def GetPinMode(self, pin): """Retorna el modo de un pin basado en la informacion enviada""" if not (type(pin) == type(1)): raise PynguinoError(2) if type(self.pin_modes[pin]) == type(1): return 'output' else: return self.pin_modes[pin]
def analogRead(self, pin): """Lee el estado de un pin análogo""" if not (type(pin) == type(1)): raise PynguinoError(2) self.Send("analogRead(" + str(pin) + ")")
def digitalWrite(self, pin, value): """Establece el estado de un pin, alto o bajo""" if not (type(pin) == type(1)): raise PynguinoError(2) if not (value == 'high' or value == 'low'): raise PynguinoError(5) self.Send("digitalWrite(" + str(pin) + ",'" + str(value) + "')")
# OSC 2 -# #- GND Analog In 20 -# #- GND # Digital I/O 10 -# #- Digital I/O 9 VCC -# #- Digital I/O 28 # Digital I/O, Analog Out 11 -# #- Digital I/O 8 GND -# #- Digital I/O 27 # Digital I/O, Analog Out 12 -# #- D+ OSC 1-# #- Digital I/O 26 # VUSB -#######- D- OSC 2-# #- Digital I/O 25 # Digital I/O 10 -# #- Digital I/O 9 # Digital I/O, Analog Out 11 -# #- Digital I/O 8 # Digital I/O, Analog Out 12 -# #- D+ # VUSB -# #- D- # Digital I/O 21 -# #- Digital I/O 24 # Digital I/O 22 -###########- Digital I/O 23 try: import serial except: PynguinoError(3) import os from raiseError import PynguinoError ######################################################################## class PinguinoProcessing(): # Modificado Jue 7 Julio 2011 - Para Adaptar a PinguiBLOQUES pin_modes = range(29) pin_states = range(29) #---------------------------------------------------------------------- def Conect(self, puerto): """Inicializa la comunicación"""
def LCD_print(self,to_send): """LCD_prind soporta todo formato (int, float, string)""" if not ((type(to_send)==type(1)) or (type(to_send)==type(1.0)) or (type(to_send)==type("N"))): raise PynguinoError(14) if type(to_send)==type(1): to_send=str(to_send) if type(to_send)==type(1.0): to_send=str(to_send) self.pinguino.write('print') self.pinguino.write(to_send)
def GetPinState(self, pin): """Retorna el estado de un pin basado en la informacion enviada""" if not (type(pin) == type(1)): raise PynguinoError(2) self.Send("GetPinState(" + str(pin) + ")")
def pinMode(self, pin, mode): """Define como se comportará el pin, como entrada o como salida""" if type(pin) != type(1): raise PynguinoError(2) if not (mode == 'input' or mode == 'output'): raise PynguinoError(4) self.Send("pinMode(" + str(pin) + ",'" + mode + "')")
def LCD_write(self,value): if type(value)!=type(1): raise PynguinoError(14) self.pinguino.write('write') self.pinguino.write(str(value))
def LCD_command(self,value): if type(value)!=type(1): raise PynguinoError(13) self.pinguino.write('command') self.pinguino.write(str(value))
#! /usr/bin/python #-*- coding: utf-8 -*- try: import serial except: PynguinoError(3) import os from raiseError import PynguinoError ######################################################################## class PinguinoLCD(): #---------------------------------------------------------------------- def Conect(self,puerto): """Inicializa la comunicación""" try: self.pinguino=serial.Serial(puerto,timeout=1) self.pinguino.write('PinnoProcessing') if self.pinguino.read(9)=='Conectado': self.pin_modes=range(29) self.pin_states=range(29) return True except: raise PynguinoError(1) #---------------------------------------------------------------------- def RecursiveConect(self,max_puertos=20): """Se conecta estomáticamente con el primer pinguino que encuentre habilitado.""" cont=0 while cont<=max_puertos: try: if os.name=='posix': self.Conect('/dev/ttyACM'+str(cont))