def setState(self, state): """ Permet d'e changer l'état du laser (allumé ou éteint). Args: state (str): État du laser. "0" pour éteint, "1" pour allumé. """ self.state = state Methods.writeFile("/sys/class/gpio/gpio"+str(self.nb)+"/value", self.state, "w")
def __init__(self, nb): """ Initialise le laser Args: nb (int): Numéro de la GPIO utilisé. """ self.nb = nb self.state = "0" Methods.writeFile("/sys/class/gpio/gpio"+str(self.nb)+"/direction", "high", "w") self.OFF()
def __init__(self, led1, led2): """ Initialise les GPIO des LEDs Args: led1 (int): Numéro de la GPIO de la LED 1. led2 (int): Numéro de la GPIO de la LED 2. """ self.led1 = led1 self.led2 = led2 self.mode = "" self.shutdownThread = threading.Event() Methods.writeFile("/sys/class/gpio/gpio"+str(self.led1)+"/direction", "high", "w") Methods.writeFile("/sys/class/gpio/gpio"+str(self.led2)+"/direction", "high", "w")
def blink(self): """ Fait clignoter les LEDs alternativement. """ while not self.shutdownThread.is_set(): Methods.writeFile("/sys/class/gpio/gpio"+str(self.led1)+"/value", "0", "w") Methods.writeFile("/sys/class/gpio/gpio"+str(self.led2)+"/value", "1", "w") sleep(0.3) Methods.writeFile("/sys/class/gpio/gpio"+str(self.led1)+"/value", "1", "w") Methods.writeFile("/sys/class/gpio/gpio"+str(self.led2)+"/value", "0", "w") sleep(0.3)
def setPosition(self, position): """ Met à jour la position du servo selon la position donné en degrés. Args: position (int): Position en degré """ if position > 90: position = 90 elif position < -90: position = -90 self.position = position if self.invert: position*=-1 duty = (50000/9)*position+1500000 Methods.writeFile("/sys/devices/ocp.3/pwm_test_"+self.name+"."+self.nb+"/duty", str(duty), "w")
def __init__(self, name, nb, invert): """ Initialise le PWM et positionne le servomoteur à 0 degrès. Args: name (str): Nom du PWM ("P9_14", "P9_22"...). nb (str): Nombre après le nom du PWM. invert (bool): Défini si l'axe du servomoteur est inversé. """ self.name = name self.nb = nb self.invert = invert try: Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "bone_pwm_"+name, "a") sleep(2) Methods.writeFile("/sys/devices/ocp.3/pwm_test_"+name+"."+nb+"/period", "20000000", "w") self.setPosition(0) except IOError: print "La configuration des servos a déjà été faites"
def initPeriph(self): """ Initialise tout les périphériques servant à l'application (Laser, Servos, Manette nunchuk...) et instancie les objets globals. """ try: # GPIOs Methods.writeFile("/sys/class/gpio/export", "66", "a") Methods.writeFile("/sys/class/gpio/export", "69", "a") Methods.writeFile("/sys/class/gpio/export", "45", "a") # PWMs Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "am33xx_pwm", "a") # UART Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "BB-UART1", "a") sleep(2) except IOError: print "La configuration des périphériques a déjà été faites" # Création du laser self.laser = Laser(45) # Création de la gestion d'indication des modes self.modeObj = Mode(66, 69) # Création des servos self.verticalServo = Servo("P9_14", "10", False) self.horizontalServo = Servo("P9_22", "11", True) # Création de l'UART self.uart = UART() # Création du Nunchuk try: self.nunchuk = Nunchuk() self.nunchukIsConnected = True except IOError: print "Erreur de connexion avec la manette \"Nunchuk\"" self.nunchukIsConnected = False
def setMode(self, mode): """ Change le mode de l'application Args: mode (str): Nom du mode ("Manual", "Semi-auto", "Wii", "Auto" ou "Stop"). """ self.mode = mode if mode == "Manual" or mode == "Semi-auto": print "Mode manuel" self.shutdownThread.set() sleep(0.7) Methods.writeFile("/sys/class/gpio/gpio"+str(self.led1)+"/value", "1", "w") Methods.writeFile("/sys/class/gpio/gpio"+str(self.led2)+"/value", "0", "w") elif mode == "Wii": print "Mode Wii" self.shutdownThread.set() sleep(0.7) Methods.writeFile("/sys/class/gpio/gpio"+str(self.led1)+"/value", "1", "w") Methods.writeFile("/sys/class/gpio/gpio"+str(self.led2)+"/value", "1", "w") elif mode == "Auto": print "Mode automatique" self.shutdownThread.clear() threading.Thread(target=self.blink).start() elif mode == "Stop": self.shutdownThread.set() sleep(0.7) Methods.writeFile("/sys/class/gpio/gpio"+str(self.led1)+"/value", "0", "w") Methods.writeFile("/sys/class/gpio/gpio"+str(self.led2)+"/value", "0", "w") else: print "Mode inconnu !"