Partage
  • Partager sur Facebook
  • Partager sur Twitter

Commentaires programme MLI

Commenter un programme permettant de générer une MLI sur raspberry Pi

    8 février 2018 à 10:38:03

    Bonjour, il faut que je commente un programme Python qui m'a été fourni par un prof pour mon projet de BTS SN, ce programme doit générer une MLI, et grâce à Tkinter, il doit y avoir un slider qui permet de changer le rapport cyclique de la MLI. 
    Il m'a dit qu'il avait aussi mis dans le programme des lignes qui permettent d'allumer des leds avec un bouton, mais je les aient enlever parce que ça ne sert pas pour mon projet, par contre je ne suis pas certaine d’avoir tout enlever. Je dois vraiment voir juste les lignes en rapport avec la MLI et celles en rapport avec le slider. Pouvez vous s'il vous plaît vérifier que j'ai enlever tout ce qu'il fallait dans le code et si me commentaires sont justes? Pouvez vous aussi me dire à quoi servent les lignes que je n'ai pas commentées? Je ne les aient pas comprises. 

    from tkinter import * # importer la librairie Tkinter
    
    import time 
    import RPi.GPIO as GPIO # imorter les GPIO
    
    GPIO.setmode(GPIO.BOARD)#
    GPIO.setup(3, GPIO.OUT) #
    GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP) #
    GPIO.setup(12,GPIO.OUT) #
    p = GPIO.PWM(12,100) #
    p.start(0) #
    
    	
    def check_button():
    	if (GPIO.input(5) == GPIO.HIGH): #Si l'enntrée 5 du GPIO, est au niveau haut
    		labelText.set("Boutton pressé.") #On affiche le texte "bouton préssé" sur une fenêtre Tkinter
    		print ("Boutton pressé")# On affiche le texte  "Bouton préssé" sur la fenêtre de compilation python
    	else:
    		labelText.set("") # Sinon, on affiche rien 
    	fenetre.after(10,check_button) # 
     
    def gpio_mli_activation(temp): #
    
            temp=value.get() #
            print(temp) # Affiche la temporisation
            p.ChangeDutyCycle(temp) # Change la durée du cycle de la MLI
            time.sleep(0.2) #Pause de 0.2 secondes
    
    fenetre = Tk() # Création de la fenêtre principale
    fenetre.title("Essai led") # Titre de la fenêtre
    fenetre.geometry('500x300+200+200') # Taille de la fenêtre
    
    button = Button(fenetre, text="Quitter.", fg="blue", command=quit) #Permet de quitter le programme en appuyant sur le bouton
    button.pack(side=RIGHT, padx=10, pady=10, ipadx=20, ipady=20) #
    
    mli_frame= LabelFrame(fenetre, text="MLI", fg="blue", padx=10, pady=10) #
    mli_frame.pack(padx=0, pady=0)#
    
    value=DoubleVar() #
    scale=Scale(mli_frame, variable=value, orient=HORIZONTAL, command=lambda x: gpio_mli_activation(value))
    scale.pack(ipadx=10, ipady=10) #
    
    
    labelText = StringVar()
    labelText.set("Boutton pressé.") # Affiche le texte Bouton préssé
    label1 = Label(fenetre, textvariable=labelText, height=4) # Permet d'afficher le texte et de modifier sa taille
    
     
    label1.pack(side=LEFT) # Place le texte à gauche sur la fenêtre Tkinter
    
    
    
    fenetre.after(10,check_button) #
    fenetre.mainloop() # Boucle principale
    
    GPIO.cleanup() # Efface tout ce qu'il y a eu sur le GPIO
    
    



    Merci d'avance de vos réponses :)

    -
    Edité par ondine26 8 février 2018 à 10:40:02

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2018 à 15:30:56

      Bonjour,

      Pour tkinter, je te propose de regarder cette doc (en français) : tkinter (pour after), tkinter (pour les variables de contrôle) et pour la méthode pack, cela permet tout simplement d'afficher un objet (simplement le créer ne le fera pas apparaitre).

      Enfin pour RPi.GPIO, je ne saurais te renseigner, mais n'hésite pas à utiliser help()pour connaitre la doc d'un objet.

      Bonne continuation !

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 février 2018 à 19:17:39

        Si on a pas la tronche de tes branchements, ça va être difficile de voir... Il suffit que tu vérifies sur quelles sorties se trouvent tes LEDs.

        Si tu n'as pas cette possibilité, c'est que ce travail n'a pas lieu d'être. Il faut donc indiquer ce que sont les entrées 3, 5 et 12. Et si elles ne font pas référence à une quelconque LED, je ne vois rien d'autres comme entrées dans ton programme faisant référence à du matériel.

        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2018 à 9:07:05

          Merci de vos réponses, justement je n'ai pas de LED, j'ai enlever dans le programme plusieurs choses qui servaient à allumer les leds et j'aimerais qu'on me dise s'il reste des choses qui ne servent qu'aux leds pour que je puisse les enlevées. La seule broche importante est la 12, celle de la MLI.

          J'ai enlever quelques ligne de GPIO parce que je pense qu'elles servaient pour la led, et j'ai pu mettre plus de commentaire.
          Il y a quand même quelque chose que je ne comprends pas, à quoi sert fenetre.after, et c'est quoi les paramètres qu'on met dedans (10, check_button)? Merci de vos réponses.

          from tkinter import * # importer la librairie Tkinter
          
          import time 
          import RPi.GPIO as GPIO # imorter les GPIO
          
          GPIO.setmode(GPIO.BOARD)#
          GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP) #
          GPIO.setup(12,GPIO.OUT) #
          p = GPIO.PWM(12,100) #
          p.start(0) #
          
          	
          def check_button():
          	if (GPIO.input(5) == GPIO.HIGH): #Si l'enntrée 5 du GPIO, est au niveau haut
          		labelText.set("Boutton pressé.") #On affiche le texte "bouton préssé" sur une fenêtre Tkinter
          		print ("Boutton pressé")# On affiche le texte  "Bouton préssé" sur la fenêtre de compilation python
          	else:
          		labelText.set("") # Sinon, on affiche rien 
          	fenetre.after(10,check_button) # 
           
          def gpio_mli_activation(temp): #
          
                  temp=value.get() #
                  print(temp) # Affiche la temporisation
                  p.ChangeDutyCycle(temp) # Change la durée du cycle de la MLI
                  time.sleep(0.2) #Pause de 0.2 secondes
          
          fenetre = Tk() # Création de la fenêtre principale
          fenetre.title("MLI essai") # Titre de la fenêtre
          fenetre.geometry('500x300+200+200') # Taille de la fenêtre
          
          button = Button(fenetre, text="Quitter.", fg="blue", command=quit) # Permet de quitter le programme en appuyant sur le bouton
          button.pack(side=RIGHT, padx=10, pady=10, ipadx=20, ipady=20) # Affiche le bouton
          
          mli_frame= LabelFrame(fenetre, text="MLI", fg="blue", padx=10, pady=10) # Crée un cadre avec un texte bleu affichant MLI
          mli_frame.pack(padx=0, pady=0)# Affiche le cadre de la MLI
          
          value=DoubleVar() #Memorise un flottant de valeur 0.0
          scale=Scale(mli_frame, variable=value, orient=HORIZONTAL, command=lambda x: gpio_mli_activation(value)) # crée un curseur
          scale.pack(ipadx=10, ipady=10) # Affiche le curseur
          
          
          labelText = StringVar()# Variable de contrôle du widget scale
          labelText.set("Boutton pressé.") # Affiche le texte Bouton préssé
          label1 = Label(fenetre, textvariable=labelText, height=4) # Permet d'afficher le texte et de modifier sa taille
          
           
          label1.pack(side=LEFT) # Place le texte à gauche sur la fenêtre Tkinter
          
          
          
          fenetre.after(10,check_button) #
          fenetre.mainloop() # Boucle principale
          
          GPIO.cleanup() # Efface tout ce qu'il y a eu sur le GPIO
          



          -
          Edité par ondine26 13 février 2018 à 10:53:01

          • Partager sur Facebook
          • Partager sur Twitter
            23 mai 2018 à 11:36:25

            Coucou, je n'avais pas envie de refaire un sujet, parce qu celui ci est déjà bien. J'ai besoin de faire un diagramme UML de classes de ce programme Python. Je l'ai modifié depuis la dernière fois.

            from tkinter import *
            
            import time
            import RPi.GPIO as GPIO
            
            GPIO.setmode(GPIO.BCM)
            GPIO.setup(3, GPIO.OUT)
            GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
            
            
            def gpio_mli_activation(value):
                    temp=value.get()
                    print(temp)
            
            def mli(value):
                    p=GPIO.PWM(17,100)
                    p.start(0)
                    p.ChangeDutyCycle(value)
                    p.stop
                            
            
            
            fenetre = Tk()# Creation de la fenetre principale
            fenetre.title("Slider MLI")# Titre de la fenetre
            fenetre.geometry('475x230+200+200')# Taille de la fenetre
            
            button = Button(fenetre, text="Quitter.", fg="purple4", command=quit)# Permet de quitter le programme en appuyant sur le bouton
            button.pack(side=RIGHT, padx=10, pady=1, ipadx=19, ipady=12)# Affiche le bouton
            
            mli_frame= LabelFrame(fenetre, text="MLI", fg="DeepPink4", padx=62, pady=30)# Cree un cadre avec un texte Rose affichant MLI
            mli_frame.pack(padx=10, pady=20)# Affiche le cadre de la MLI
            
            value=DoubleVar()#Memorise un flottant de valeur 0.0
            scale=Scale(mli_frame, variable=value, orient=HORIZONTAL, command=lambda x: gpio_mli_activation(value))# crée un curseur
            scale.pack(ipadx=10, ipady=10)# Affiche le curseur
            
            fenetre.after(10,check_button)
            fenetre.mainloop()# Boucle principale
            
            GPIO.cleanup()# Efface tout ce qu'il y a eu sur le GPIO


            En C je sais à peu près comment mettre les classes puisqu'il y a un fichier où il y a le nom des casses mais là à part Tkinter je ne sais pas quelle classe mettre et d'ailleurs à l'interieur de la classe Tkinter je ne sais pas quoi mettre non plus. Pouvez vous m'aider s'il vous plaît?

            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2018 à 12:04:55

              Bonjour,

              Pour faire un diagramme il me semble que ton programme devra être orienté objet, ce n'est pas très compliqué à faire, à condition de connaitre les classes en python.

              Pour t'aider voici un archétype possible de l'utilisation des classes avec tkinter :

              import tkinter as tk # on préfèrera en général importer les
              # bib de cette manière.
              
              class Interface(tk.Frame):
                  # 'Interface' hérite de tk.Frame, ainsi il est une Frame de
                  # tkinter, ajouté à toutes les methodes qu'on lui apporte.
                  def __init__(self,window,param1,**kwargs):
              
                      tk.Frame.__init__(self,window,**kwargs)
                      
                      self.param1 = param1
                      self.create_btn()
              
                  def create_btn(self):
              
                      self.btn = tk.Button(text=self.param1)
                      self.btn.grid()
              
              if __name__=='__main__':
                  # Ici il y a tout ce qui se lancera en appellant
                  # directement le code.
                
                  win=tk.Tk() # on crée ici la fenêtre...
                  win.title('Example')
                  
                  inter = Interface(win,'bonjour') # ...puis on la refile à notre interface
                  
                  win.mainloop()
              

              En gros tu pourrais te débrouiller pour tout mettre dans différentes classes, hormis les imports et le if __name__=='__main__' à la fin.

              NB : je dis ça sans jamais avoir fais d'UML, mais en tout cas, les classes fonctionnent ainsi ! ;)

              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2018 à 16:09:45

                Merci beaucoup d'avoir répondu, j'ai essayer de le faire avant de voir votre réponse, j'étais mal partit apparement, j'ai tout mis en classes mais je n'aipas de classe interface.

                Voila ce que j'ai fais :

                Et ce que tout est à refaire? Je me suis inspirée d'un cours UML sur un programm Qt, du coup widget par exemple je ne sais pas si là il fallait le mettre par rapport à mon code.

                • Partager sur Facebook
                • Partager sur Twitter

                Commentaires programme MLI

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown