Changes for page Commutateur d' antenne
Last modified by Jean-Yves Dupertuis on 27-08-2014, 11:07
edited by Jean-Yves Dupertuis
on 25-07-2014, 11:23
on 25-07-2014, 11:23
edited by Jean-Yves Dupertuis
on 18-07-2014, 11:06
on 18-07-2014, 11:06
Change comment:
dossier fabrication commAnt
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 0 added, 7 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,8 +6,3 @@ 1 -{{box cssClass="floatinginfobox" title="**Contents**"}} 2 -{{toc /}} 3 -{{/box}} 4 - 5 - 6 6 = Commutation d'antenne via raspberry - py = 7 7 8 8 Ce commutateur va permettre via internet de modifier l' antenne reliée au TX de la station EM. ... ... @@ -10,10 +10,10 @@ 10 10 Ce travail a été confié à un apprenant de 4ème année (M// Loris Gilliand//) . 11 11 12 12 13 -= [[Fabrication>>doc:fabricationSwitch]]=8 += Fabrication = 14 14 15 15 16 -= Interface Homme - Machine = 11 +== Interface Homme - Machine == 17 17 18 18 Pour commuter le TX sur une autre antenne, il suffit de taper la lettre (//canal désiré) au clavier.// 19 19 ... ... @@ -23,57 +23,17 @@ 23 23 24 24 25 25 26 -(% height="656" width="809" %) 27 -|=|= 28 -|((( 29 -== **__Première fenêtre__** == 30 -)))| 31 -|((( 32 -Le premier programme que j’ai écrit, commu01.py, est un programme 33 -qui m’a aidé à réaliser des zones dans la fenêtre. Ce programme 34 -dispose de 3 zones. Une zone pour le titre, une pour l’image et la 35 -dernière n’est pas utilisée. J’utilise aussi la zone de l’image pour 36 -dessiner. Actuellement, l’image représente le boîtier du commutateur 37 -avec le fonctionnement interne dessiner dessus. Sur cette image, 38 -j’ai décidé d’afficher la position du commutateur en dessinant une ligne 39 -du point commun au canal actif. Pour quitter le programme, l’utilisateur 40 -utilisera la touche q du clavier.Le code du programme est annexé 41 -à la fin du document.\\ 42 -)))|[[image:http://212.74.133.122:81/xwiki/bin/download/Hardware/SwitchAntenna/com_1.jpg?width=1580||alt="com_1.jpg"]] 43 -|((( 44 -== **__Utilisation de la fenêtre__** == 45 -)))| 46 -|La première modification que j’ai faite dans mon programme est la modification du canal sélectionner sur l’image. J’ai donc choisi, qu’à l’aide du clavier, l’utilisateur pourra faire bouger la sortie. Pour le faire, 47 -il pourra utiliser les touches a, b, c et d du clavier. La fenêtre en elle-même n’a pas changé. Pour faire bouger le commutateur, j’utilise Pygame pour dessiner des lignes. Il demande un point de départ, un point d’arrivée et une épaisseur. J’ai donc noté les coordonnées des points A, B, C et D lors de la création de l’image et j’ai finalement utilisé ces coordonnées dans le programme. Une fois une touche pressée, je 48 -supprime l’ancienne ligne en affichant l’image pardessus et je redessine la nouvelle ligne aux nouvelles coordonnées. Le code du programme (commu02.py) est annexé à la fin du document.|[[image:com_2.jpg]] 49 -|((( 50 -== **__Zone d’aide__** == 51 -)))| 52 -|Comme le changement de canal fonctionne, j’ai décidé d’ajouter une zone d’aide. Cette zone contiendra les différentes commandes que l’utilisateur peut utilisé. J’ai placé cette zone sur la droite de l’image ce qui m’a fait redéfinir l’emplacement de l’image dans la zone centrale et la position des lignes à afficher. Le code du programme (commu03.py) est annexé à la fin du document.|[[image:com_3.jpg]] 53 -|((( 54 -== Boutons d’indication == 55 -)))| 56 -| L’étape suivante dans l’amélioration de mon programme est d’afficher sur des « boutons » l’état de chaque sorties. Ces « boutons » sont représentés par des carrés noirs. Une sortie active a un vu vert dans son carré alors qu’une sortie inactive a une croix rouge.J’appel ces indicateurs « boutons » car, prochainement, l’utilisateur pourra utiliser la souris pour activer une sortie. Pour le moment, les commandes se font encore au clavier. Le code du programme (commu04.py) est annexé à la fin du document. 57 -\\\\Après avoir utiliser les boutons comme indicateurs, j’ai décidé de rendre possible le changement d’état à la souris. Maintenant, il est donc possible de cliquer sur une case pour l’activer. Le code du programme (commu05.py) est annexé à la fin du document.|[[image:com_4.jpg]] 58 -| | 21 +[[image:PremFenetre.jpg]] 59 59 60 -== Finalisation == 61 61 62 -La finalisation du projet c’est fait par la création d’une classe pour les boutons de commande. Cette classe crée une case vide avec 63 63 64 - les attributs image, pos, port, etat et rect. L’attribut pos représenteles coordonnées du coin supérieur gauchedela case.25 +[[image:ZoneAide.jpg]] 65 65 66 -L’attribut port représente le n° du GPIO qui sera attribué à cette case. Les numéros des GPIO sont stockés dans le tableau appelé canal. 67 67 68 -Il faut donc créer la case avec l’argument canal[...] pour le port. Le tableau contient 8 infos donc il est possible de créer jusqu'à 8 cases. 69 -Vous trouverez ci-dessous l’organisation du tableau. 70 70 29 +[[image:BoutonIndication.jpg]] 71 71 72 72 73 - 74 - 75 - 76 - 77 77 [[image:ClassGpio.jpg]] 78 78 79 79 ... ... @@ -93,7 +93,7 @@ 93 93 94 94 == Câblage du module == 95 95 96 -Le raspberry - py travaille avec 8 GPIO qui pour des raisons de protection transit evia des opto - coupleurs.51 +Le raspberry - py travaille avec 8 GPIO qui pour des raisons de protection transit via des opto - coupleurs. 97 97 98 98 Une carte dédiée à cette protection a été développée. 99 99 ... ... @@ -119,316 +119,11 @@ 119 119 120 120 **Ne pas oublier de les relier au 12Vdc !** 121 121 77 + 122 122 == Câble == 123 123 124 124 125 125 [[image:cableCommAnt.jpg]] 126 126 127 -= Programmation Python = 128 128 129 -Voici le code source, vous pouvez le copier directement dans un IDLE Python 2.7. 130 130 131 -Si vous ne l'avez pas, vous pouvez le télécharger sur le site Python [[https:~~/~~/www.python.org/downloads/>>url:https://www.python.org/downloads/]]. 132 - 133 -Pour linux c'est plus simple il suffit d' ouvrir l'IDLE 2.7 déjà présent 134 - 135 -sur votre carte raspberry - py. 136 - 137 -**Important !! **je suis parti du principe que le port **//I2C//** est fonctionnel sur votre raspberry - py. 138 - 139 -**Si ce n'est pas le cas, seul la distribution sans le LCD fonctionnera !** 140 - 141 - 142 - 143 -== Source : == 144 - 145 -{{box}} 146 -##{{{# auteur : Gilliand Loris 147 -# date : 02.06.14 148 -# version 0.8 149 -# 150 -# amelioration depuis 0.7 : integre un lcd qui peut commander les changements 151 - 152 -# importation bibilotheques 153 -import pygame, sys, time 154 -from pygame.locals import * 155 -import RPi.GPIO as GPIO 156 -from Adafruit_CharLCDPlate import * 157 - 158 -# initialisation fenetre et gpio 159 -pygame.init() 160 -GPIO.setmode(GPIO.BCM) 161 - 162 -# fonction qui change LA sortie active 163 -def change_sortie(ligne): 164 - BP1.etat = 0 165 - BP2.etat = 0 166 - BP3.etat = 0 167 - BP4.etat = 0 168 - BP1.affiche_etat(inactif) 169 - BP2.affiche_etat(inactif) 170 - BP3.affiche_etat(inactif) 171 - BP4.affiche_etat(inactif) 172 - time.sleep(0.25) 173 - if ligne == 'a': 174 - BP1.etat = 1 175 - BP1.affiche_etat(actif) 176 - elif ligne == 'b': 177 - BP2.etat = 1 178 - BP2.affiche_etat(actif) 179 - elif ligne == 'c': 180 - BP3.etat = 1 181 - BP3.affiche_etat(actif) 182 - elif ligne == 'd': 183 - BP4.etat = 1 184 - BP4.affiche_etat(actif) 185 - 186 -# classe de creation de cases 187 -class Cases: 188 - def init(self,image,pos,port,init): 189 - self.image = pygame.image.load(image).convert() 190 - self.pos = pos 191 - self.port = port 192 - self.etat = init 193 - self.rect = self.image.get_rect().move(self.pos) 194 - GPIO.setup(self.port,GPIO.OUT) 195 - GPIO.output(self.port,GPIO.LOW) 196 - 197 - def affiche_etat(self,indicateur): 198 - indicateur = pygame.image.load(indicateur).convert() 199 - indi_rect = indicateur.get_rect() 200 - indi_rect.centerx = self.rect.centerx - self.pos[0] 201 - indi_rect.centery = self.rect.centery - self.pos[1] 202 - if self.etat == 0: 203 - GPIO.output(self.port,GPIO.LOW) 204 - elif self.etat == 1: 205 - GPIO.output(self.port,GPIO.HIGH) 206 - self.image.blit(indicateur,indi_rect) 207 - 208 -# initialisation de la fenetre 209 -screen = pygame.display.set_mode((600,600)) 210 -clock = pygame.time.Clock() 211 -# initialisation des couleurs 212 -rouge = (255,0,0) 213 -noir = (0,0,0) 214 -blanc = (255,255,255) 215 -vert = (0,255,0) 216 -bleu = (0,0,255) 217 - 218 -# initialisation des variables 219 -startline = (183,149) 220 -endline = (293,75) 221 - 222 -flag_canal = 0 223 - 224 -canal = [4,17,18,22,23,24,25,27] 225 - 226 -# definitions des zones 227 -zone1 = pygame.Surface((600,150)) 228 -zone1.fill(bleu) 229 - 230 -zone2 = pygame.Surface((400,300)) 231 -zone2.fill(bleu) 232 - 233 -zone3 = pygame.Surface((600,150)) 234 -zone3.fill(bleu) 235 - 236 -zone4 = pygame.Surface((200,300)) 237 -zone4.fill(bleu) 238 - 239 -# definitions des objets a afficher dans les zones 240 -# zone 1 241 -font = pygame.font.Font(None,60) 242 -titre1 = font.render("HB9EM",1,noir) 243 -titre2 = font.render("Commutateur d'antennes",1,noir) 244 -zone1.blit(titre1,(230,30)) 245 -zone1.blit(titre2,(50,70)) 246 - 247 -# zone 2 248 -commu = pygame.image.load("commu_antenne.bmp").convert() 249 -zone2.blit(commu,(50,50)) 250 - 251 -# zone 3 252 -actif = "actif_commu.bmp" 253 -inactif = "inactif_commu.bmp" 254 - 255 -BP1 = Cases("bouton_commu.bmp",(125,50),canal[1],1) 256 -BP2 = Cases("bouton_commu.bmp",(225,50),canal[2],0) 257 -BP3 = Cases("bouton_commu.bmp",(325,50),canal[3],0) 258 -BP4 = Cases("bouton_commu.bmp",(425,50),canal[4],0) 259 -grp_cases = [BP1,BP2,BP3,BP4] 260 -BP1.affiche_etat(actif) 261 -BP2.affiche_etat(inactif) 262 -BP3.affiche_etat(inactif) 263 -BP4.affiche_etat(inactif) 264 - 265 -zone3.blit(BP1.image,BP1.rect) 266 -zone3.blit(BP2.image,BP2.rect) 267 -zone3.blit(BP3.image,BP3.rect) 268 -zone3.blit(BP4.image,BP4.rect) 269 - 270 -font = pygame.font.Font(None,20) 271 -canal_a = font.render("canal A",1,noir) 272 -canal_b = font.render("canal B",1,noir) 273 -canal_c = font.render("canal C",1,noir) 274 -canal_d = font.render("canal D",1,noir) 275 -zone3.blit(canal_a,(125,35)) 276 -zone3.blit(canal_b,(225,35)) 277 -zone3.blit(canal_c,(325,35)) 278 -zone3.blit(canal_d,(425,35)) 279 - 280 -# zone 4 281 -commande = font.render("Commandes :",1,noir) 282 -touche_a = font.render("Selection canal A : touche a",1,noir) 283 -touche_b = font.render("Selection canal B : touche b",1,noir) 284 -touche_c = font.render("Selection canal C : touche c",1,noir) 285 -touche_d = font.render("Selection canal D : touche d",1,noir) 286 -quitter = font.render("Quitter : touche q",1,noir) 287 -zone4.blit(commande,(10,20)) 288 -zone4.blit(touche_a,(10,60)) 289 -zone4.blit(touche_b,(10,80)) 290 -zone4.blit(touche_c,(10,100)) 291 -zone4.blit(touche_d,(10,120)) 292 -zone4.blit(quitter,(10,200)) 293 - 294 -# affichage des zones 295 -screen.blit(zone1,(0,0)) 296 -screen.blit(zone2,(0,150)) 297 -screen.blit(zone3,(0,450)) 298 -screen.blit(zone4,(400,150)) 299 - 300 -lcd = Adafruit_CharLCDPlate() 301 -lcd.begin(16,2) 302 -btn = ((lcd.SELECT, '', lcd.ON), 303 - (lcd.LEFT , 'Antenne 1' , lcd.ON), 304 - (lcd.UP , 'Antenne 2' , lcd.ON), 305 - (lcd.DOWN , 'Antenne 4' , lcd.ON), 306 - (lcd.RIGHT , 'Antenne 3' , lcd.ON)) 307 -prev = -1 308 -temp = '' 309 -active = 'Antenne 1' 310 -act = ' active' 311 -lcd.message((active + act)) 312 -while 1: 313 - clock.tick(30) 314 - for b in btn: 315 - if lcd.buttonPressed(lcd.SELECT): 316 - lcd.clear() 317 - lcd.message((active + act)) 318 - time.sleep(0.25) 319 - if temp != '': 320 - active = temp 321 - temp = '' 322 - if active == 'Antenne 1': 323 - change_sortie('a') 324 - endline = (293,75) 325 - if active == 'Antenne 2': 326 - change_sortie('b') 327 - endline = (293,125) 328 - if active == 'Antenne 3': 329 - change_sortie('c') 330 - endline = (293,175) 331 - if active == 'Antenne 4': 332 - change_sortie('d') 333 - endline = (293,225) 334 - lcd.setCursor(0,0) 335 - lcd.message((active + act)) 336 - lcd.setCursor(0,1) 337 - lcd.message(' ') 338 - if lcd.buttonPressed(lcd.RIGHT): 339 - temp = 'Antenne 3' 340 - lcd.setCursor(0,1) 341 - lcd.message(temp) 342 - if lcd.buttonPressed(lcd.DOWN): 343 - temp = 'Antenne 4' 344 - lcd.setCursor(0,1) 345 - lcd.message(temp) 346 - if lcd.buttonPressed(lcd.UP): 347 - temp = 'Antenne 2' 348 - lcd.setCursor(0,1) 349 - lcd.message(temp) 350 - if lcd.buttonPressed(lcd.LEFT): 351 - temp = 'Antenne 1' 352 - lcd.setCursor(0,1) 353 - lcd.message(temp) 354 - 355 - for event in pygame.event.get(): 356 - lcd.setCursor(0,0) 357 - if event.type == pygame.QUIT: 358 - GPIO.cleanup() 359 - sys.exit() 360 - if event.type == pygame.KEYDOWN: 361 - if event.key == pygame.K_q: 362 - GPIO.cleanup() 363 - sys.exit() 364 - if event.key == pygame.K_a: 365 - active = 'Antenne 1' 366 - lcd.message((active + act)) 367 - change_sortie('a') 368 - endline = (293,75) 369 - if event.key == pygame.K_b: 370 - active = 'Antenne 2' 371 - lcd.message((active + act)) 372 - change_sortie('b') 373 - endline = (293,125) 374 - if event.key == pygame.K_c: 375 - active = 'Antenne 3' 376 - lcd.message((active + act)) 377 - change_sortie('c') 378 - endline = (293,175) 379 - if event.key == pygame.K_d: 380 - active = 'Antenne 4' 381 - lcd.message((active + act)) 382 - change_sortie('d') 383 - endline = (293,225) 384 - 385 - souris = pygame.mouse.get_pos() 386 - souris_rect = souris[0],souris[1,[5,5]] 387 - souris_rect = pygame.Rect(souris_rect) 388 - 389 - for i in grp_cases: 390 - lcd.setCursor(0,0) 391 - if souris_rect.colliderect(i.rect.move((0,450))): 392 - if pygame.mouse.get_pressed() == (1,0,0): 393 - if i.port == canal[1]: 394 - active = 'Antenne 1' 395 - lcd.message((active + act)) 396 - change_sortie('a') 397 - endline = (293,75) 398 - if i.port == canal[2]: 399 - active = 'Antenne 2' 400 - lcd.message((active + act)) 401 - change_sortie('b') 402 - endline = (293,125) 403 - if i.port == canal[3]: 404 - active = 'Antenne 3' 405 - lcd.message((active + act)) 406 - change_sortie('c') 407 - endline = (293,175) 408 - if i.port == canal[4]: 409 - active = 'Antenne 4' 410 - lcd.message((active + act)) 411 - change_sortie('d') 412 - endline = (293,225) 413 - 414 - zone3.blit(BP1.image,BP1.rect) 415 - zone3.blit(BP2.image,BP2.rect) 416 - zone3.blit(BP3.image,BP3.rect) 417 - zone3.blit(BP4.image,BP4.rect) 418 - screen.blit(zone3,(0,450)) 419 - zone2.blit(commu,(50,50)) 420 - pygame.draw.line(zone2,noir,startline,endline,2) 421 - screen.blit(zone2,(0,150)) 422 - pygame.display.update() 423 -}}}## 424 -{{/box}} 425 - 426 -[[Fichier Py>>attach:commu08.py]] 427 - 428 - 429 -=== Distributions 'source' sans et avec LCD === 430 - 431 -[[Distribution_sans_LCD.rar>>attach:Distribution.rar]] 432 - 433 - 434 -[[Distribution_lcd.rar>>attach:Distribution_lcd.rar]]
- Distribution.rar
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -707.0 KB - Content
- Distribution_lcd.rar
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -10.8 KB - Content
- com_1.jpg
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -8.9 KB - Content
- com_2.jpg
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -7.7 KB - Content
- com_3.jpg
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -10.8 KB - Content
- com_4.jpg
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -13.2 KB - Content
- commu08.py
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -8.3 KB - Content
-
... ... @@ -1,278 +1,0 @@ 1 -# auteur : Gilliand Loris 2 -# date : 02.06.14 3 -# version 0.8 4 -# 5 -# amelioration depuis 0.7 : integre un lcd qui peut commander les changements 6 - 7 -# importation bibilotheques 8 -import pygame, sys, time 9 -from pygame.locals import * 10 -import RPi.GPIO as GPIO 11 -from Adafruit_CharLCDPlate import * 12 - 13 -# initialisation fenetre et gpio 14 -pygame.init() 15 -GPIO.setmode(GPIO.BCM) 16 - 17 -# fonction qui change LA sortie active 18 -def change_sortie(ligne): 19 - BP1.etat = 0 20 - BP2.etat = 0 21 - BP3.etat = 0 22 - BP4.etat = 0 23 - BP1.affiche_etat(inactif) 24 - BP2.affiche_etat(inactif) 25 - BP3.affiche_etat(inactif) 26 - BP4.affiche_etat(inactif) 27 - time.sleep(0.25) 28 - if ligne == 'a': 29 - BP1.etat = 1 30 - BP1.affiche_etat(actif) 31 - elif ligne == 'b': 32 - BP2.etat = 1 33 - BP2.affiche_etat(actif) 34 - elif ligne == 'c': 35 - BP3.etat = 1 36 - BP3.affiche_etat(actif) 37 - elif ligne == 'd': 38 - BP4.etat = 1 39 - BP4.affiche_etat(actif) 40 - 41 -# classe de creation de cases 42 -class Cases: 43 - def __init__(self,image,pos,port,init): 44 - self.image = pygame.image.load(image).convert() 45 - self.pos = pos 46 - self.port = port 47 - self.etat = init 48 - self.rect = self.image.get_rect().move(self.pos) 49 - GPIO.setup(self.port,GPIO.OUT) 50 - GPIO.output(self.port,GPIO.LOW) 51 - 52 - def affiche_etat(self,indicateur): 53 - indicateur = pygame.image.load(indicateur).convert() 54 - indi_rect = indicateur.get_rect() 55 - indi_rect.centerx = self.rect.centerx - self.pos[0] 56 - indi_rect.centery = self.rect.centery - self.pos[1] 57 - if self.etat == 0: 58 - GPIO.output(self.port,GPIO.LOW) 59 - elif self.etat == 1: 60 - GPIO.output(self.port,GPIO.HIGH) 61 - self.image.blit(indicateur,indi_rect) 62 - 63 -# initialisation de la fenetre 64 -screen = pygame.display.set_mode((600,600)) 65 -clock = pygame.time.Clock() 66 -# initialisation des couleurs 67 -rouge = (255,0,0) 68 -noir = (0,0,0) 69 -blanc = (255,255,255) 70 -vert = (0,255,0) 71 -bleu = (0,0,255) 72 - 73 -# initialisation des variables 74 -startline = (183,149) 75 -endline = (293,75) 76 - 77 -flag_canal = 0 78 - 79 -canal = [4,17,18,22,23,24,25,27] 80 - 81 -# definitions des zones 82 -zone1 = pygame.Surface((600,150)) 83 -zone1.fill(bleu) 84 - 85 -zone2 = pygame.Surface((400,300)) 86 -zone2.fill(bleu) 87 - 88 -zone3 = pygame.Surface((600,150)) 89 -zone3.fill(bleu) 90 - 91 -zone4 = pygame.Surface((200,300)) 92 -zone4.fill(bleu) 93 - 94 -# definitions des objets a afficher dans les zones 95 -# zone 1 96 -font = pygame.font.Font(None,60) 97 -titre1 = font.render("HB9EM",1,noir) 98 -titre2 = font.render("Commutateur d'antennes",1,noir) 99 -zone1.blit(titre1,(230,30)) 100 -zone1.blit(titre2,(50,70)) 101 - 102 -# zone 2 103 -commu = pygame.image.load("commu_antenne.bmp").convert() 104 -zone2.blit(commu,(50,50)) 105 - 106 -# zone 3 107 -actif = "actif_commu.bmp" 108 -inactif = "inactif_commu.bmp" 109 - 110 -BP1 = Cases("bouton_commu.bmp",(125,50),canal[1],1) 111 -BP2 = Cases("bouton_commu.bmp",(225,50),canal[2],0) 112 -BP3 = Cases("bouton_commu.bmp",(325,50),canal[3],0) 113 -BP4 = Cases("bouton_commu.bmp",(425,50),canal[4],0) 114 -grp_cases = [BP1,BP2,BP3,BP4] 115 -BP1.affiche_etat(actif) 116 -BP2.affiche_etat(inactif) 117 -BP3.affiche_etat(inactif) 118 -BP4.affiche_etat(inactif) 119 - 120 -zone3.blit(BP1.image,BP1.rect) 121 -zone3.blit(BP2.image,BP2.rect) 122 -zone3.blit(BP3.image,BP3.rect) 123 -zone3.blit(BP4.image,BP4.rect) 124 - 125 -font = pygame.font.Font(None,20) 126 -canal_a = font.render("canal A",1,noir) 127 -canal_b = font.render("canal B",1,noir) 128 -canal_c = font.render("canal C",1,noir) 129 -canal_d = font.render("canal D",1,noir) 130 -zone3.blit(canal_a,(125,35)) 131 -zone3.blit(canal_b,(225,35)) 132 -zone3.blit(canal_c,(325,35)) 133 -zone3.blit(canal_d,(425,35)) 134 - 135 -# zone 4 136 -commande = font.render("Commandes :",1,noir) 137 -touche_a = font.render("Selection canal A : touche a",1,noir) 138 -touche_b = font.render("Selection canal B : touche b",1,noir) 139 -touche_c = font.render("Selection canal C : touche c",1,noir) 140 -touche_d = font.render("Selection canal D : touche d",1,noir) 141 -quitter = font.render("Quitter : touche q",1,noir) 142 -zone4.blit(commande,(10,20)) 143 -zone4.blit(touche_a,(10,60)) 144 -zone4.blit(touche_b,(10,80)) 145 -zone4.blit(touche_c,(10,100)) 146 -zone4.blit(touche_d,(10,120)) 147 -zone4.blit(quitter,(10,200)) 148 - 149 -# affichage des zones 150 -screen.blit(zone1,(0,0)) 151 -screen.blit(zone2,(0,150)) 152 -screen.blit(zone3,(0,450)) 153 -screen.blit(zone4,(400,150)) 154 - 155 -lcd = Adafruit_CharLCDPlate() 156 -lcd.begin(16,2) 157 -btn = ((lcd.SELECT, '', lcd.ON), 158 - (lcd.LEFT , 'Antenne 1' , lcd.ON), 159 - (lcd.UP , 'Antenne 2' , lcd.ON), 160 - (lcd.DOWN , 'Antenne 4' , lcd.ON), 161 - (lcd.RIGHT , 'Antenne 3' , lcd.ON)) 162 -prev = -1 163 -temp = '' 164 -active = 'Antenne 1' 165 -act = ' active' 166 -lcd.message((active + act)) 167 -while 1: 168 - clock.tick(30) 169 - for b in btn: 170 - if lcd.buttonPressed(lcd.SELECT): 171 - lcd.clear() 172 - lcd.message((active + act)) 173 - time.sleep(0.25) 174 - if temp != '': 175 - active = temp 176 - temp = '' 177 - if active == 'Antenne 1': 178 - change_sortie('a') 179 - endline = (293,75) 180 - if active == 'Antenne 2': 181 - change_sortie('b') 182 - endline = (293,125) 183 - if active == 'Antenne 3': 184 - change_sortie('c') 185 - endline = (293,175) 186 - if active == 'Antenne 4': 187 - change_sortie('d') 188 - endline = (293,225) 189 - lcd.setCursor(0,0) 190 - lcd.message((active + act)) 191 - lcd.setCursor(0,1) 192 - lcd.message(' ') 193 - if lcd.buttonPressed(lcd.RIGHT): 194 - temp = 'Antenne 3' 195 - lcd.setCursor(0,1) 196 - lcd.message(temp) 197 - if lcd.buttonPressed(lcd.DOWN): 198 - temp = 'Antenne 4' 199 - lcd.setCursor(0,1) 200 - lcd.message(temp) 201 - if lcd.buttonPressed(lcd.UP): 202 - temp = 'Antenne 2' 203 - lcd.setCursor(0,1) 204 - lcd.message(temp) 205 - if lcd.buttonPressed(lcd.LEFT): 206 - temp = 'Antenne 1' 207 - lcd.setCursor(0,1) 208 - lcd.message(temp) 209 - 210 - for event in pygame.event.get(): 211 - lcd.setCursor(0,0) 212 - if event.type == pygame.QUIT: 213 - GPIO.cleanup() 214 - sys.exit() 215 - if event.type == pygame.KEYDOWN: 216 - if event.key == pygame.K_q: 217 - GPIO.cleanup() 218 - sys.exit() 219 - if event.key == pygame.K_a: 220 - active = 'Antenne 1' 221 - lcd.message((active + act)) 222 - change_sortie('a') 223 - endline = (293,75) 224 - if event.key == pygame.K_b: 225 - active = 'Antenne 2' 226 - lcd.message((active + act)) 227 - change_sortie('b') 228 - endline = (293,125) 229 - if event.key == pygame.K_c: 230 - active = 'Antenne 3' 231 - lcd.message((active + act)) 232 - change_sortie('c') 233 - endline = (293,175) 234 - if event.key == pygame.K_d: 235 - active = 'Antenne 4' 236 - lcd.message((active + act)) 237 - change_sortie('d') 238 - endline = (293,225) 239 - 240 - souris = pygame.mouse.get_pos() 241 - souris_rect = [[souris[0],souris[1]],[5,5]] 242 - souris_rect = pygame.Rect(souris_rect) 243 - 244 - for i in grp_cases: 245 - lcd.setCursor(0,0) 246 - if souris_rect.colliderect(i.rect.move((0,450))): 247 - if pygame.mouse.get_pressed() == (1,0,0): 248 - if i.port == canal[1]: 249 - active = 'Antenne 1' 250 - lcd.message((active + act)) 251 - change_sortie('a') 252 - endline = (293,75) 253 - if i.port == canal[2]: 254 - active = 'Antenne 2' 255 - lcd.message((active + act)) 256 - change_sortie('b') 257 - endline = (293,125) 258 - if i.port == canal[3]: 259 - active = 'Antenne 3' 260 - lcd.message((active + act)) 261 - change_sortie('c') 262 - endline = (293,175) 263 - if i.port == canal[4]: 264 - active = 'Antenne 4' 265 - lcd.message((active + act)) 266 - change_sortie('d') 267 - endline = (293,225) 268 - 269 - zone3.blit(BP1.image,BP1.rect) 270 - zone3.blit(BP2.image,BP2.rect) 271 - zone3.blit(BP3.image,BP3.rect) 272 - zone3.blit(BP4.image,BP4.rect) 273 - screen.blit(zone3,(0,450)) 274 - zone2.blit(commu,(50,50)) 275 - pygame.draw.line(zone2,noir,startline,endline,2) 276 - screen.blit(zone2,(0,150)) 277 - pygame.display.update() 278 -