1 2 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