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 | #include <SoftwareSerial.h> | 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 | SoftwareSerial soft1(A3,A2); | 4 | SoftwareSerial soft1(A3,A2); |
4 | SoftwareSerial soft2(6,5); | 5 | SoftwareSerial soft2(6,5); |
5 | SoftwareSerial soft3(9,10); | 6 | SoftwareSerial soft3(9,10); |
6 | 7 | ||
8 | +//Déclaration des pins pour handshake des quatre liaisons | ||
7 | const int in1 = A5; | 9 | const int in1 = A5; |
8 | const int out1 = A4; | 10 | const int out1 = A4; |
9 | 11 | ||
@@ -16,13 +18,21 @@ const int out3 = 12; | @@ -16,13 +18,21 @@ const int out3 = 12; | ||
16 | const int in4 = 2; | 18 | const int in4 = 2; |
17 | const int out4 = 3; | 19 | const int out4 = 3; |
18 | 20 | ||
21 | +//Indique si un premier message a été reçu ou non | ||
19 | int prem = 0; | 22 | int prem = 0; |
23 | + | ||
24 | +//Indique sur quelle liaison se trouve la brique maitre | ||
20 | int papa = 0; | 25 | int papa = 0; |
21 | 26 | ||
27 | +//Potentiomètre, pour une potentielle utilisation future | ||
22 | int potar = A0; | 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 | void setup() | 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 | Serial.begin(9600); | 36 | Serial.begin(9600); |
27 | soft1.begin(9600); | 37 | soft1.begin(9600); |
28 | soft2.begin(9600); | 38 | soft2.begin(9600); |
@@ -45,16 +55,28 @@ void setup() | @@ -45,16 +55,28 @@ void setup() | ||
45 | 55 | ||
46 | void loop() | 56 | void loop() |
47 | { | 57 | { |
58 | + //Message qui sera envoyé par la brique | ||
48 | String msg=""; | 59 | String msg=""; |
60 | + | ||
61 | + //Variable stockant chaque octet reçu | ||
49 | char inByte='a'; | 62 | char inByte='a'; |
63 | + | ||
64 | + //Pour les délais | ||
50 | int tps; | 65 | int tps; |
51 | int timeout; | 66 | int timeout; |
67 | + | ||
68 | + //Indique par quel port série le message a été reçu | ||
52 | int fin1=0,fin2=0,fin3=0,fin4=0; | 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 | if(digitalRead(in1)==HIGH){ | 74 | if(digitalRead(in1)==HIGH){ |
75 | + | ||
76 | + //Protocole d'écoute sur une liaison série | ||
55 | digitalWrite(out1,HIGH); | 77 | digitalWrite(out1,HIGH); |
56 | soft1.listen(); | 78 | soft1.listen(); |
57 | - timeout=0; | 79 | + timeout=0; |
58 | tps=millis(); | 80 | tps=millis(); |
59 | while(soft1.available()<=0 && timeout<1000){ | 81 | while(soft1.available()<=0 && timeout<1000){ |
60 | timeout= millis() - tps; | 82 | timeout= millis() - tps; |
@@ -68,12 +90,14 @@ void loop() | @@ -68,12 +90,14 @@ void loop() | ||
68 | delay(10); | 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 | if(prem==0){ | 95 | if(prem==0){ |
72 | prem=1; | 96 | prem=1; |
73 | papa=1; | 97 | papa=1; |
74 | msg += id; | 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 | msg += '\n'; | 101 | msg += '\n'; |
78 | } | 102 | } |
79 | else msg+= '\n'; | 103 | else msg+= '\n'; |
@@ -82,6 +106,7 @@ void loop() | @@ -82,6 +106,7 @@ void loop() | ||
82 | delay(50); | 106 | delay(50); |
83 | } | 107 | } |
84 | 108 | ||
109 | + //Voir ci-dessus pour les détails | ||
85 | else if(digitalRead(in2)==HIGH){ | 110 | else if(digitalRead(in2)==HIGH){ |
86 | digitalWrite(out2,HIGH); | 111 | digitalWrite(out2,HIGH); |
87 | soft2.listen(); | 112 | soft2.listen(); |
@@ -113,6 +138,8 @@ void loop() | @@ -113,6 +138,8 @@ void loop() | ||
113 | delay(50); | 138 | delay(50); |
114 | } | 139 | } |
115 | 140 | ||
141 | + | ||
142 | +//Voir ci-dessus pour les détails | ||
116 | else if(digitalRead(in3)==HIGH){ | 143 | else if(digitalRead(in3)==HIGH){ |
117 | digitalWrite(out3,HIGH); | 144 | digitalWrite(out3,HIGH); |
118 | soft3.listen(); | 145 | soft3.listen(); |
@@ -144,6 +171,7 @@ else if(digitalRead(in3)==HIGH){ | @@ -144,6 +171,7 @@ else if(digitalRead(in3)==HIGH){ | ||
144 | delay(50); | 171 | delay(50); |
145 | } | 172 | } |
146 | 173 | ||
174 | +//Voir ci-dessus pour les détails | ||
147 | else if(digitalRead(in4)==HIGH){ | 175 | else if(digitalRead(in4)==HIGH){ |
148 | digitalWrite(out4,HIGH); | 176 | digitalWrite(out4,HIGH); |
149 | timeout=0; | 177 | timeout=0; |
@@ -173,9 +201,15 @@ else if(digitalRead(in3)==HIGH){ | @@ -173,9 +201,15 @@ else if(digitalRead(in3)==HIGH){ | ||
173 | digitalWrite(out4, LOW); | 201 | digitalWrite(out4, LOW); |
174 | delay(50); | 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 | if(fin1==1 || fin2==1 || fin3==1 || fin4==1){ | 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 | if((fin1==1 && papa == 1) || (fin1 == 0)){ | 211 | if((fin1==1 && papa == 1) || (fin1 == 0)){ |
212 | + //Début du protocole d'envoi | ||
179 | timeout=0; | 213 | timeout=0; |
180 | tps = millis(); | 214 | tps = millis(); |
181 | while(timeout<1000){ | 215 | while(timeout<1000){ |
@@ -189,8 +223,10 @@ else if(digitalRead(in3)==HIGH){ | @@ -189,8 +223,10 @@ else if(digitalRead(in3)==HIGH){ | ||
189 | } | 223 | } |
190 | } | 224 | } |
191 | digitalWrite(out1,LOW); | 225 | digitalWrite(out1,LOW); |
226 | + //Fin de l'envoi série | ||
192 | } | 227 | } |
193 | 228 | ||
229 | + //Identique à celui-ci dessus | ||
194 | if((fin2==1 && papa == 2) || (fin2 == 0)){ | 230 | if((fin2==1 && papa == 2) || (fin2 == 0)){ |
195 | timeout=0; | 231 | timeout=0; |
196 | tps = millis(); | 232 | tps = millis(); |
@@ -208,7 +244,7 @@ else if(digitalRead(in3)==HIGH){ | @@ -208,7 +244,7 @@ else if(digitalRead(in3)==HIGH){ | ||
208 | digitalWrite(out2,LOW); | 244 | digitalWrite(out2,LOW); |
209 | } | 245 | } |
210 | 246 | ||
211 | - | 247 | + //Identique à celui-ci dessus |
212 | if((fin3==1 && papa == 3) || (fin3 == 0)){ | 248 | if((fin3==1 && papa == 3) || (fin3 == 0)){ |
213 | timeout=0; | 249 | timeout=0; |
214 | tps = millis(); | 250 | tps = millis(); |
@@ -225,7 +261,8 @@ else if(digitalRead(in3)==HIGH){ | @@ -225,7 +261,8 @@ else if(digitalRead(in3)==HIGH){ | ||
225 | } | 261 | } |
226 | digitalWrite(out3,LOW); | 262 | digitalWrite(out3,LOW); |
227 | } | 263 | } |
228 | - | 264 | + |
265 | + //Identique à celui-ci dessus | ||
229 | if((fin4==1 && papa == 4) || (fin4 == 0)){ | 266 | if((fin4==1 && papa == 4) || (fin4 == 0)){ |
230 | timeout=0; | 267 | timeout=0; |
231 | tps = millis(); | 268 | tps = millis(); |