From version < 11.5 >
edited by Jean-Yves Dupertuis
on 18-07-2014, 11:11
To version < 11.6 >
edited by Jean-Yves Dupertuis
on 18-07-2014, 13:39
< >
Change comment: programme python

Summary

Details

Page properties
Content
... ... @@ -8,7 +8,7 @@
8 8  = [[Fabrication>>doc:fabricationSwitch]] =
9 9  
10 10  
11 -== Interface Homme - Machine ==
11 += Interface Homme - Machine =
12 12  
13 13  Pour commuter le TX sur une autre antenne, il suffit de taper la lettre (//canal désiré) au clavier.//
14 14  
... ... @@ -81,3 +81,291 @@
81 81  [[image:cableCommAnt.jpg]]
82 82  
83 83  
84 +
85 += Programmation Python =
86 +
87 +Voici le code source, vous pouvez le copier directement dans un IDLE Python 2.7.
88 +
89 +Si vous ne l'avez pas, voici un installeur pour Windows. Pour linux c'est plus simple il suffit d' ouvrir l'IDLE 2.7 déjà présent
90 +
91 +sur votre carte raspberry - py.
92 +
93 +
94 +# auteur : Gilliand Loris
95 +# date : 02.06.14
96 +# version 0.8
97 +#
98 +# amelioration depuis 0.7 : integre un lcd qui peut commander les changements
99 +
100 +# importation bibilotheques
101 +import pygame, sys, time
102 +from pygame.locals import *
103 +import RPi.GPIO as GPIO
104 +from Adafruit_CharLCDPlate import *
105 +
106 +# initialisation fenetre et gpio
107 +pygame.init()
108 +GPIO.setmode(GPIO.BCM)
109 +
110 +# fonction qui change LA sortie active
111 +def change_sortie(ligne):
112 + BP1.etat = 0
113 + BP2.etat = 0
114 + BP3.etat = 0
115 + BP4.etat = 0
116 + BP1.affiche_etat(inactif)
117 + BP2.affiche_etat(inactif)
118 + BP3.affiche_etat(inactif)
119 + BP4.affiche_etat(inactif)
120 + time.sleep(0.25)
121 + if ligne == 'a':
122 + BP1.etat = 1
123 + BP1.affiche_etat(actif)
124 + elif ligne == 'b':
125 + BP2.etat = 1
126 + BP2.affiche_etat(actif)
127 + elif ligne == 'c':
128 + BP3.etat = 1
129 + BP3.affiche_etat(actif)
130 + elif ligne == 'd':
131 + BP4.etat = 1
132 + BP4.affiche_etat(actif)
133 +
134 +# classe de creation de cases
135 +class Cases:
136 + def __init__(self,image,pos,port,init):
137 + self.image = pygame.image.load(image).convert()
138 + self.pos = pos
139 + self.port = port
140 + self.etat = init
141 + self.rect = self.image.get_rect().move(self.pos)
142 + GPIO.setup(self.port,GPIO.OUT)
143 + GPIO.output(self.port,GPIO.LOW)
144 +
145 + def affiche_etat(self,indicateur):
146 + indicateur = pygame.image.load(indicateur).convert()
147 + indi_rect = indicateur.get_rect()
148 + indi_rect.centerx = self.rect.centerx - self.pos[0]
149 + indi_rect.centery = self.rect.centery - self.pos[1]
150 + if self.etat == 0:
151 + GPIO.output(self.port,GPIO.LOW)
152 + elif self.etat == 1:
153 + GPIO.output(self.port,GPIO.HIGH)
154 + self.image.blit(indicateur,indi_rect)
155 +
156 +# initialisation de la fenetre
157 +screen = pygame.display.set_mode((600,600))
158 +clock = pygame.time.Clock()
159 +# initialisation des couleurs
160 +rouge = (255,0,0)
161 +noir = (0,0,0)
162 +blanc = (255,255,255)
163 +vert = (0,255,0)
164 +bleu = (0,0,255)
165 +
166 +# initialisation des variables
167 +startline = (183,149)
168 +endline = (293,75)
169 +
170 +flag_canal = 0
171 +
172 +canal = [4,17,18,22,23,24,25,27]
173 +
174 +# definitions des zones
175 +zone1 = pygame.Surface((600,150))
176 +zone1.fill(bleu)
177 +
178 +zone2 = pygame.Surface((400,300))
179 +zone2.fill(bleu)
180 +
181 +zone3 = pygame.Surface((600,150))
182 +zone3.fill(bleu)
183 +
184 +zone4 = pygame.Surface((200,300))
185 +zone4.fill(bleu)
186 +
187 +# definitions des objets a afficher dans les zones
188 +# zone 1
189 +font = pygame.font.Font(None,60)
190 +titre1 = font.render("HB9EM",1,noir)
191 +titre2 = font.render("Commutateur d'antennes",1,noir)
192 +zone1.blit(titre1,(230,30))
193 +zone1.blit(titre2,(50,70))
194 +
195 +# zone 2
196 +commu = pygame.image.load("commu_antenne.bmp").convert()
197 +zone2.blit(commu,(50,50))
198 +
199 +# zone 3
200 +actif = "actif_commu.bmp"
201 +inactif = "inactif_commu.bmp"
202 +
203 +BP1 = Cases("bouton_commu.bmp",(125,50),canal[1],1)
204 +BP2 = Cases("bouton_commu.bmp",(225,50),canal[2],0)
205 +BP3 = Cases("bouton_commu.bmp",(325,50),canal[3],0)
206 +BP4 = Cases("bouton_commu.bmp",(425,50),canal[4],0)
207 +grp_cases = [BP1,BP2,BP3,BP4]
208 +BP1.affiche_etat(actif)
209 +BP2.affiche_etat(inactif)
210 +BP3.affiche_etat(inactif)
211 +BP4.affiche_etat(inactif)
212 +
213 +zone3.blit(BP1.image,BP1.rect)
214 +zone3.blit(BP2.image,BP2.rect)
215 +zone3.blit(BP3.image,BP3.rect)
216 +zone3.blit(BP4.image,BP4.rect)
217 +
218 +font = pygame.font.Font(None,20)
219 +canal_a = font.render("canal A",1,noir)
220 +canal_b = font.render("canal B",1,noir)
221 +canal_c = font.render("canal C",1,noir)
222 +canal_d = font.render("canal D",1,noir)
223 +zone3.blit(canal_a,(125,35))
224 +zone3.blit(canal_b,(225,35))
225 +zone3.blit(canal_c,(325,35))
226 +zone3.blit(canal_d,(425,35))
227 +
228 +# zone 4
229 +commande = font.render("Commandes :",1,noir)
230 +touche_a = font.render("Selection canal A : touche a",1,noir)
231 +touche_b = font.render("Selection canal B : touche b",1,noir)
232 +touche_c = font.render("Selection canal C : touche c",1,noir)
233 +touche_d = font.render("Selection canal D : touche d",1,noir)
234 +quitter = font.render("Quitter : touche q",1,noir)
235 +zone4.blit(commande,(10,20))
236 +zone4.blit(touche_a,(10,60))
237 +zone4.blit(touche_b,(10,80))
238 +zone4.blit(touche_c,(10,100))
239 +zone4.blit(touche_d,(10,120))
240 +zone4.blit(quitter,(10,200))
241 +
242 +# affichage des zones
243 +screen.blit(zone1,(0,0))
244 +screen.blit(zone2,(0,150))
245 +screen.blit(zone3,(0,450))
246 +screen.blit(zone4,(400,150))
247 +
248 +lcd = Adafruit_CharLCDPlate()
249 +lcd.begin(16,2)
250 +btn = ((lcd.SELECT, '', lcd.ON),
251 + (lcd.LEFT , 'Antenne 1' , lcd.ON),
252 + (lcd.UP , 'Antenne 2' , lcd.ON),
253 + (lcd.DOWN , 'Antenne 4' , lcd.ON),
254 + (lcd.RIGHT , 'Antenne 3' , lcd.ON))
255 +prev = -1
256 +temp = ''
257 +active = 'Antenne 1'
258 +act = ' active'
259 +lcd.message((active + act))
260 +while 1:
261 + clock.tick(30)
262 + for b in btn:
263 + if lcd.buttonPressed(lcd.SELECT):
264 + lcd.clear()
265 + lcd.message((active + act))
266 + time.sleep(0.25)
267 + if temp != '':
268 + active = temp
269 + temp = ''
270 + if active == 'Antenne 1':
271 + change_sortie('a')
272 + endline = (293,75)
273 + if active == 'Antenne 2':
274 + change_sortie('b')
275 + endline = (293,125)
276 + if active == 'Antenne 3':
277 + change_sortie('c')
278 + endline = (293,175)
279 + if active == 'Antenne 4':
280 + change_sortie('d')
281 + endline = (293,225)
282 + lcd.setCursor(0,0)
283 + lcd.message((active + act))
284 + lcd.setCursor(0,1)
285 + lcd.message(' ')
286 + if lcd.buttonPressed(lcd.RIGHT):
287 + temp = 'Antenne 3'
288 + lcd.setCursor(0,1)
289 + lcd.message(temp)
290 + if lcd.buttonPressed(lcd.DOWN):
291 + temp = 'Antenne 4'
292 + lcd.setCursor(0,1)
293 + lcd.message(temp)
294 + if lcd.buttonPressed(lcd.UP):
295 + temp = 'Antenne 2'
296 + lcd.setCursor(0,1)
297 + lcd.message(temp)
298 + if lcd.buttonPressed(lcd.LEFT):
299 + temp = 'Antenne 1'
300 + lcd.setCursor(0,1)
301 + lcd.message(temp)
302 +
303 + for event in pygame.event.get():
304 + lcd.setCursor(0,0)
305 + if event.type == pygame.QUIT:
306 + GPIO.cleanup()
307 + sys.exit()
308 + if event.type == pygame.KEYDOWN:
309 + if event.key == pygame.K_q:
310 + GPIO.cleanup()
311 + sys.exit()
312 + if event.key == pygame.K_a:
313 + active = 'Antenne 1'
314 + lcd.message((active + act))
315 + change_sortie('a')
316 + endline = (293,75)
317 + if event.key == pygame.K_b:
318 + active = 'Antenne 2'
319 + lcd.message((active + act))
320 + change_sortie('b')
321 + endline = (293,125)
322 + if event.key == pygame.K_c:
323 + active = 'Antenne 3'
324 + lcd.message((active + act))
325 + change_sortie('c')
326 + endline = (293,175)
327 + if event.key == pygame.K_d:
328 + active = 'Antenne 4'
329 + lcd.message((active + act))
330 + change_sortie('d')
331 + endline = (293,225)
332 +
333 + souris = pygame.mouse.get_pos()
334 + souris_rect = [[souris[0],souris[1]],[5,5]]
335 + souris_rect = pygame.Rect(souris_rect)
336 +
337 + for i in grp_cases:
338 + lcd.setCursor(0,0)
339 + if souris_rect.colliderect(i.rect.move((0,450))):
340 + if pygame.mouse.get_pressed() == (1,0,0):
341 + if i.port == canal[1]:
342 + active = 'Antenne 1'
343 + lcd.message((active + act))
344 + change_sortie('a')
345 + endline = (293,75)
346 + if i.port == canal[2]:
347 + active = 'Antenne 2'
348 + lcd.message((active + act))
349 + change_sortie('b')
350 + endline = (293,125)
351 + if i.port == canal[3]:
352 + active = 'Antenne 3'
353 + lcd.message((active + act))
354 + change_sortie('c')
355 + endline = (293,175)
356 + if i.port == canal[4]:
357 + active = 'Antenne 4'
358 + lcd.message((active + act))
359 + change_sortie('d')
360 + endline = (293,225)
361 +
362 + zone3.blit(BP1.image,BP1.rect)
363 + zone3.blit(BP2.image,BP2.rect)
364 + zone3.blit(BP3.image,BP3.rect)
365 + zone3.blit(BP4.image,BP4.rect)
366 + screen.blit(zone3,(0,450))
367 + zone2.blit(commu,(50,50))
368 + pygame.draw.line(zone2,noir,startline,endline,2)
369 + screen.blit(zone2,(0,150))
370 + pygame.display.update()
371 +