Commit 1dc28db5cb2e327aaf582be701bed8bee4548a51

Authored by sblas
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();