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 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();
... ...