Aller au contenu


Information tutoriel

  • Ajouté le: déc. 14 2016 03:57
  • Lectures: 3154
 


* * * * *
0 Notes

Python - Classe et Fonction

Python 3.x - Raspberry PI 3 - PCA9685
Appel d'une classe et d'une fonction via un autre fichier .py

Posté par Oliver17 on déc. 14 2016 03:57

Bonjour les Maker's, voici un ptit tuto, du moins la procédure à suivre pour appeler une classe et une fonction via un autre fichier.

Pour ma part cela me permet d'appeler tous mes servomoteurs pour Glenn de cette façon (bien entendu je vais mettre les bases par la suite vous pouvez très bien améliorer ce programme à votre guise ^^).

 

Langage : Python 3.x

Matériel utilisé : Raspberry PI 3 - PCA9685

 

Nous avons donc deux fichier .py qui doivent communiquer entres eux (pour l'exemple) :

(Je pars du principe que vous savez déjà utiliser le driver PCA9685 pour contrôler vos servomoteurs.)

 

script.py  -  classeetfonction.py

 

 

script.py : notre script principal

from classeetfonction import ActiviteMotrice as ecla  
#On indique que de la classe classeetfonction on importe la fonction ActiviteMotrice et comme c'est trop long à écrire à chaque fois on groupe tous 
# avec un as et on lui donne un ptit nom ecla.
#je tiens à signaler pour les débutants que vous pouvez faire appel au fichier classeetfonction, 
# sans l'import systématique d'ActiviteMotrice, vous pouvez déclarer la classe dans la variable result "result = cla.ActiviteMotrice.coux(argument)"

from Adafruit_PWM_Servo_Driver import PWM
pwm = PWM(0x40, debug = False)
pwm.setPWMFreq(50)

info = 20      #on récupère comme information une valeur en degrés qui sera envoyé à notre fonction.

cla = ecla()   #on appel la classe ActiviteMotrice dans le fichier classeetfonction.py
result = cla.coux(info)  #on créer une nouvelle variable cette fois pour faire appel à notre fonction et lui envoyer comme argument (info).

pwm.setPWM(result[0], 0, result[1]) 
#on récupère nos valeurs du fichier classeetfonction via notre variable result, se qui va nous permettre de d'activer notre servomoteur à la position 0 sur notre carte PCA9685 et lui donner une position en degrés via le map. 

print (cla.coux(info))  #on print l'info via notre fonction.
print (result[0])       #on print l'info précis d'une des deux valeurs avec notre variable result.

classeetfonction.py : notre fichier qui recense toutes nos données sur nos servomoteurs.

class ActiviteMotrice:

   def coux (degres):  #on créer notre fonction avec un paramètre (degres)

      anglemin = -90  #angle mini que l'on veut donner à notre servo en degrés
      anglemax = 90   #angle maxi que l'on veut donner à notre servo en degrés
      servomin = 165  #position mini de notre servo
      servomax = 530  #position maxi de notre servo
      servo = 0       #emplacement de notre servo sur la carte PCA9685
      result = int(degres - anglemin) * (servomax - servomin) / (anglemax - anglemin) + servomin) #ici on map l'angle (anglemin & anglemax) avec la position du servo (servomin & servomax)
      inf = print ("Servo : {0} - Position {1}".format(servo, result))  #un print retrouvant les infos du servo en fonction plus sa position, cette ligne n'est pas obligatoire
      return (servo, result)  #on retourne l'information du servo à activer (servo) et envoyer le résultat de notre map (result)

Bien entendu pour un servomoteur ça ne vaut pas le coup de jouer avec les classes et fonctions, mais si vous en avez déjà une dizaine à manipuler je vous encourages vivement à essayer se genre de technique.

 

J'espère que cela vous aidera.

 

PS : soyez indulgent, je programme en tant que débutant et j'apprend sur le tas, alors pas la peine de me parler de Self car ici on en a pas vraiment besoin ;)

 

Merci d'avoir lu jusqu'au bout ^^