Bonjour a tous,
Je m'ennuis durant les vacances scolaires , ....Je débute en C ....
Je m'amuse à dev 2 applications en parallèle:
1 sur arduino ( en C) et une en C sur Labwindows sur un PC, l'objectif et de les faire communiquer via le port série.
pour l'instant je galère dans le sens Data envoyé par l'arduino:
j'envois grâce à println "I31H";
I correspondant à Input
31 à la patte d'entrée de mon Arduino Méga
H : état haut ( HIGH)
j utilise les 10 pattes numérotés: (31,33,35,37,39,41,43,45,47,49)
C'est une convention que je me suis fixé
Le println envois aussi (\r\n)
donc 6 caractères.
en utilisant un moniteur du port série: ça marche je reçois bien les données sous le format
( j'ai fait un tout petit script, qui mets à l'état haut, puis bas une sortie après l'autre toute les 500 ms, juste pour le test.
Extrait: copie d'écran de la réception des trames envoyées
juste un petit extrait ( car le problème n'est pas là) ...
coté PC, je suis sous Labwindows 2010
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 Serial.println ("I31H"); delay(500); Serial.println ("I31L"); delay(500); Serial.println ("I33H"); delay(500); Serial.println ("I33L"); delay(500); Serial.println ("I35H"); delay(500); Serial.println ("I35L"); delay(500); Serial.println ("I37H"); delay(500); Serial.println ("I37L"); delay(500); Serial.println ("I39H"); delay(500); Serial.println ("I39L"); delay(500); Serial.println ("I41H"); delay(500); Serial.println ("I47L"); delay(500); Serial.println ("I49H"); delay(500); Serial.println ("I49L"); delay(500);
Mon soucis se situe au niveau de décodage du message , seul les 2 derniers messages fonctionnent et je pense avoir un soucis dans
des swith case imbriqués
je m'en sert pour "décoder" caractère par caractère du buffer d'entrée
Le compilateur me donne pas d'erreur ( normale, je ne dois pas avec d'erreur de syntaxe) les prototypes, déclaration sont bonnes:
le InBuffer contient bien 6 caratères ( les bons ...)
Mais qu'une erreur de logique....
il doit y avoir un soucis dans les cases, les switch, ou les break ou les {}.
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194 void ParseData(char *inBuffer) { switch (inBuffer [0]) { case 'I': { ParceBouton(inBuffer); break; } case 'P': { ParcePotar(inBuffer); break; } } } void ParceBouton(char *inBuffer) { switch (inBuffer[1]) //donc Ixx { case '3': // donc I3x switch (inBuffer[2]) { case '1': // pour I31 { switch (inBuffer[3]) { case 'H': SetCtrlVal(PANEL,PANEL_LED31,1); break; case 'L': SetCtrlVal(PANEL,PANEL_LED31,0); break; } break; // break du case '1' } case '3': // pour 33 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED33,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED33,0); break; } break; } case '5': // pour I35 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED35,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED35,0); break; } break; } case '7': { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED37,1); break; case 'L': SetCtrlVal(PANEL,PANEL_LED37,0); break; } break; } case '9': // pour I39 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED39,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED39,0); break; } break; } //Pour 41 case '4': // donc I4x switch (inBuffer[2]) { case '1': // pour I41 { switch (inBuffer[3]) { case 'H': SetCtrlVal(PANEL,PANEL_LED41,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED41,0); break; } break; } case '3': // pour 43 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED43,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED43,0); break; } break; } case '5': // pour I45 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED45,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED45,0); break; } break; } case '7': // pour I47 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED47,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED47,0); break; } break; } case '9': // pour I49 { switch (inBuffer[3]) { case 'H':SetCtrlVal(PANEL,PANEL_LED49,1); break; case 'L':SetCtrlVal(PANEL,PANEL_LED49,0); break; } break; } break; } break; } } void ParcePotar(char *inBuffer) { }
je n'ai que les 2 dernières leds qui fonctionnent (mal) d'ou mon intuition que le défaut est "bête"... (LAbwindows arrive a lire ma trame...)
Merci d'avance, pour votre aide, encore désolé, je débute en C et sur ce forum ...
Mousse
Partager