@Bluedeep
Ce n'est pas le constructeur, mais le nom de l'une des méthode que comprend la classe.
D'où la confusion de nom!
@Bluedeep
Ce n'est pas le constructeur, mais le nom de l'une des méthode que comprend la classe.
D'où la confusion de nom!
Le programme ce lance ! mais il y a des confusions avec les changements que l'ont a faitje vais essayer de voir ça
Si vous ne démarrez pas le thread, avez vous un message d'erreur ?
Vous devriez pouvoir utiliser votre bouton 1 pour connecter normalement.
Même en ayant le port connecté en fait, 'Lire' ne va pas faire grand chose à part une nouvelle erreur si le thread essaye de changer le valeur d'un label.
Le code vous à été fourni et vous devez faire afficher l'état des LED sur un écran ?
Précisez le code fourni et celui que vous avez ajouté ainsi que le but, cela permettra de voir plus clair.
Voilà ce que j'ai :
Je me connecte au port COM9 ou ce situ ma µChameleon
Je clique sur le Bouton1...
Et voilà l'erreur :
![]()
Une partie du code a été fournis par le professeur pour un projet antérieur j'ai donc récupéré celui-ci affin de garder les fonctions relier à la µChameleon qui me permet de lire les entrées des Pins, le but de cette partie du projet et de géré 8 capteurs indépendants ( tout ou rien ).
Ici je voudrais voir les états des capteurs " en live " pour trouver un éventuelle mal fonctionnement du système : voir tout simplement quels capteurs sont actif ou non.
Les parties de code que j'ai moi même crée et/ou changer sont : la création du thread ainsi que sa methode Lire() , la méthodeet j'ai ensuite changer le tableau suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part public int LireEntreeTOR(int NumeroPin)avant Pin étais à 18 au lieu de 100 puis quelque référence concernant ComUSB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Pin[] Bornier = new Pin[100];
Revenez sur votre code d'origine en désactivant le thread déjà, les modifications faites sur une partie du code que le programme n'atteignait jamais pose surement problème.
Alors, j'ai repris le code à part j'ai réalisé quelque modifications :
Serie n'avais rien a faire dans le code, erreur de ma part Serie = Com en faite.
Maintenant quand je lance l'application ( sans le thread ) ça tourne je peut donc me connecter au port COM9 et vérifier si la carte µchameleon répond grâce a la led.
mais une fois le thread en place la même erreur surgitça dois donc venir de mon thread, je vais éplucher çaLe port est fermé![]()
peut être du au faite que j'ai mis la méthode du thread :en public et non en static ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void Lire()
mais quand je la passe en static il ne reconnait pasdans l'instruction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part this
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.label9.Text = "OK";
Pour ce qui est de votre code dans un premier temps:
- Un petit tour sur les tuto. à propos des threads en particulier sur les methodes pour modifier un label (ou autre) dans la form.
- Votre fonction Lire doit tester à intervale régulière les led ? il va falloir revoir la conception car elle le fait pas.
- Dans 'LireEntreeTOR' vous n'utilisez pas le port ouvert fait par votre bouton de connexion, ce qui ne pourra donc pas fonctionner.
Etes vous certains de l'utilité de passer le test dans un thread séparé ?
ma fonction Lire dois afficher "OK" dans le label "Pas de Capteur" quand il y a présence d'un capteur (TOR, comme un interrupteur en faite )
je vais me renseigner pour modifier un label car j'ai un doute aussi![]()
Bonjour,
ou conseillez vous de mettre mon thread ?
Le thread est en fait le dernier de vos soucis, avant de vouloir l'utiliser il va falloir revoir vos bases.
Vous ne semblez pas comprendre la différence entre les variables locales et globales. Avant de poursuivre je vous invite à reprendre vos cours sur le c# pour comprendre ce qui ne va pas et revenir avec quelques correction sur votre code.
Quelques annotations pour piste.
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 public partial class Form1 : Form { // Variable Globale private CSerie Serie; private bool EtatConnexion; private CChameleon CarteChameleon; public Form1() { InitializeComponent(); CSerie Serie = new CSerie(); // Inutile de créer une variable locale ici que vous n'utilisez pas. CChameleon CarteChameleon = new CChameleon(); // Idem Inutile de créer une variable locale ici que vous n'utilisez pas. Thread th = new Thread(Lire); // Toujours pas certains de l'intéret de passer par un thread, mais bon c'est juste un avis. A voir une fois le reste terminé. th.Start(); } public void Lire() { int i = 1; int retour; int GestionCapteurs = 1; CChameleon CarteChameleon = new CChameleon(); // Pourquoi créer encore une variable locale ? Sans l'initialiser correctement pour une connexion en plus. retour = CarteChameleon.LireEntreeTOR(i); // Utilisation de la variable locale !? if (retour == 1) { switch (GestionCapteurs) { case 1: i++; // Pourquoi incrémenter i que vous n'utilisez jamais ? this.label9.Text = "OK"; break; case 2: i++; this.label10.Text = "OK"; break; case 3: i++; this.label11.Text = "OK"; break; case 4: i++; this.label12.Text = "OK"; break; case 5: i++; this.label13.Text = "OK"; break; case 6: i++; this.label14.Text = "OK"; break; case 7: i++; this.label15.Text = "OK"; break; case 8: i++; this.label16.Text = "OK"; break; } } } }
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 class CChameleon { CSerie ComUSB; Pin[] Bornier = new Pin[100]; struct Pin{ public int Config; public int Valeur; }; public enum ConfigPin { Entree = 0, Sortie = 1 } public CChameleon() { ComUSB = null; } public CChameleon(CSerie Ref) { ComUSB = Ref; this.InitialisationDefaut(); } public int LireEntreeTOR(int NumeroPin) { string Trame; string TrameReponse; int Etat = -1; CSerie ComUSB = new CSerie(); // A nouveau, pourquoi créer encore une variable locale ? Sans l'initialiser correctement pour une connexion en plus. if (this.Bornier[NumeroPin - 1].Config == 0) /* Si configurer en entree */ { Trame = "pin " + NumeroPin + " state"; ComUSB.Envoi_Trame(Trame); // Utilisation de la variable locale !? TrameReponse = ComUSB.Recevoir_Trame(); // Utilisation de la variable locale !? Etat = this.DecoderEtatEntreeTOR(TrameReponse); this.Bornier[NumeroPin - 1].Valeur = Etat; } return Etat; } }
Partager