Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tkinter et Arduino

    6 mars 2016 à 12:18:24

    Bonjour,

    Voilà, j'ai un problème qui concerne l'utilisation de Tkinter avec l'utilisation d'un Arduino Nano. Je vous explique le contexte : je dois faire une interface graphique qui affiche une fenêtre avec un texte au dessus et deux boutons en dessous sur lesquels se trouvent des images. L'utilisateur doit choisir une des deux images en cliquant sur un des deux boutons. Ensuite, le texte et les deux images sont remplacés par un nouveau texte et deux nouveaux images, et ainsi de suite. 

    Donc, jusque là, tout va bien mon programme marche nickel. Mais, je dois aussi ajouter les commandes d'un petit robot. Je m'explique: lorsque la fenetre avec le texte et les boutons apparaissent, après un petit laps de temps (le temps que l'utilisateur lise le texte), mon petit robot doit commencer à bouger. Pour cela, je dois lui envoyer des commandes via un Arduino Nano. Mais.... ca ne marche pas. Le problème, c'est que mon robot bouge avant que la fenêtre ne s'affiche. En fait, le programme exécute d'abord les commandes de contrôle du robot avant celles d'afficher la fenêtre. Comment faire pour que la fenêtre s'affiche en même temps que les commandes du robot soient envoyées à l'arduino? De même, lorsque j'appuie sur un des boutons ensuite, le robot bouge d'abord, et ensuite seulement, le texte et les images sont changés. A nouveau comment faire pour que les deux événements se passent en même temps?

    Voici mon code pour plus de compréhension:

    from tkinter import *
    from PIL import Image, ImageTk
    from data import *
    from openpyxl import load_workbook
    import sys
    import serial
    import time
    
    excelFile = load_workbook(filename='Datas.xlsx')
    sheetText = excelFile['Texts and pictures'] # ws is now an IterableWorksheet
    sheetData = excelFile['Datas']
    sheetIntro = excelFile['Introduction and conclusion']
    sheetKeepon = excelFile['Keepon']
    
    keeponRight = serial.Serial(sheetKeepon['C2'].value,9600)
    time.sleep(1)
    
    i = 0
    
    text = textUp()
    picturesRight = picturesManRight()#dictionnary of pictures for right side
    picturesLeft = picturesWomanLeft()#dictionnary of pictures for left side
    n = len(text)#pour avoir 4 questions
    window = Tk()
        
    def numberClickMan(window,frame,buttonR,buttonL,pictureR,pictureL,messages,label,n):
        keeponRight.write(b"MOVE STOP;")
        global i
        i = i + 1
        if i == n:
            window.destroy()
        else:
            label["text"] = messages[i]
            pictureRight = PhotoImage(file = pictureR[i])
            pictureLeft = PhotoImage(file = pictureL[i])
            buttonR["image"] = pictureRight#pour remplacer l'image de droite
            buttonL["image"] = pictureLeft#pour remplacer l'image de gauche
            time.sleep(7)#attends 7 secondes le temps que l'utilisateur lise le texte
            listeKeeponMale = keeponRightMale()#charge une liste d'instruction destinée au robot
            keeponMove(listeKeeponMale)#envoie les instructions pour faire bouger le robot à l'arduino
        window.mainloop()
        
        
    def numberClickWoman(window,frame,buttonR,buttonL,pictureR,pictureL,messages,label,n):
        keeponRight.write(b"MOVE STOP;")
        global i
        i = i + 1
        if i == n:
            window.destroy()
        else:
            label["text"] = messages[i]
            pictureRight = PhotoImage(file = pictureR[i])
            pictureLeft = PhotoImage(file = pictureL[i])
            buttonR["image"] = pictureRight#pour remplacer l'image de droite
            buttonL["image"] = pictureLeft#pour remplacer l'image de gauche
            time.sleep(7)#attends 7 secondes le temps que l'utilisateur lise le texte
            listeKeeponMale = keeponRightMale()#charge une liste d'instruction destinée au robot
            keeponMove(listeKeeponMale)#envoie les instructions pour faire bouger le robot à l'arduino
        window.mainloop()
    
    def keeponMove(listeKeepon):
        global i
        for j in range(len(listeKeepon[i])):
            if type(listeKeepon[i][j]) == bytes:
                keeponRight.write(listeKeepon[i][j])
            else:
                time.sleep(listeKeepon[i][j])
                
    def createWindowGame(window,picturesRight,picturesLeft,n):
        messages = textUp()
        fieldLabel = Label(window, height=3, text=messages[i])
        fieldLabel.pack(side = "top")
        framework = Frame(window)
        framework.pack()
        photoRight = ImageTk.PhotoImage(file = picturesRight[i])
        photoLeft = ImageTk.PhotoImage(file = picturesLeft[i])
        buttonRight = Button(framework, width =500, height =500, image=photoRight, \
                             command = lambda : numberClickMan\
                             (window,framework,buttonRight,buttonLeft,picturesRight,\
                              picturesLeft,messages,fieldLabel,n))
        buttonLeft = Button(framework, width =500, height =500, image=photoLeft, \
                            command = lambda : numberClickWoman\
                            (window,framework,buttonRight,buttonLeft,picturesRight,\
                             picturesLeft,messages,fieldLabel,n))
        buttonLeft.grid(row = 0, column = 0)
        buttonRight.grid(row = 0, column = 1)
        time.sleep(7)#attends 7 secondes le temps que l'utilisateur lise le texte
        listeKeeponMale = keeponRightMale()#charge une liste d'instruction destinée au robot
        keeponMove(listeKeeponMale)#envoie les instructions pour faire bouger le robot à l'arduino
        window.mainloop()
    
    createWindowGame(window,picturesRight,picturesLeft,n)



    • Partager sur Facebook
    • Partager sur Twitter

    Tkinter et Arduino

    × 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