Bonjour à tous
Je réalise un programme chargé d'afficher un certains nombre de cibles à l'écran. le déclanchement de cet affichage intervient lors de la reception d'un front montant sur la broche D0 du port parallèle, d'où l'utilisation du composant. Ceci permet notamment de syncroniser cet affichage avec un autre appareil qui nous sert à faire des mesures.
Jusqu'à présent, je n'avais aucun problème mais depuis que je suis passé en affichage OpenGL, je n'ai plus d'affichage pendant la boucle d'attente sur le port parallèle.
j'ai en faite une boucle qui scrute le port parallèle jusqu'à ce que l'on reçoive un front montant sur la broche D0 et c'est là que viens le problème puisque si je la met en commentaire, mon affichage de la croix se fait correctement.
Voici mon code :
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 // Union pour la récupération des broches du port parallèle union TSChar { char chr; struct { unsigned char Bit0 : 1; unsigned char Bit1 : 1; unsigned char Bit2 : 1; unsigned char Bit3 : 1; unsigned char Bit4 : 1; unsigned char Bit5 : 1; unsigned char Bit6 : 1; unsigned char Bit7 : 1; }; }; // Méthode chargée de dessiner l'écran void __fastcall TSessionForm::OnPaint(TObject *Sender) { // Si OpenGL est actif if(OpenGlActif) { // Si l'on est en mode Attente du port ou Mesure A Vide if(AttentePort || AVide) { // On défini la couleur de dessin DefinirCouleurDessin(CouleurCible); // On dessine la croix Croix(); } } // Méthode qui permet de lancer une session void __fastcall TSessionForm::LancerSession(void) { // booléen pour savoir si l'on peut lancer la partie bool Lancement = false; // Si le memo est affiché if(Memo->Visible == true) { // On le rend invisible Memo->Visible = false; // On désactive le menu de popup FermerProfil FermerProfil->Enabled = false; // On le vide Memo->Clear(); // On marque que l'on peut lancer la partie Lancement = true; } // Sinon else { // Si la sélection du fichier XMl de profil à réussit if(SelectionnerProfil()) { // Si le Fichier XML est correct if(ChargerProfilXML()) { // On marque que l'on peut lancer la partie Lancement = true; } } } // Si le booléen de lancement est à vrai if(Lancement) { // On prépare le profil PreparerProfil(); // On cache le curseur de la souris Screen->Cursor = crNone; // On désactive le menu de click droit this->PopupMenu->AutoPopup = false; // On modifie le contexte d'aide de la fenêtre de session HelpContext = 8; // HELPCONTEXT = 8 => IDH_LANCERSESSION if(Application->MessageBox("Utiliser la plateforme ?", "", MB_YESNO) == IDYES) { // On se met en attente sur le port parallèle AttenteDuPort(); } // Si l'on a pas arrêter pendant l'attente du port if(!ArretPendantAttentePort) { // On marque que l'on démarre le premier groupe de cibles NumGroupeCibles = 0; // On lance la cible DbtGroupeCibles(); } } } // Méthode qui met en attente le programme void __fastcall TSessionForm::AttenteDuPort(void) { TSChar donnee; // Structure permettant de récupérer les valeurs // des broches du port parallèle // Ouverture du port OuvrirPort(); //ShowMessage("Le port est ouvert"); // Mettre le port en lecture // Bit 5 du registre de base + 2 a 1 PortIO->Port [0x37A] = PortIO->Port [0x37A] | 0x20; // On met le booléen d'attente de port à vrai AttentePort = true; // Si OpenGl n'est pas actif if(!OpenGlActif) { // On initialise OpenGL InitOpenGl(); } Application->ProcessMessages(); while(AttentePort) { Application->ProcessMessages(); // On lit le port parallèle donnee.chr = PortIO->Port [0x378]; // Si le bit passe à 1 if(donnee.Bit0 == 1) { // On arrète l'attente AttentePort = false; // On ferme le port FermerPort(); } } }
Partager