Commit 1dc28db5cb2e327aaf582be701bed8bee4548a51
1 parent
79b06698
Mise à jour du programme arduino esclave
Showing
1 changed file
with
44 additions
and
7 deletions
Show diff stats
Programme_arduino_esclave
1 | 1 | #include <SoftwareSerial.h> |
2 | 2 | |
3 | +//Déclaration des trois liaisons série soft de la brique esclave. La quatrième liaison est la liaison hard | |
3 | 4 | SoftwareSerial soft1(A3,A2); |
4 | 5 | SoftwareSerial soft2(6,5); |
5 | 6 | SoftwareSerial soft3(9,10); |
6 | 7 | |
8 | +//Déclaration des pins pour handshake des quatre liaisons | |
7 | 9 | const int in1 = A5; |
8 | 10 | const int out1 = A4; |
9 | 11 | |
... | ... | @@ -16,13 +18,21 @@ const int out3 = 12; |
16 | 18 | const int in4 = 2; |
17 | 19 | const int out4 = 3; |
18 | 20 | |
21 | +//Indique si un premier message a été reçu ou non | |
19 | 22 | int prem = 0; |
23 | + | |
24 | +//Indique sur quelle liaison se trouve la brique maitre | |
20 | 25 | int papa = 0; |
21 | 26 | |
27 | +//Potentiomètre, pour une potentielle utilisation future | |
22 | 28 | int potar = A0; |
23 | 29 | |
30 | +//Id et type de la brique. A modifier si l'on veut changer l'un ou l'autre. | |
31 | +char id = 0b00110001; | |
32 | + | |
24 | 33 | void setup() |
25 | 34 | { |
35 | + //Initialiser les quatres liaisons série, les pins du handshake en input/output, et mettre les valeurs par défaut sur les out. | |
26 | 36 | Serial.begin(9600); |
27 | 37 | soft1.begin(9600); |
28 | 38 | soft2.begin(9600); |
... | ... | @@ -45,16 +55,28 @@ void setup() |
45 | 55 | |
46 | 56 | void loop() |
47 | 57 | { |
58 | + //Message qui sera envoyé par la brique | |
48 | 59 | String msg=""; |
60 | + | |
61 | + //Variable stockant chaque octet reçu | |
49 | 62 | char inByte='a'; |
63 | + | |
64 | + //Pour les délais | |
50 | 65 | int tps; |
51 | 66 | int timeout; |
67 | + | |
68 | + //Indique par quel port série le message a été reçu | |
52 | 69 | int fin1=0,fin2=0,fin3=0,fin4=0; |
53 | - char id = 0b01100001; | |
70 | + | |
71 | + | |
72 | + //Lecture du pin handshake à high sur un des quatres port, ce qui veut dire qu'une demande de communication est envoyée. | |
73 | + //Chacune des quatre sections qui suivent sont presque entièrement identiques, la seule variation est le port lu. | |
54 | 74 | if(digitalRead(in1)==HIGH){ |
75 | + | |
76 | + //Protocole d'écoute sur une liaison série | |
55 | 77 | digitalWrite(out1,HIGH); |
56 | 78 | soft1.listen(); |
57 | - timeout=0; | |
79 | + timeout=0; | |
58 | 80 | tps=millis(); |
59 | 81 | while(soft1.available()<=0 && timeout<1000){ |
60 | 82 | timeout= millis() - tps; |
... | ... | @@ -68,12 +90,14 @@ void loop() |
68 | 90 | delay(10); |
69 | 91 | } |
70 | 92 | } |
93 | + | |
94 | + //Si c'est le premier message reçu, on attribue au port correspondant le statut de père, c'est dans cette direction qu'est la brique maitre. | |
71 | 95 | if(prem==0){ |
72 | 96 | prem=1; |
73 | 97 | papa=1; |
74 | 98 | msg += id; |
75 | - if((id & 0xF0) ==0x60) msg += '{'; //char pour 123 | |
76 | - else if((id & 0xF0) ==0x40) msg += 0b00000100; | |
99 | + if((id & 0xF0) ==0x60) msg += '{'; //char pour 123 //0x60 correspond à une brique if, insèrer ici le code pour lire un potentiomètre (valeur à comparer) | |
100 | + else if((id & 0xF0) ==0x40) msg += 0b00000100; //0x40 correspond à une brique début while, insèrer ici le code pour lire un potentiomètre (nombre de boucles à exécuter) | |
77 | 101 | msg += '\n'; |
78 | 102 | } |
79 | 103 | else msg+= '\n'; |
... | ... | @@ -82,6 +106,7 @@ void loop() |
82 | 106 | delay(50); |
83 | 107 | } |
84 | 108 | |
109 | + //Voir ci-dessus pour les détails | |
85 | 110 | else if(digitalRead(in2)==HIGH){ |
86 | 111 | digitalWrite(out2,HIGH); |
87 | 112 | soft2.listen(); |
... | ... | @@ -113,6 +138,8 @@ void loop() |
113 | 138 | delay(50); |
114 | 139 | } |
115 | 140 | |
141 | + | |
142 | +//Voir ci-dessus pour les détails | |
116 | 143 | else if(digitalRead(in3)==HIGH){ |
117 | 144 | digitalWrite(out3,HIGH); |
118 | 145 | soft3.listen(); |
... | ... | @@ -144,6 +171,7 @@ else if(digitalRead(in3)==HIGH){ |
144 | 171 | delay(50); |
145 | 172 | } |
146 | 173 | |
174 | +//Voir ci-dessus pour les détails | |
147 | 175 | else if(digitalRead(in4)==HIGH){ |
148 | 176 | digitalWrite(out4,HIGH); |
149 | 177 | timeout=0; |
... | ... | @@ -173,9 +201,15 @@ else if(digitalRead(in3)==HIGH){ |
173 | 201 | digitalWrite(out4, LOW); |
174 | 202 | delay(50); |
175 | 203 | } |
176 | - | |
204 | + | |
205 | + | |
206 | + //Si on a reçu un message sur un port, on le renvoie sur tous. | |
207 | + //Comme ci-dessus, les quatres sections suivantes sont identiques. | |
177 | 208 | if(fin1==1 || fin2==1 || fin3==1 || fin4==1){ |
209 | + | |
210 | + //Si le père est dans cette direction, ou si le message ne provient pas de cette direction, on y envoie la chaine | |
178 | 211 | if((fin1==1 && papa == 1) || (fin1 == 0)){ |
212 | + //Début du protocole d'envoi | |
179 | 213 | timeout=0; |
180 | 214 | tps = millis(); |
181 | 215 | while(timeout<1000){ |
... | ... | @@ -189,8 +223,10 @@ else if(digitalRead(in3)==HIGH){ |
189 | 223 | } |
190 | 224 | } |
191 | 225 | digitalWrite(out1,LOW); |
226 | + //Fin de l'envoi série | |
192 | 227 | } |
193 | 228 | |
229 | + //Identique à celui-ci dessus | |
194 | 230 | if((fin2==1 && papa == 2) || (fin2 == 0)){ |
195 | 231 | timeout=0; |
196 | 232 | tps = millis(); |
... | ... | @@ -208,7 +244,7 @@ else if(digitalRead(in3)==HIGH){ |
208 | 244 | digitalWrite(out2,LOW); |
209 | 245 | } |
210 | 246 | |
211 | - | |
247 | + //Identique à celui-ci dessus | |
212 | 248 | if((fin3==1 && papa == 3) || (fin3 == 0)){ |
213 | 249 | timeout=0; |
214 | 250 | tps = millis(); |
... | ... | @@ -225,7 +261,8 @@ else if(digitalRead(in3)==HIGH){ |
225 | 261 | } |
226 | 262 | digitalWrite(out3,LOW); |
227 | 263 | } |
228 | - | |
264 | + | |
265 | + //Identique à celui-ci dessus | |
229 | 266 | if((fin4==1 && papa == 4) || (fin4 == 0)){ |
230 | 267 | timeout=0; |
231 | 268 | tps = millis(); | ... | ... |