| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 
 |  
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
 
# -- IMPORTATION --
 
#import Tkinter as tk
import tkinter as tk
import serial
 
# -- INTERFACE GRAPHIQUE
class iface1(tk.Frame):
    def __init__(self, parent):
        #Variables
        self.parent = parent
        self.serialConnection = 0
        self.locations=['/dev/ttyUSB0', '/dev/ttyUSB1', '/dev/ttyUSB2', '/dev/ttyUSB3', '/dev/ttyS0', '/dev/ttyS1', '/dev/ttyS2', '/dev/ttyS3']
        self.ser = ''
        self.currentInterface = 0
 
        #Les frames
        tk.Frame.__init__(self, self.parent)
        self.interfaceDirect = tk.LabelFrame(self, text="Direction standard", padx = 20, pady = 20)
        self.interfaceInfos = tk.LabelFrame(self, text="Informations", padx = 20, pady = 20)
        self.interfaceConnexion = tk.LabelFrame(self, text="Connection", padx = 20, pady = 20)
 
        #Images
        self.myImgAV = tk.PhotoImage(file="ressources/icones/av.gif")
        self.myImgRG = tk.PhotoImage(file="ressources/icones/rg.gif")
        self.myImgRC = tk.PhotoImage(file="ressources/icones/rc.gif")
        self.myImgRD = tk.PhotoImage(file="ressources/icones/rd.gif")
        self.myImgRDG = tk.PhotoImage(file="ressources/icones/rdg.gif")
        self.myImgRDD = tk.PhotoImage(file="ressources/icones/rdd.gif")
        self.myImgAR = tk.PhotoImage(file="ressources/icones/ar.gif")
        self.myImgRT = tk.PhotoImage(file="ressources/icones/rt.gif")
        self.myImgRTG = tk.PhotoImage(file="ressources/icones/rtg.gif")
        self.myImgRTD = tk.PhotoImage(file="ressources/icones/rtd.gif")
        self.myImgTSPG = tk.PhotoImage(file="ressources/icones/tspg.gif")
        self.myImgRSP = tk.PhotoImage(file="ressources/icones/rsp.gif")
        self.myImgTSPD = tk.PhotoImage(file="ressources/icones/tspd.gif")
        self.myImgCO = tk.PhotoImage(file="ressources/icones/co.gif")
        self.myImgCMD = tk.PhotoImage(file="ressources/icones/cmd.gif")
        self.myImgSD = tk.PhotoImage(file="ressources/icones/send.gif")
 
        #Boutons
        self.btAV = tk.Button(self.interfaceDirect, image=self.myImgAV, bg = "grey", command=self.av)
        self.btCo = tk.Button(self.interfaceConnexion, image=self.myImgCO, bg = "green", command=self.serialConn)
 
        self.btSendDirect = tk.Button(self.interfaceSaisieDirect, image=self.myImgSD, bg = "green", command=self.send_direct)
 
        #Positionnement des boutons généraux
        self.interfaceDirect.grid(column=0, row=0, sticky='NS')
        self.btAV.grid(column=2, row=0)
 
        #Positionement du log
        self.interfaceInfos.grid(column=0, row=3, sticky='NS')
        self.textInfos.grid(column=0, row=0)
 
        #Positionnement de la partie connection
        self.interfaceConnexion.grid(column=1, row=3, sticky='NS')
        self.btCo.grid(column=0, row=0)
 
    #Calcul du temps donné par rapport à une distance demandé
    #delay(3000) = 1 tour de roue = 18cm parcourus
    #distance (cm) * 3000 / 18 = temps à effectué.
    def distanceRoute(self):
        distanceCommand = self.distance.get() #Mise à jour de la distance
        timeRoute = ((int(distanceCommand) * 3000)/18)
        return timeRoute
 
    #Avant
    def av(self):
        speed = self.scaleSpeed.get() #Mise à jour de la vitesse
        distance = self.distanceRoute() #Récupère le temps demandé par rapport à une distance demandé
        #Si on utilise l'interface 1 
        if self.currentInterface == 1:
            #Si on a la connection lancé
            if self.serialConnection == 1:
                self.serialOrdre("!,1,1," + str(speed) + ",1," + str(speed) + ",1," + str(speed) + ",1," + str(speed) + "," + str(distance) + ",*")
 
    #Ecrire sur le port série l'ordre
    def serialOrdre(self, ordre):
        data = bytearray(ordre, 'ascii')
        self.ser.write(data)
 
        information = "Envoyé -> " + ordre + "...\n"
        self.textInfos.insert(0.0, information)
        #print("Ordre envoyé",ordre)
 
 
    #Active les boutons standard
    def btnStandard(self):
        #Si on a la connection lancé
        if self.serialConnection == 1:
            self.btAV.configure(bg = "green")
            self.btRG.configure(bg = "green")
            self.btRC.configure(bg = "grey")
            self.btRD.configure(bg = "green")
            self.btRDG.configure(bg = "green")
            self.btRDD.configure(bg = "green")
            self.btAR.configure(bg = "green")
            self.btRTG.configure(bg = "green")
            self.btRT.configure(bg = "green")
            self.btRTD.configure(bg = "green")
            self.currentManDir.configure(bg = "green")
            self.btTSPG.configure(bg = "red")
            self.btRSP.configure(bg = "blue")
            self.btTSPD.configure(bg = "red")
            #Pour se rappeler dans quelle interface on est
            self.currentInterface = 1
 
    #Active les boutons spéciaux
    def btnSpeciaux(self):
        #Si on a la connection lancé
        if self.serialConnection == 1:
            self.btAV.configure(bg = "red")
            self.btRG.configure(bg = "green")
            self.btRC.configure(bg = "blue")
            self.btRD.configure(bg = "green")
            self.btRDG.configure(bg = "green")
            self.btRDD.configure(bg = "green")
            self.btAR.configure(bg = "red")
            self.btRTG.configure(bg = "red")
            self.btRT.configure(bg = "blue")
            self.btRTD.configure(bg = "red")
            self.currentManDir.configure(bg = "red")
            self.btTSPG.configure(bg = "green")
            self.btRSP.configure(bg = "grey")
            self.btTSPD.configure(bg = "green")
            #Pour se rappeler dans quelle interface on est
            self.currentInterface = 2
 
    #Etablir une connexion
    def serialConn(self):
        #Tentative de connexion au XBee Usb
        for device in self.locations:
            try:
                information = "Tentative de connecion sur le port" + device + "...\n"
                self.textInfos.insert(0.0, information)
 
                self.ser = serial.Serial(device, 9600)
                self.serialConnection = 1
                break
            except:
                information = "Connection échoué sur " + device + "!\n"
                self.textInfos.insert(0.0, information)
 
        #Si la connexion est assuré
        if self.serialConnection == 1:
            self.initRover()    #Lancer l'initialisation du rover
 
posl_app = tk.Tk()              #Instancie la classe
 
iface_graphique = iface1(posl_app)
iface_graphique.grid(column = 0, row = 0, sticky='NS')
 
posl_app.title('POSL Rover')    #Titre de l'application
posl_app.mainloop()             #Boucler | 
Partager